matlab数值分析程序--高等数学,数值代数的matlab实现-文字版, matlab电子书, 和matlab 有关的电子书:

10.3.4 向后欧拉方法的MATLAB程序

10.3.4  向后欧拉方法的MATLAB程序

用向后欧拉方法求解常微分方程初值问题(10.5)的数值解的MATLAB主程序

function [X,Y,n,P]=Heuler1(funfcn,x0,b,y0,h,tol)

n=fix((b-x0)/h); X=zeros(n+1,1); Y=zeros(n+1,1);

k=1; X(k)=x0; Y(k,:)=y0; Y1(k,:)=y0;

% 绘图.

clc,x0,h,y0

% 产生初值.

for i=2:n+1

X(i)=x0+h; Y(i,:)=y0+h*feval(funfcn,x0,y0);

Y1(i,:)=y0+h*feval(funfcn,X(i),Y(i,:));

% 主循环.

Wu=abs(Y1(i,:)-Y(i,:));

while Wu>tol

   p=Y1(i,:);

Y1(i,:)=y0+h*feval(funfcn,X(i),p);

Y(i,:)=p;

  end

x0=x0+h; y0=Y1(i,:);

Y(i,:)=y0; plot(X,Y,'ro')

grid on

xlabel('自变量 X'), ylabel('因变量 Y')

title('用向后欧拉公式计算dy/dx=f(x,y),y(x0)=y0在[x0,b]上的数值解')

end

  X=X(1:n+1); Y=Y(1:n+1,:); n=1:n+1; P=[n',X,Y]

 

例10.3.6  用向后欧拉公式求解区间上的初值问题 的数值解,取步长,并与精确解作比较,在同一个坐标系中作出图形.然后再取,观察数值解与精确解误差的变化,说明与误差的关系.

解   输入程序

>>S1=dsolve('Dy=8*x-3*y-7','y(0)=1','x')

>> x0=0;y0=1;

b=2;tol=1.e-1;

subplot(2,1,1)

h1=0.01;

[X1,Y1,n,P1]=Heuler1(@funfcn,x0,b,y0,h1,tol)

hold on

S2= 8/3*X1-29/9+38/9*exp(-3*X1), plot(X1,S2,'b-')

legend('h=0.01用向后欧拉公式计算dy/dx=8x-3y-7,y(0)=1在[0,2]上的数值解','dy/dx=8x-3y-7,y(0)=1在[0,2]上的精确解')

hold off

juwY1=S2-Y1;

xiwY1=juwY1./Y1;

L=[P1,S2,juwY1,xiwY1]

subplot(2,1,2)

h=0.05;

[X,Y,n,P]=Heuler1(@funfcn,x0,b,y0,h,tol)

hold on

S1 = 8/3*X-29/9+38/9*exp(-3*X),

plot(X,S1,'b-')

legend('h=0.05用向后欧拉公式计算dy/dx=8x-3y-7,y(0)=1在[0,2]上的数值解','dy/dx=8x-3y-7,y(0)=1在[0,2]上的精确解')

hold off

juwY=S1-Y;

xiwY=juwY./Y;

L=[P,S1,juwY,xiwY]

运行后屏幕显示用向后欧拉公式计算此初值问题在[0,2]上的自变量X处数值解Y和精确解S1及其图形,步长H, Y的相对误差xiwY和绝对误差juwY(略) .

欢迎转载,转载请注明来自一手册:http://yishouce.com/book/3/3100304.html
友情链接It题库(ittiku.com)| 版权归yishouce.com所有| 友链等可联系 admin#yishouce.com|粤ICP备16001685号-1