声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1509|回复: 11

[编程技巧] 解微分方程求求求助!!!!!

[复制链接]
发表于 2008-8-13 12:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function wdot=wave(t,w)
global wij;
wdot=[0.1,wij];

global wij;
fid=fopen('data.txt','w');
T=0.15;t0=0;tn=0;
dx=0.01;dy=0.01;dt=0.001;c=2000;
nx=60;ny=60;
u=zeros(nx,ny);un=zeros(nx,ny);
vn=zeros(nx,ny);v=zeros(nx,ny);
u(nx/2,ny/2)=1e-4;
u(nx/2-1,ny/2)=1e-4/2;u(nx/2+1,ny/2)=1e-4/2;
u(nx/2,ny/2-1)=1e-4/2;u(nx/2,ny/2+1)=1e-4/2;
u(nx/2-1,ny/2-1)=1e-4/2;u(nx/2-1,ny/2+1)=1e-4/2;
u(nx/2+1,ny/2-1)=1e-4/2;u(nx/2+1,ny/2+1)=1e-4/2;
%
while(tn<=T)
    t0=tn;tn=tn+dt;ts=[t0,tn];
      for i=2:(nx-1)
          for j=2:(ny-1)
              wij=c*c*(u(i+1,j)-2*u(i,j)+u(i-1,j))/(dx*dx)+c*c*(u(i,j+1)-2*u(i,j)+u(i,j-1))/(dy*dy);
              w0=[u(i,j),v(i,j)];
              [t,w]=ode23('wave',ts,w0);n1=length(t);
              un(i,j)=w(n1,1);vn(i,j)=w(n1,2);
          end
      end
      u=un;v=vn;
%
       for i=1:nx
           for j=1:ny
               fprintf(fid,'%.3e\n',u(i,j));
           end
       end
%
end
surfl(un)
shading interp
colormap(gray);
fclose(fid);
============================================================================
报错为
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit.  Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Error in ==> D:\MATLAB6p5\toolbox\matlab\funfun\ode23.m
On line 154  ==> [neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, args, ...

我只知道是迭代步数超过限制,那么下面那个错是什么???谢谢各位老手帮我看看,这是教材上的程序原文,该不得错哒.
回复
分享到:

使用道具 举报

发表于 2008-8-13 13:16 | 显示全部楼层
wave函数你没有给全吧,我这的错误和你的错误不一样

function wdot=wave(t,w)
global wij;
wdot=[0.1,wij];
 楼主| 发表于 2008-8-13 13:35 | 显示全部楼层

回复 沙发 messenger 的帖子

首先谢谢,但是我还是没有搞懂.请问你的错误是什么??
再次感激
发表于 2008-8-13 14:18 | 显示全部楼层

回复 板凳 大白菜 的帖子

你的微分方程是什么
 楼主| 发表于 2008-8-13 14:49 | 显示全部楼层
===================================================
function wdot=wave(t,w)
global wij;
wdot=[0.1,wij];

global wij;
=======================================================
我这个是从姜启源的<数学建模选集>里看到这个程序,模拟二维地震波场的,但是程序却无法运行.希望大家看看是怎么回事.
发表于 2008-8-13 15:29 | 显示全部楼层

回复 5楼 大白菜 的帖子

wdot=[0.1,wij]; 应该是 wdot=[0.1; wij]; 吧
 楼主| 发表于 2008-8-13 15:34 | 显示全部楼层
不对,主要是
===================================================
function wdot=wave(t,w)
global wij;
wdot=[0.1,wij];

global wij;
=======================================================
这砣全局变量我不知道是什么意思
发表于 2008-8-13 16:00 | 显示全部楼层
查了一下原书,是wdot=[w(2), wij]'; 用wdot=[w(2), wij]'; 运行了一下没有错误。

不知道你为什么改成了wdot=[0.1,wij]; 不过就算你用wdot=[0.1; wij];也应该能算出来。

另外,global wij;是全局变量的意思。

从你的回贴来看,你把第二个global wij;也放到 wave函数里了。

第二个global wij;应该和主程序放在一起的,你可能是这里错了。


原帖由 大白菜 于 2008-8-13 15:34 发表
不对,主要是
===================================================
function wdot=wave(t,w)
global wij;
wdot=[0.1,wij];

global wij;
=======================================================
这砣全局 ...

[ 本帖最后由 messenger 于 2008-8-13 16:02 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2008-8-13 17:59 | 显示全部楼层
谢谢老哥,我改了一下,原文c没有赋值,我加上了.但是结果不对呢
发表于 2008-8-13 19:26 | 显示全部楼层

回复 9楼 大白菜 的帖子

这个注意到了,不过c应该只影响衰减速率,不影响图像的形状
 楼主| 发表于 2008-8-13 21:18 | 显示全部楼层
但是结果图像不对啊,
 楼主| 发表于 2008-8-13 21:19 | 显示全部楼层

回复 10楼 messenger 的帖子

你的结果是对的么?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 07:31 , Processed in 0.068350 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表