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

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

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

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

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

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

Міністерство освіти та науки України Національний університет «Львівська політехніка»  РОЗРАХУНКОВА РОБОТА №1 З дисципліни : Алгоритмізація і програмування. Визначення зміни в часі температури металевої заготовки при нагріванні в печі. Варіант №1 Львів-2008 р. Завдання : Залежність, якою описують процес випаровування води із вільної поверхні посудини в акритому приміщенні об’ємом V має вигляд: mt=m0-V*q*(1-e-k τ/V) де m0 i mt- відповідно початкова і залишкова маса води в посудині; q- маса водяної пари яку може увібрати 1 м3 повітря приміщення, τ- час. Знйти об’єм приміщення якщо залилося 1а ) 78г. води за час τ =165xв. , m0=80 г. ;q=13.5 г/m3 ; коефіцієнт к=9*10-4 м3/хв Розв’язання Зведемо задане рівняння до вигляду : f(v)=V*q*(1-e-k τ/V)+ mt-m0 підставивши значення q, mt,m0,к, τ, отримаємо: f(v)= V*14*(1-e-0,286/V)-4 Виділимо корінь (знайдемо інтервал, в якому знаходиться корінь) заданого рівняння шляхом табулювання f(t): Програма табулювання функції мовою С #include<stdio.h> # include<conio.h> #include<math.h> float f(float V) {return V*13.5*(1-exp(-9e-4*165/V))-2;} main() {clrscr(); for(float V=25;V<=35;V+=1) printf("\n V=%4.1f f(V)=%4.5f",V,f(V)); getchar(); }   Результати табулювання функції в середовищі ТС V=30.0 f(V)=-0.00020 V=30.5 f(V)=-0.00012 V=31.0 f(V)=-0.00004 V=31.5 f(V)=0.00003 V=32.0 f(V)=0.00011 V=32.5 f(V)=0.00018 V=33.0 f(V)=0.00025 V=33.5 f(V)=0.00031 V=34.0 f(V)=0.00038 V=34.5 f(V)=0.00044 V=35.0 f(V)=0.00050  Програма табулювання функцій f(V) в середовищі MATLAB clear clc; v=[30:0.5:35]; a=30;b=35; f=bro_fan4(x); format long; z=fzero('bro_fan4(x)',(a+b)/2)disp([v(:) f(:)]); whitebg; plot(v,f,'b-'); grid; xlabel('v');ylabel('y'); legend('y=f(v)')   function y=bro_fan4(V), y=V.*14.*(1-exp(-2,86./V))-4;   %Перша похідна bro_fan41 function y=bro_fan41(V), y=13.5.*(1-exp(-9e-4.*165./V))+V.*13.5.*(-exp(-9e-4.*165./V. *V)).* (-165./V.*V);   %Друга похідна bro_fan42 functfuncion y=bro_fan42(V), y=-y=exp(-9e-4.*165./V)).*(-165/V))+ 13.5.*((-exp(-9e-4.*165./V)).*(-165/V))+ V.*13.5.*((-exp(-9e-4.*165./V))*(-165/V).*(-165/V)+ (-exp(-9e-4.*165./V)).*(-1653.*2.*V/V.*V.*V.*V))   Результати виконання програми середовищі MATLAB z = 31.287888322744607 V f(V)  30.0 30.5 31.0 31.5 32.0 32.5 33.0 33.5 34.0 34.5 35.0 -0.000203579473436 -0.000122504940260 -0.000044041540107 0.000031934871269 0.000105540691091 0.000176885164710 0.000246070926317 0.000313194491850 0.000378346708130 0.000441613162991 0.000503074560482  Графік табулювання функції f(t) в середовищі MATLAB Рис1. Графік функції y=f(V)  Висновок : в результаті табулювання функції і побудови графіка видно, що корінь нелінійного рівняння знаходиться на інтервалі [31;32 ]. Метод половинного ділення Формула методу: vi=(ai-1+bi-1); vi=ai-1; bi=bi-1 коли f(a)*f(vi)>0; vi=bi-1; ai=ai-1 коли f(a)*fvi)<0 Умова виходу: │ ai - bi │<ε Блок-схема алгоритму  Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float v) { return v*13.5*(1-exp(-9e-4*165/v))-2;} main() {clrscr(); float a=31,b=32,v0,v1,eps=1e-4; int i=0; A: v0=(a+b)/2; if(fabs(a-b)>eps) {if(f(a)*f(v0)>0) a=v0; else b=v0; i++; goto A; } printf("\n v0=%.7f f(v0)=%.7f",x0,f(x0)); printf(" i=%d eps=%.7f",і,eps); getchar(); return 0; }  Результат виконання програми V i ε  31.287872314453125 14 10-4   31.287891387939453 17 10-5  31.287888050079346 20 10-6  Наближення кореня в середовищі MATLAB clear,clc a=31;b=32;i=0; v=(a+b)/2; format long; disp('v i eps') for eps=[1e-4 1e-5 1e-6] while abs(a-b)>eps if (bro_fan4(a)*bro_fan4(v)>0) a=v; else b=v; end; v=(a+b)/2; i=i+1; end; disp([v i eps]) end  Результат виконання програми V i ε  31.287872314453125 14 10-4   31.287891387939453 17 10-5  31.287888050079346 20 10-6  2) Mетод простих ітерацій У цьому методі рівняння f(t) замінюється еквівалентним йому рівнянням v=φ(v). φ(v)=v-f(v)/p; |p|>Q/2; Q=max|f’(v)|. [a;b] Умова виходу : |xn-xn+1|<ε*(1-q)/q; q=max|φ’(v)|. [a;b] Умова збіжності: |φ’(v)|<q<1. p =58 q = 0.8275862 Блок-схема алгоритму  Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float v) {return v*13.5*(1-exp(-9e-4*165/v))-2;} main() {clrscr(); float p=58,a=31,b=32,v0,v,eps=1e-4,q=0.827586206896552; int i; for(eps=0.000001;eps<=0.0001;eps=eps*10) {v0=(a+b)/2; v=v0-f(v0)/p; A: if(fabs(v0-v)>eps*(1-q)/q) {v0=v; v=v0-f(v0)/p; i=i+1; goto A; } printf(" v0=%.15f\n i=%d eps=%f\n ",v0,i,eps); } getchar(); return 0; }   Результат виконання програми V i ε  31.287872314453125 13 10-4   31.287891387939453 14 10-5  31.287888050079346 16 10-6  Наближення кореня в середовищі MATLAB %Metod porosti iter clear,clc format long ; p=58 q=0.827586206896552 disp('v i eps') ; format long ; for eps=[1e-4 1e-5 1e-6] a=31;b=32;i=0; v0=(a+b)/2; v=v0-(bro_fan4(v0))/p; while abs(v0-v)>eps*(1-q)/q; v0=v; v=v0-(bro_fan4(v0))/p; i=i+1; end; disp( [v i eps]) end;  Результат виконання програми V i ε  31.287872314453125 13 10-4   31.287891387939453 14 10-5  31.287888050079346 16 10-6   3) Метод хорд Умови застосування методу: f’(v), f’(v), f’’(v)- неперервні на [a;b] f’(v)≠0 та f’’(v)≠0 на [a;b]– видно з рис2 та рис3. Формула методу: v=v0-f(v0)*((v0-vf)/(f(v0)-f(vf))); Умова виходу з ітераційного процесу: |v-v0|<ε*m/(M-m), де M=max|f’(v)|= 115, m=min|f’(v)|=49, [a;b] [a;b] Вибір нульового наближення та фіксованої точки: v=(b-a)/2; f(a)*f(v)>0 то v0=a; vf=b; f(a)*f(v)<0 то v0=b; vf=a; Блок-схема алгоритму  Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float v) {return v*13.5*(1-exp(-9e-4*165/v))-2;} main() {clrscr(); float a=31,b=32 ,v,v0,vf,eps=1e-4,M=115,m=49; int i; for(eps=0.000001;eps<=0.0001;eps=eps*10) {i=0; v=(b-a)/2; if (f(a)*f(v)>0){v0=a; vf=b;} else {v0=b; vf=a;} v=v0-(f(v0)*(v0-vf))/(f(v0)-f(vf)); A: if(fabs(v-v0)>(eps*m/(M-m))) {v0=v; v=v0-(f(v0)*(v0-vf))/(f(v0)-f(vf)); i++; goto A;} printf(" v=%.7f \n i=%d eps=%.6f\n",v,i,eps); } getchar(); return 0; }  Результат виконання програми V i ε  31.2878876 4 10-4  31.2878876 4 10-5  31.2878876 3 10-6   Наближення кореня в середовищі MATLAB %Metod hord clear,clc M=115 m=49 for eps=[1e-4 1e-5 1e-6] a=31;b=32;i=0; v=(b+a)/2; if (bro_fan4(a)*bro_fan4(v)>0) v0=a; vf=b; else v0=b; vf=a; end; v=v0-(bro_fan4(v0)*(v0-vf))/(bro_fan4(v0)-bro_fan4(vf)); while abs(v-v0)>(eps*m/(M-m)) v0=v; v=v0-(bro_fan4(v0)*(v0-vf))/(bro_fan4(v0)-bro_fan4(vf)); i=i+1; end; format long; disp( [v i eps]); end;   Результат виконання програми V i ε  31.2878876 4 10-4  31.2878876 4 10-5  31.2878876 3 10-6  4) Метод дотичних (Метод Ньютона) Вибираємо початкове наближення так, щоб виконувалась умова f(v0)* f''(v0)>0. Умови застосування методу: f’(v), f’(v), f’’(v)- неперервні на [a;b] f’(v)≠0 та f’’(v)≠0 на [a;b]. Формула методу: v=v0-f(v0)/f’(v0); Умова виходу : |v-v0|< √(2*m* ε /M) де M=max|f’’(v)|= 565, m=min|f’(v)|=49, [a;b] [a;b] Вибір нульового наближення: f'(a)*f’’(a)<0 v0=a; f'(a)*f’’(a)<0 v0=b; Блок-схема алгоритму  Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float v) {return v*13.5*(1-exp(-9e-4*165/v))-2;} float fp1(float v) { return 13.5.*(1-exp(-9e-4*165/v))+v*13.5.*(-exp(-9e-4*165/v))*(-165/v*v*v);} float fp2(float v) {return exp(-9e-4*165/v))*(-165/v))+13.5*((-exp(-9e-4*165/v))*(-165/v))+v*13.5*((-exp(-9e-4*165/v))*(-165/v).*(-165/v)+(-exp(-9e-4*165/v))*(-1653*2.*v/(v*v*v*v)));} main() {clrscr(); float eps=1e-4,a=31,b=32,v,v0,M=565,m=49; int i; for(eps=0.000001;eps<=0.0001;eps=eps*10) {i=0;if (fp1(a)*fp2(a)<0) v0=a; else v0=b; v=v0-f(v0)/fp1(v0); A: if(fabs(f(v0)/fp1(v0))>sqrt(2*m*eps/M)) {v0=v; v=v0-f(v0)/fp1(v0); i=i+1; goto A;} printf("\n v=%.7f \n i=%d eps=%.6f",v,i,eps); } } getchar(); return 0; } Результат виконання програми V i ε  31.2878876 4 10-4  31.2878876 3 10-5  31.2878876 2 10-6  Наближення кореня в середовищі MATLAB %Dotuchni clear,clc m=49 M=565 disp(' v i eps'); for eps=[1e-4 1e-5 1e-6] a=31;b=32;i=0; if (bro_fan41 (a)* bro_fan42 (a)<0) v0=a; else v0=b; end; v=v0- bro_fan4 (v0)/ bro_fan41(v0); while abs(v0-v)>sqrt(2*m*eps/M); v0=v; v=v0- bro_fan4 (v0)/ bro_fan41(v0); i=i+1; end; format long; disp( [v i eps]) Результат виконання програми V i ε  31.2878876 4 10-4  31.2878876 3 10-5  31.2878876 2 10-6  5) Комбінований метод У комбінованому методі довжину інтервалу скорочують за допомогою формул методів хород і дотичних. Блок-схема алгоритму  Програма мовою С #include<stdio.h> #include<conio.h> #include<math.h> float f(float v) {return v*13.5*(1-exp(-9e-4*165/v))-2;} float fp1(float v) { return 13.5.*(1-exp(-9e-4*165/v))+v*13.5.*(-exp(-9e-4*165/v))*(-165/v*v*v));} main() {clrscr(); float a,a0,b,b0,eps=1e-4,v; int i; for(eps=0.000001;eps<=0.0001;eps=eps*10) i=0; a0=31;b0=32; a=a0-f(a0)/fp1(a0); b=b0-(f(b0)*(b0-a))/(f(b0)-f(a)); A: if(fabs(a-b)>eps) {a0=a; b0=b; a=a0-f(a0)/fp1(a0); b=b0-(f(b0)*(b0-a))/(f(b0)-f(a)); i=i+1; goto A;} v=(a+b)/2 ; printf(" v=%.7f\n i=%d eps=%.6f\n",v,i,eps); } getchar(); return 0; }  Результат виконання програми V i ε  31.2878876 2 10-4  31.2878876 3 10-5  31.2878876 4 10-6   Наближення кореня в середовищі MATLAB clear,clc format long; disp(' v i eps'); for eps=[1e-4 1e-5 1e-6] a0=31;b0=32;i=0; a=a0- bro_fan4 (a0)/ bro_fan41(a0); b=b0-( bro_fan4 (b0)*(b0-a))/( bro_fan4 (b0)- bro_fan4 (a)); while (abs(a-b)>eps) a0=a; b0=b; a=a0- bro_fan4 (a0)/ bro_fan41(a0); b=b0-( bro_fan4 (b0)*(b0-a))/( bro_fan4 (b0)- bro_fan4 (a)); i=i+1; end; v=(a+b)/2; disp( [v i eps]); end   Результат виконання програми V i ε  31.2878876 2 10-4  31.2878876 3 10-5  31.2878876 4 10-6   Таблиця порівняння результатів Назва методу С MATLAB ε   V i V i   Половинне ділення 31.287 31.28788 31.2878876 14 17 20 31.287 31.28788 31.2878876 14 17 20 10-4 10-5 10-6  Прості ітерації 31.287 31.28788 31.2878876 13 14 16 31.287 31.28788 31.2878876 13 14 16 10-4 10-5 10-6  Метод хорд 31.287 31.28788 31.2878876 4 4 3 31.287 31.28788 31.2878876 4 4 3 10-4 10-5 10-6  Метод дотичних 31.287 31.28788 31.2878876 2 3 4 31.287 31.28788 31.2878876 2 3 4 10-4 10-5 10-6  Комбінований метод 31.287 31.28788 31.2878876 2 3 4 31.287 31.28788 31.2878876 2 3 4 10-4 10-5 10-6   Висновок:для даного рівняння кращу збіжність дають Метод дотичних та Комбінований метод Об’єм приміщення в якому стояла посудина з водою є близько 31м3 .
Антиботан аватар за замовчуванням

12.02.2013 18:02-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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