• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Matlab:双曲方程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
tic;
clear
clc
M=[10,20 40 80];%空间步数
N=2*M;%时间步数
for k=1:length(M)
h=1/M(k);%空间步长
tau=1/N(k);%时间步长
s=tau/h;%步长比
x=0:h:1;
t=0:tau:1;
y=inline('exp(x+t)','x','t');%真解函数
for i=1:length(x)
    for j=1:length(t)
        exact(i,j)=y(x(i),t(j));%真解
    end
end
u=zeros(M(k)+1,N(k)+1);%数值解内存单元
for i=2:M(k)
    u(i,1)=exp(x(i));%初值u(i,0)
    u(i,2)=exp(x(i))+tau*exp(x(i))+(tau^2/2)*exp(x(i));%第二层值u(i,1)
end
u(1,:)=exp(t);%边值u(0,t)
u(M(k)+1,:)=exp(1+t);%边值u(1,t)
phi=zeros(M(k)-1,N(k));
for i=1:N(k)
    phi(1,i)=exp(t(i));
    phi(M(k)-1,i)=exp(1+t(i));
end

A=diag((2*(1-s^2))*ones(M(k)-1,1))+diag(s^2*ones(M(k)-2,1),1)+diag(s^2*ones(M(k)-2,1),-1);
for j=2:N(k)
    u(2:M(k),j+1)=A*u(2:M(k),j)-u(2:M(k),j-1)+s^2*phi(:,j);%数值解
end
error=abs(u(2:M(k),2:end)-exact(2:M(k),2:end));%误差
error_inf(k)=max(max(error));
%error=exact-u;
subplot(1,2,1)
[X,Y]=meshgrid(t(end:-1:2),x(2:M(k)));
mesh(X,Y,error);
xlabel('t');
ylabel('x');
zlabel('error');
grid on 
% pan on;
% zoom on;
pause(0.05)
hold on
end
legend('h=1/10,tau=1/20','h=1/20,tau=1/40','h=1/40,tau=1/80','h=1/80,tau=1/160');
title('Numerical Result')
for p=1:length(M)-1
H=error_inf(p)/error_inf(p+1);
NORM(p)=log2(H);
end
subplot(1,2,2)
plot(1:length(M)-1,NORM,'-bp')
ylabel('误差阶数');
text(2,2,'这就是误差阶数!!!!!')
grid on
axis square
toc; 

效果图:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab之waitbar()delete()close()发布时间:2022-07-22
下一篇:
Python编程语言中调用Matlab绘制保存数据的方案发布时间:2022-07-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap