Лабораторная по Методы математического моделирования и численные методы. (Хашимов, ЮУрГУ). Лабораторная работа 1 Сравнение эффективности численных методов
Скачать 59 Kb.
|
Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования Южно-Уральский государственный Университет Факультет «Высшая школа электроники и компьютерных наук» Кафедра «Конструирование и производство радиоэлектронных средств» Лабораторная работа №1 Сравнение эффективности численных методов Выполнил студент: группы КЭ-380 Левченко Г.А. Челябинск 2016 Цель работы В данной работе необходимо ознакомиться с программным пакетом MATLAB, научиться использовать стандартные функции данной программы, а также изучить различные численные методы и их эффективность на примере конкретной задачи. Задание В данной работе необходимо найти решение функции: для с точностью с помощью: Метода Эйткена; Метода ложного положения; Метода деления пополам; Метода простой итерации; Метода Ньютона (в том числе и 3-х его модификаций). Ход работы Листинг программы. Файл Aitken.m (Метод Эйткена) function Aitken %Эйткена clc; format long x1=-1; x2=pi; xx=x1:0.05:x2; [yphi,yf]=f_t(xx); yfmax=max(yf); itmax=1000; it=0; e=1e-6; disp('Метод Эйткена'); tic while it [phi,f]=f_t(x1); xn1=phi; [phi,f]=f_t(xn1); xn2=phi; it=it+1; if(abs(f)/yfmax) break; else x2=(xn1*xn2-xn1*xn1)/(xn2-2*xn1+xn1); x1=x2; end end toc disp('Количество итераций');disp(it); disp('Корень уравнения');disp(x2); function [phi,f]=f_t(s) phi=sin(s+pi/8); f=s-phi; return Файл false_position.m (метод ложного положения) function false_position %ложного положения clc; format long x1=-1; dx=0.05; ee=1e-6; f1=f_t(x1); it=0; disp('Метод ложного положения'); tic while it<1000 x2=x1+dx; it=it+1; f2=f_t(x2); if f1*f2<0 break else x1=x2; f1=f2; end end while it<1000 it=it+1; r=x1-f1*(x2-x1)/(f2-f1); fd=f_t(r); if abs(fd)<=ee break end if f1*fd>0 x1=r; f1=fd; else x2=r; f2=fd; end end toc disp('Количество итераций');disp(it); disp('Корень уравнения');disp(r); function t=f_t(s) t=s-sin(s+pi/8); return Файл bisection.m(метод деления пополам) function bisection %деление пополам clc; format long x1=-1; x2=pi; tic dx=0.05; ee=1e-6; f1=f_t(x1); it=0; disp('Метод деления пополам'); tic while it<1000 x2=x1+dx; f2=f_t(x2); it=it+1; if f1*f2 <0 break else x1=x2; f1=f2; end end while it< 1000 r=(x1+x2)/2; fr=f_t(r); it=it+1; if abs(fr)<=ee break end if f1*fr>0 x1=r; f1=fr; else x2=r; end end toc disp('Количество итераций');disp(it); disp('Корень уравнения');disp(r); function t=f_t(s) t=s-sin(s+pi/8); return Файл simple_iteration.m(метод простой итерации) function simple_iteration %простой итерации format long x1=-1; x2=pi; xx=x1:0.05:x2; [yphi,yf]=f_t(xx); yfmax=max(yf); itmax=1000; it=0; ee=1e-6; tic while it [phi,f]=f_t(x1); xn=phi; if(abs(f)/yfmax) break else x1=xn; it=it+1; end end toc disp(xn); disp(it) function [phi,f]=f_t(s) phi=sin(s+pi/8); f=s-phi; return Файл Newton.m (метод Ньютона) function Newton %Метод Ньютона clc; format long x0=-1; f=inline('x-sin(x+pi/8)'); df=inline('1-cos(x+pi/8)'); ee=1e-6; it0=0; disp('Метод Ньютона'); tic while it0<1000 it0=it0+1; x1=x0-feval(f,x0)/feval(df,x0); x0=x1; y=feval(f,x0); if abs(y) break end end toc disp('Количество итераций');disp(it0); disp('Корень уравнения');disp(x0); Файл Newton_m1.m(метод Ньютона, модификация 1) function Newton_m1 %Первая модификаия метода Ньютона format long clc; p0=-1.23; p1=-1; f=inline('x-sin(x+pi/8)'); df=inline('1-cos(x+pi/8)'); ee=1e-6; it0=0; disp('Первая модификаия метода Ньютона'); tic while it0<1000 it0=it0+1; p2=p1-feval(f,p1)*(p1-p0)/(feval(f,p1)-feval(f,p0)); p0=p1; p1=p2; y=feval(f,p1); if abs(y) break end end toc disp('Количество итераций');disp(it0); disp('Корень уравнения');disp(p1); Файл Newton_m2.m(метод Ньютона, модификация 2) function Newton_m2 %Метод Ньютона format long clc; p0=-1; p01=-1.5; f=inline('x-sin(x+pi/8)'); df=inline('1-cos(x+pi/8)'); ee=1e-6; it0=0; disp('Вторая модификация метода Ньютона'); tic while it0<1000 it0=it0+1; p1=p0-feval(f,p0)/feval(df,p01); p0=p1; y=feval(f,p0); if abs(y) break end end toc disp('Количество итераций');disp(it0); disp('Корень уравнения');disp(p0); Файл Newton_m3.m(метод Ньютона, модификация 3) function Newton_m3 %Третья модификация метода Ньютона format long clc; p0=-1; f=inline('x-sin(x+pi/8)'); df=inline('1-cos(x+pi/8)'); ddf=inline('sin(x+pi/8)'); ee=1e-6; it0=0; disp('Третья модификация метода Ньютона'); tic while it0<1000 it0=it0+1; p1=p0-feval(f,p0)/feval(df,p0)- (((feval(ddf,p0)*feval(f,p0)^2))/2*feval(df,p0)^3); p0=p1; y=feval(f,p0); if abs(y) break end end toc disp('Количество итераций');disp(it0); disp('Корень уравнения');disp(p0); Обработка результатов Таблица 1 – результаты вычислений различных методов
Рисунок 1 – График сравнения времени, необходимого для нахождения корня каждым численным методом Рисунок 2 – График сравнения количества итераций для всех численных методов Вывод Таким образом, как видно из таблицы 1 и рисунка 1 наиболее эффективным по времени методом является метод деления пополам, а самый не эффективным методом является метод Ньютона 2-й модификации. Из рисунка 2 видно, что методы, с помощью которых корень находится за меньшее количество итераций, по сравнению с другими – это методы Ньютона и его 3-я модификация. Так же по рисунку 2 видно, что самый быстрый метод является методом с самым большим количеством итераций. Результаты всех методов расходятся в пределах заданной точности, что говорит о правильности выполнения построения кода для каждого метода. |