ЗАДАНИЕ:
- Составить решение задачи Коши для обыкновенного ДУ из таб. 6.1 методами из таб. 6.2 на отрезке [0,2;1.2] c точностями e =1E-2,1E-3,1E-4 с произвольными начальными условиями.
- Построить график зависимости количества итераций от точности решения eps на терминале.
- Построить графики у(х) и у΄(х) в одной системе координат для всех значений точности e.
N=16.
Выбор варианта ДУ: (N mod 16)+1=(16 mod 16)+1=1
y’=1+0.2*y*sin(x)-y*y
Выбор метода решения: (N mod 6)+1=(16 mod 6)+1=5
Метод Адамса.
АЛГОРИТМ МЕТОДА РЕШЕНИЯ ДУ
Процедура вычисления значения функции:
Процедура вычисления k1, k2, k3 ,k4 для метода Рунге-Кутта:
Процедура, осуществляющая метод Адамса:
Процедура, реализующая метод Адамса с заданной точностью:
ТЕКСТ ПРОГРАММЫ
Файл «Adams001.m»:
1 2 3 4 5 |
function k=adams001(x,y,h,F) k(1)=feval(F,x,y)*h; k(2)=feval(F,x+h/2,y+k(1)/2)*h; k(3)=feval(F,x+h/2,y+k(2)/2)*h; k(4)=feval(F,x+h,y+k(3))*h; |
Файл «Adams002.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function result=Adams002(x1,x2,y1,h,F) %perviye 2 znacheniya opredelim metodom Runge-Kutta. i=1;x(i)=x1; y(i)=y1; for i=1:2 k=Adams001(x(i),y(i),h,F); dy(i)=1/6*(k(1)+2*k(2)+2*k(3)+k(4)); q(i)=h*feval(F,x(i),y(i)); y(i+1)=y(i)+dy(i); i=i+1;x(i)=x1+(i-1)*h; end; %zdesa nachinayetsa metod Adamsa while (x(i)<x2) q(i)=feval(F,x(i),y(i))*h; dq(i-1)=q(i)-q(i-1); d2q(i-2)=dq(i-1)-dq(i-2); y(i+1)=y(i)+q(i)+0.5*dq(i-1)+5/12*d2q(i-2); i=i+1; x(i)=x1+(i-1)*h; end; result=y; |
Файл «Adams.m»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function result=Adams(x1,x2,y1,h,F,eps) kontroll=0;ch=h; while (kontroll==0) kol=(x2-x1)/ch+1; solh=zeros(kol); sol2h=zeros(round(kol/2)); solh=Adams002(x1,x2,y1,ch,F); sol2h=Adams002(x1,x2,y1,2*ch,F); kontroll=1; for i=1:kol/2 if (1/15*abs(solh(2*i)-sol2h(i))>eps) kontroll=0; end end if (kontroll==0) ch=ch/2;end end koll=(kol-1)/((x2-x1)/h); for i=1:(kol-1)/koll+1 % result(i)=sol2h(round((1+(i-1)*koll)/2)); result(i)=solh(round(1+(i-1)*koll)); end result; |
Файл «Lab4.m» (главный файл программы):
1 2 3 4 5 |
function lab4 F=@func; result=Adams(0.2, 1.2, 0, 0.1,F ,1E-2) result=Adams(0.2, 1.2, 0, 0.1,F ,1E-3) result=Adams(0.2, 1.2, 0, 0.1,F ,1E-4); |
РЕЗУЛЬТАТЫ РЕШЕНИЯ ДУ ДЛЯ УКАЗАННЫХ ТОЧНОСТЕЙ
Решения для указанных точностей | |||
x | 1E-2 | 1E-3 | 1E-4 |
0.2 | 0 | 0 | 0 |
0.3 | 0.09993011764152 | 0.09993209594993 | 0.09993019112337 |
0.4 | 0.19865500385268 | 0.19865693071371 | 0.19865514567373 |
0.5 | 0.29443054725646 | 0.29464380252530 | 0.29464222938194 |
0.6 | 0.38625504836402 | 0.38652276346970 | 0.38652146367059 |
0.7 | 0.47281479686655 | 0.47316036586671 | 0.47315936485370 |
0.8 | 0.55328390387374 | 0.55370351179539 | 0.55370280118746 |
0.9 | 0.62711059447867 | 0.62759176879786 | 0.62759131420246 |
1.0 | 0.69402079136861 | 0.69454208500318 | 0.69454183648465 |
1.1 | 0.75397683898923 | 0.75451338182799 | 0.75451328418016 |
1.2 | 0.80713218124688 | 0.80765972512645 | 0.80765972600486 |
ГРАФИК ЗАВИСИМОСТИ КОЛИЧЕСТВА ИТЕРАЦИЙ ОТ ТОЧНОСТИ (решение состоит из одиннадцати элементов шаг h=0.1):
АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ
Полученный график говорит о том, что метод Адамса быстро достигает указанную точность.
ВЫВОДЫ
Мы изучили решение дифференциальных уравнений методом Адамса, получили его для уравнения y’=1+0.2*y*sin(x)-y*y; с точностями ε=0.01, 0.001, 0.0001, построили график зависимости количества итераций от точности.