五一七教育网
您的当前位置:首页向后 Euler法求解抛物线方程的matlab程序

向后 Euler法求解抛物线方程的matlab程序

来源:五一七教育网
向后 Euler法求解抛物线方程的matlab程序 2010-04-19 21:55

function varargout=liu(varargin) T=1;a=1;h=1/10;k=1/400; f=inline('0','x','t'); fx=inline('exp(x)'); ft1=inline('exp(t)'); ft2=inline('exp(1+t)');

[X,Y,Z]=chfenmethed(f,fx,ft1,ft2,a,T,h,k); mesh(X,Y,Z); shading flat;

xlabel('X','FontSize',14); ylabel('t','FontSize',14);

zlabel('error','FontSize',14); title('误差图');

function [X,T,Z]=chfenmethed(f,fx,ft1,ft2,a,T,h,k) %求解下问题

%u_t-a*u_xx=f(x,t) 0m=length(x); n=length(t); r=a*k/h^2;

[X,T]=meshgrid(x,t); Z=zeros(n,m); U=zeros(n,m); for i=1:m

U(1,i)=feval(fx,x(i)); end

for j=2:n

U(j,1)=feval(ft1,t(j)); U(j,m)=feval(ft2,t(j)); end

A=-r*ones(1,m-2);

B=(1+2*r)*ones(1,m-2); C=A;

UU=zeros(1,m-2); f1=UU;

for i=2:n for j=2:m-1

UU(j-1)=f0(x(j),t(i));

f1(j-1)=U(i-1,j)+k*feval(f,x(j),t(i)); end

f1(1)=f1(1)+r*U(i,1); f1(m-2)=f1(m-2)+r*U(i,m); U(i,2:m-1)=zgf(A,B,C,f1);

Z(i,2:m-1)=abs(U(i,2:m-1)-UU); end

function x=zgf(A,B,C,f) %解 [b1 c1

% a2 b2 c2

% . . . *x=f % % an bn] n=length(B);

B1=zeros(1,n-1); Y=zeros(1,n); x1=zeros(1,n); B1(1)=C(1)/B(1); for i=2:n-1

B1(i)=C(i)/(B(i)-A(i)*B1(i-1)); end

Y(1)=f(1)/B(1); for i=2:n

Y(i)=(f(i)-A(i)*Y(i-1))/(B(i)-A(i)*B1(i-1)); end

x1(n)=Y(n); for i=n-1:-1:1

x1(i)=Y(i)-B1(i)*x1(i+1); end x=x1;

function z=f0(x,t) %精确解函数 z=exp(x+t);

因篇幅问题不能全部显示,请点此查看更多更全内容