- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
求解波动方程数值解matlab程序隐式格式2010
求解波动方程数值解的matlab程序 隐式格式2010-04-19 13:45function varargout=liu(varargin)
a=1;T=1;a=1;b=0.5;h=1/20;k=1/40;
f=inline(0,x,t);
fx1=inline(exp(x));
fx2=inline(exp(x));
ft1=inline(exp(t));
ft2=inline(exp(1+t));
[X,Y,Z]=chfenmethed(f,fx1,fx2,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,fx1,fx2,ft1,ft2,a,T,h,k)
%求解下问题
%u_tt-a^2*u_xx=f(x,t) 0x1,0tT
%u(0,t)=ft1,u(1,t)=ft2,
%u(x,0)=fx1(x)
%u_t(x,0)=fx2(x)
%h离散x方向的步长
%k离散t方向的步长
x=0:h:a;
t=0:k:T;
m=length(x);
n=length(t);
s=a*k/h;
[X,T]=meshgrid(x,t);
Z=zeros(n,m);
U=zeros(n,m);
for i=2:m-1
U(1,i)=feval(fx1,x(i));
U(2,i)=U(1,i)+k*feval(fx2,x(i))+k^2/2*(a^2/h^2* ...
(feval(fx1,x(i+1))-2*feval(fx1,x(i))+feval(fx1,x(i-1))+feval(f,x(i),0)));
Z(2,i)=abs(U(2,i)-f0(x(i),t(2)));
end
for j=1:n
U(j,1)=feval(ft1,t(j));
U(j,m)=feval(ft2,t(j));
end
A=-0.5*s^2*ones(1,m-2);
C=A;
B=(1+s^2)*ones(1,m-2);
UU=zeros(1,m-2);
f1=UU;
for i=3:n
for j=2:m-1
UU(j-1)=f0(x(j),t(i));
f1(j-1)=0.5*s^2*U(i-2,j-1)-(1+s^2)*U(i-2,j)...
+0.5*s^2*U(i-2,j+1)+2*U(i-1,j)...
+k^2*feval(f,x(j),t(i-1));
end
f1(1)=f1(1)+0.5*s^2*U(i,1);
f1(end)=f1(end)+0.5*s^2*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);
文档评论(0)