Визначення зміни в часі температури металевої заготовки при нагріванні в печі. Варіант №2

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2008
Тип роботи:
Розрахункова робота
Предмет:
Алгоритмізація і програмування
Група:
АВ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” РОЗРАХУНКОВА РОБОТА №1 З дисципліни : Алгоритмізація і програмування. Визначення зміни в часі температури металевої заготовки при нагріванні в печі. Варіант №2 Завдання : Зміна в часі температури металевої заготовки при нагріванні в печі описується наступною залежністю  де а – початкова температура печі і заготовки; b  – температура печі через годину. При різниці температур Т заготовки і печі метал нагрівається із швидкістю k*T градусів за хвилину, k – коефіцієнт пропорційності. Визначити : за який час t (за скільки хвилин) температура заготовки досягне 150 °С, коли а=50 °С, b=500 °С, k=0,85 хв.‾ ¹; (14,5098 хв.) Розв’язання Зведемо задане рівняння до вигляду :  Виділимо корінь (знайдемо інтервал, в якому знаходиться корінь) заданого рівняння шляхом : табулювання f(t); Програма табулювання функції мовою С //Lab_1V #include<stdio.h> #include<conio.h> #include<math.h> float f(float t) {float a=50,b=500,T=150,k=0.85; return a+(b-a)/60*(t-(1-exp(-k*t))/k)-T;} main() {clrscr(); float t; for(t=0;t<=60;t+=4) printf("\n\nt=%.4f y=%.4f",t,f(t)); getch(); return 0; }   Результати табулювання функції мовою С t y  0.0000 -100.0000  4.0000 -78.5210  8.0000 -48.8137  12.0000 -18.8232  16.0000 11.1765  20.0000 41.1765  24.0000 71.1765  28.0000 101.1765  32.0000 131.1765  36.0000 161.1765  40.0000 191.1765  44.0000 221.1765  48.0000 251.1765  52.0000 281.1765  56.0000 311.1765  60.0000 341.1765   Табулювання функції в середовищі MATLAB Файл f_bvg1 в якому описана функція f(t) function y=f_bvg1(t); a=50;b=500;k=0.85;T=150; y=a+(b-a)/60*(t-(1-exp(-k*t))/k)-T;   Програма табулювання функції f(t) в середовищі MATLAB %bvglab clc;clear; a=0;b=60; t=[a:(b-a)/1e2:b]; y=f_bvg1(t); t_zero=fzero('f_bvg1',(a+b)/2); plot(t,y,'k-',t_zero,0,'r*');grid; xlabel('t,XB'); ylabel('T(t),C');   Графік табулювання функції f(t) в середовищі MATLAB  Висновок : в результаті табулювання функції і побудови графіка видно, що корінь нелінійного рівняння знаходиться на інтервалі [12;16 ]. 1) Метод половинного ділення Блок-схема алгоритму  Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float t) {float a=50,b=500,T=150,k=0.85; return (a+(b-a)/60*(t-(1-exp(-k*t))/k)-T); } main () float t0,a=12,b=16,eps=1e-4,k=0; a: t0=(a+b)/2; if(f(a)*f(t0)>0) a=t0; else b=t0; if(fabs(a-b)>eps) goto a; printf ("t0=%f eps=%f k=%f",t0,eps,k); getch(); return 0; }   Результат виконання програми t0 k ε  14.5098 16   14.50980 19   14.509799 22    Наближення кореня в середовищі MATLAB %Metod polovunnoho dilennya a=12;b=16;k=0;eps=1e-4; t0=(a+b)/2; while abs(a-b)>eps if f_bvg1(a)*f_bvg1(t0)>0 a=x0; else b=x0; end; t0=(a+b)/2; k=k+1; end; format long; disp('a to b k') disp([a t0 b k])   Результат виконання програми t0 k ε  14.5098 16   14.50980 19   14.509799 22    2) Mетод простих ітерацій У цьому методі рівняння f(t) замінюється еквівалентним йому рівнянням t=φ(t).      Q = 7.4999 → k = 4      q = 0.87499 Блок-схема алгоритму  Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float t) {float a=50,b=500,T=150,k=0.85; return (a+(b-a)/60*(t-(1-exp(-k*t))/k)-T); } main() {float t0=14,t,eps=1e-4,q=0.8749; int i=0; clrscr(); a: t=t0-f(t0)/4; if(fabs(t-t0)>eps*(1-q)/q) {t0=t; i++; goto a; } printf(" t=%.4f i=%d",t,i); getch(); return 0; }   Результат виконання програми t i ε  14.5098 96   14.50980 108   14.509799     Наближення кореня в середовищі MATLAB %Metod prostux iteracij t0=12;q=0.8749;eps=1e-4;i=0; t=t0-f_bvg1(t0)/4; while abs(t-t0)>eps*(1-q)/q; t=t0-f_bvg1(t0)/4; t0=t; i=i+1; end; format long; disp(' t t0 i') disp( [t t0 i])   Результат виконання програми t i ε  14.5098 96   14.50980 108   14.509799 124    3) Метод хорд   Із запису функцій f'(t) та f''(t) видно що обидві ці функції завжди більші за нуль, отже x0=a a xф=b.   Блок-схема алгоритму Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float t0) {float a=50,b=500,T=150,k=0.85; return a+(b-a)/60*(t0-(1-exp(-k*t0))/k)-T; } main() {float t0=12,tf=16,t,eps=1e-5; int i=0; clrscr(); a: t=t0-f(t0)*((t0-tf)/(f(t0)-f(tf))); if(t-t0>eps) {i++; t0=t; goto a; } printf(" t=%.4f i=%d",t,i); getch(); return 0; }   Результат виконання програми t i ε  14.5098 1   14.50980 2   14.509799 2    Наближення кореня в середовищі MATLAB %Metod hord t0=12;tf=16;eps=1e-4;M=7.4999;m=7.4997; t=t0-f_bvg1(t0)*((t0-tf)/(f_bvg1(t0)-f_bvg1(tf))); while abs(t-t0)>eps*m/(M-m); t=t0-f_bvg1(t0)*((t0-tf)/(f_bvg1(t0)-f_bvg1(tf))); t0=t; i=i+1; end; disp(' t t0 i'); disp( [t t0 i]);   Результат виконання програми t i ε  14.5098 1   14.50980 2   14.509799 2    4) Метод дотичних (Метод Ньютона) Вибираємо початкове наближення так, щоб виконувалась умова f(t0)* f''(t0)>0.  t0=16;    Блок-схема алгоритму  Програма мовою С //Lab15_4V #include<stdio.h> #include<conio.h> #include<math.h> float f(float t) {float a=50,b=500,T=150,k=0.85; return a+(b-a)/60*(t-(1-exp(-k*t))/k)-T; } float fs(float t) {float a=50,b=500,k=0.85; return (b-a)/60*(1-exp(-k*t)); } main() {clrscr(); float t0=12,t,M=7.9113*1e-5,m=7.497,eps=1e-4; int i=0; a: t=t0-f(t0)/fs(t0); if(fabs(t-t0)>sqrt(2*m*eps/M)) {i++; t0=t; goto a; } printf("t=%.4f i=%d",t,i); getch(); return 0;}   Результат виконання програми t i ε  14.5098 1   14.50980 2   14.509799 2    Наближення кореня в середовищі MATLAB %Dotuchni t0=12;M=7.9113*1e-5;m=7.497;eps=1e-4;i=0; t=t0-f_bvg1(t0)/f_bvgs1(t0); while abs(t-t0)>sqrt(2*m*eps/M); t=t0-f_bvg1(t0)/f_bvgs1(t0); t0=t; i=i+1; end; format long; disp(' t t0 i') disp( [t t0 i])   Результат виконання програми t i ε  14.5098 1   14.50980 2   14.509799 2    5) Комбінований метод Блок-схема алгоритму  Програма мовою С //Lab15_5V #include<stdio.h> #include<conio.h> #include<math.h> float f(float t) {float a=50,b=500,k=0.85,T=150; return a+(b-a)/60*(t-(1-exp(-k*t))/k)-T; } float fs(float t) {float a=50,b=500,k=0.85; return (b-a)/60*(1-exp(-k*t)); } main() {clrscr(); float r0=12,r,z0=16,z,t,eps=1e-4; int i=0; a: z=z0-f(z0)/fs(z0); r=r0-f(r)*(z-r0)/(f(z)-f(r0)); if(fabs(z-r)>eps) {z0=z; r0=r; i++; goto a; } t=(r+z)/2; printf(" t=%.4f i=%d",t,i); getch(); return 0; }   Результат виконання програми t i ε  14.5098 1   14.50980 1   14.509799 2    Наближення кореня в середовищі MATLAB %Kombinovanui metod r0=12;z0=16;eps=1e-6;i=0; z=z0-f_bvg1(z0)/f_bvgs1(z0); r=r0-(f_bvg1(r0)*(z-r0))/(f_bvg1(z)-f_bvg1(r0)); while (abs(z-r)>eps) z=z0-f_bvg1(z0)/f_bvgs1(z0); r=r0-f_bvg1(r0)*(z-r0)/(f_bvg1(z)-f_bvg1(r0)); z0=z; r0=r; i=i+1; end; t=(r+z)/2; format long; disp(' t i'); disp( [t i]);   Результат виконання програми t i ε  14.5098 1   14.50980 1   14.509799 2    Порівняльна таблиця результатів Назва методу С MATLAB ε   t i t i   Половинне ділення 14,5098 14,50980 14,509799 16 19 22 14,5098 14,50980 14,509799 16 19 22     Прості ітерації 14,5098 14,50980 14,509799 96 108 124 14,5098 14,50980 14,509799 96 108 124     Метод хорд 14,5098 14,50980 14,509799 1 2 2 14,5098 14,50980 14,509799 1 2 2     Метод дотичних 14,5098 14,50980 14,509799 1 2 2 14,5098 14,50980 14,509799 1 2 2     Комбінований метод 14,5098 14,50980 14,509799 1 1 2 14,5098 14,50980 14,509799 1 1 2     
Антиботан аватар за замовчуванням

12.02.2013 18:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!