МП-12_Николаев_Олег_Практ_5_2
.docxОтчет к упражнению 1
Найти приближенное решение уравнения , удовлетворяющего начальному условию , на отрезке () методом ломаных Эйлера с заданной точностью .
Порядок выполнения упражнения:
1. Для отыскания приближенного решения создайте М-функцию.
function [x2,y2,n]=euler(f,x,y,x0,y0,a,b,n0,eps)
n=n0;r=eps+1;
dx1=(b-a)/n;dx2=(b-a)/(2*n);
x2(1)=x0;
y2(1)=y0;
for i=2:1:n+1
x2(i)=x2(i-1)+dx1;
y2(i)=y2(i-1)+subs(f,{x,y},{x2(i-1),y2(i-1)})*dx1;
end
while(r>=eps)
dx1=(b-a)/n;dx2=(b-a)/(2*n);
x1=x2;y1=y2;
x2(1)=x0;
y2(1)=y0;
for i=2:1:2*n+1
x2(i)=x2(i-1)+dx2;
y2(i)=y2(i-1)+subs(f,{x,y},{x2(i-1),y2(i-1)})*dx2;
end
if(n==n0)
plot(x1,y1,'k',x2,y2,'g');
end
i=1:1:n+1;
r=max(abs(y2(2*i-1)-y1(i)));
n=2*n;
end
plot(x2,y2,'r');
end
2. Для тестирования М-функции из п.1 используйте решение уравнения с начальным условием на отрезке с точностью . Вначале найдите «вручную» точное решение. Тестирование оформите в виде scriptа.
syms x y;
figure(1);
axis equal;hold on;grid on;
[x2,y2,n]=euler('x*y',x,y,0,1,0,1,2,0.001);
n =
2048
f='exp(x^2)^0.5';
yp=subs(f,x2);
r=max(abs(yp-y2))
r =
5.3647e-004
figure(2);
axis equal;hold on;grid on;
plot(x2,y2,'*r',x2,yp,'b','LineWidth',2);
Отчет к упражнению 2
Найти приближенное решение уравнения , удовлетворяющего начальному условию , методом последовательных приближений Пикара.
Порядок выполнения упражнения:
1. Для отыскания приближенного решения создайте М-функцию.
function p=pikar(f,x,y,x0,y0,n0)
syms t;
p(1)=y0+0*t;
for i=2:1:n0+1
p(i)=y0+int(subs(f,{x,y},{t,subs(p(i-1),x,t)}),t,x0,x);
set(ezplot(p(i),[0 1]),'Color','r')
end
end
2. Для тестирования М-функции из п.1 используйте решение уравнения с начальным условием на отрезке . Вначале найдите «вручную» точное решение. Тестирование оформите в виде scriptа.
syms x y;
figure(1);
axis equal;hold on;grid on;
n0=4;
p=pikar('x*y',x,y,0,1,n0);
p(n0+1)
ans =
1+1/384*x^8+1/48*x^6+1/8*x^4+1/2*x^2
f='exp(x^2)^0.5';
x=0:0.01:1;
yn=subs(p(n0+1),x);
yp=subs(f,x);
r=max(abs(yp-yn))
r =
2.8377e-004
figure(2);
axis equal;hold on;grid on;
plot(x,yn,'*r',x,yp,'b','LineWidth',2);