24小时热门版块排行榜    

CyRhmU.jpeg
查看: 733  |  回复: 6
当前主题已经存档。

semibeauty

木虫 (正式写手)

[交流] 【求助】偏微分方程求解【已完成】

下面两个偏微分方程,要用matlab求解,解用图形表示,但总运行不出来,故求助(小虫对这些就是文盲,是我们老师让我去咨询高人,有什么低级错误,大家多担待)
方程1方程2分别对应附件1和2.
方程1
m-file:
function dy = rigid(t,y)
dy = zeros(3,1);    % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
[T,Y] = ode45('rigid',[0 12],[0 1 1]);
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')

方程2
m-file:
function dy = vdp1000(t,y)
dy = zeros(2,1);  % a column vector
dy(1) = y(2);
dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1);
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
[T,Y] = ode15s('vdp1000',[0 3000],[2 0],options);
plot(T,Y(:,1),'-o')

上面是我把我们老师发给我的贴上。她说是帮助文件的两个例子,我们要解的方程和这个类似,只是未知数多了一点,现在两个示例都运行不出来,以前曾经运行出来过。

[ Last edited by nono2009 on 2009-9-25 at 07:16 ]
回复此楼
象鸟人一样飞翔~~~
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sitonyl

铁杆木虫 (文坛精英)

★ ★ ★ ★
semibeauty(金币+1,VIP+0):谢谢回复,我会把意见反馈回去 5-20 10:40
semibeauty(金币+1,VIP+0):谢谢 5-20 16:46
kuhailangyu(金币+2,VIP+0):谢谢参与! 5-20 18:40
1、图片中的方程是常微分方程,不是偏微分方程。
2、从图片中的方程可以看出来,用ode45并不是好的选择,要注意stiffness问题。

[ Last edited by sitonyl on 2009-5-20 at 10:01 ]
zz
2楼2009-05-20 09:59:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

catqq

铜虫 (小有名气)

★ ★
semibeauty(金币+1,VIP+0):谢谢,我会认真读 5-20 16:47
kuhailangyu(金币+1,VIP+0):谢谢参与! 5-20 18:41
help 一下ode45 读一读matlab的帮助,上面解释的很清楚的。
3楼2009-05-20 14:36:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuao-520

铜虫 (小有名气)


woshilsh(金币+1,VIP+0):thanks 5-20 23:24
读一读matlab的帮助,上面解释非常有用的
4楼2009-05-20 22:27:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

semibeauty

木虫 (正式写手)

等待高人
象鸟人一样飞翔~~~
5楼2009-05-21 09:25:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

epson009

金虫 (小有名气)

★ ★ ★ ★ ★ ★ ★ ★ ★
woshilsh(金币+4,VIP+0):thanks, 5-28 15:22
semibeauty(金币+5,VIP+0):谢谢你的详细解答,谢谢 5-31 20:57
这个问题很好办。有两种方法解决:(针对第一个例子)
1.首先建立函数文件。保存成rigid.m,内容如下:
function dy = rigid(t,y)
dy = zeros(3,1);    % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);
然后在命令行里面调用
[T,Y] = ode45('rigid',[0 12],[0 1 1]);
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
2.第二种方法:编写函数文件,保存为fangcheng1.m,内容如下:
function  fangcheng1
[T,Y] = ode45('rigid',[0 12],[0 1 1]);
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
function dy = rigid(t,y)  (作为一个子函数,被ode45调用)
dy = zeros(3,1);    % a column vector
dy(1) = y(2) * y(3);
dy(2) = -y(1) * y(3);
dy(3) = -0.51 * y(1) * y(2);

然后在命令行里输入fangcheng1运行即可。
6楼2009-05-28 14:58:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

epson009

金虫 (小有名气)

★ ★ ★ ★ ★ ★ ★
woshilsh(金币+2,VIP+0):以后常来哈! 5-28 15:22
semibeauty(金币+5,VIP+0):多谢,多谢。。。 5-31 20:58
第二个方程,从options行开始同上操作,另外Abstol的值改成一个或者两个。
7楼2009-05-28 15:04:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 semibeauty 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见