声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3731|回复: 16

[编程技巧] 耦合的微分方程组不能求解出来

[复制链接]
发表于 2007-8-2 11:00 | 显示全部楼层 |阅读模式

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

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

x
大家看看这个微分方程组 我在解的过程中遇到方程耦合的问题 解不出来了 大家帮帮忙

[ 本帖最后由 ChaChing 于 2010-6-28 18:47 编辑 ]
1.jpg
回复
分享到:

使用道具 举报

发表于 2007-8-2 15:59 | 显示全部楼层
像你这种高自由度方程,可以用ode45/ode23/ode23tb试试

写成一阶方程形式,直接提交给matlab求解,论坛有很多这方面的例子,请使用搜索功能。

这种方程还是建议用fortran或者C来求解,毕竟matlab对高自由度的求解效率不是很高!

评分

1

查看全部评分

 楼主| 发表于 2007-8-3 07:41 | 显示全部楼层
我就是用ode45做的  可是在选择状态变量时就不会了
x1=x,x2=x',x3=y,x4=y',x5=fan ,x6=fan'
                       x1'=x2
                       x2'=......x6'sin(fan)+fx/m
                       x3'=x4
                       x4'=......x6'cos(fan)+fy/m-g
                       x5'=x6
                       x6'=me/j+me[x2'sin(fan)-(x4'cos(fan))]+...
这样对吗  总感觉不太对啊
高手给看看  谢谢
其中  2  4  6式还是含有x6'  x2'   x4'  这该怎么办呢

[ 本帖最后由 ChaChing 于 2010-6-28 19:03 编辑 ]
发表于 2007-8-3 08:46 | 显示全部楼层
强烈建议你把本版块中微分方程的部分搜索一下,这里再给你点提示

function dy=fff(t,y)

参数定义省略

dy=zeros(6,1)
dy1=y(2)
dy2=......
dy3=y(4)
dy4=......
dy5=y(6)
dy6=.....
dy=[dy1;dy2;dy3;dy4;dy5;dy6];

搜索微分方程,你会看到很多这方面的例子
发表于 2007-8-3 08:53 | 显示全部楼层

回复 #1 zhubaowei7 的帖子

方程是不是可以做一定的化简
发表于 2007-8-3 09:19 | 显示全部楼层
他这个比较复杂,不好化简!直接写成上面的形式还比较简单直观点,不过速度会慢!
 楼主| 发表于 2007-8-3 10:12 | 显示全部楼层
方程两边都含最高阶的情况 比如
x''+2x'+8x=5y''+8xy+90
y''+4y'+9y=8yx''+7xy+70
参数定义怎么定呢?用dy=zeros(6,1)
dy1=y(2)
dy2=......
dy3=y(4)
dy4=......
dy5=y(6)
dy6=.....
dy=[dy1;dy2;dy3;dy4;dy5;dy6];
怎么做呢  谢谢
发表于 2007-8-3 10:21 | 显示全部楼层
dy1=y(2)
dy2=-2*y(2)-8*y(1)+5*dy4+8*y(1)*y(3)+90
dy3=y(4)
dy4=-4*y(4)-9*y(3)+8*y(3)*dy2+7*y(1)*y(3)+70

求解下试试

评分

1

查看全部评分

 楼主| 发表于 2007-8-3 10:43 | 显示全部楼层

大家看看这个方程 怎么老出错呢

function dudt=changode(t,u)
dudt=zeros(6,1); dudt(1)=u(4); dudt(2)=u(5); dudt(3)=u(6);
dudt(4)=-2*u(1)-u(2)-u(4)+3*sin(t);
dudt(5)=0.5*u(1)-u(2)+0.5*u(4)-0.5*u(6)+sin(t);
dudt(6)=(1/3)*(-4*u(3)-u(5))+2*sin(t);
dudt=dudt; %调用ode45求解该方程组,并画出结果图:
function changpingpin
u0=[-1;-3;-2;1;2;3]; tspan=[0 20]; [t,u]=ode45(@changode,tspan,u0);
plot(t,u(:,1),t,u(:,2),t,u(:,3)); legend('u(1)','u(2)','u(3)'); xlabel('t'); ylabel('u');

错误如下
Error in ==> changode at 3
dudt(1)=u(4);
怎么回事

[ 本帖最后由 ChaChing 于 2010-6-28 18:40 编辑 ]
发表于 2007-8-3 11:07 | 显示全部楼层
怎么没有错误原因呢?楼主没帖全么?
发表于 2007-8-3 11:46 | 显示全部楼层
先看看各个置顶贴,请认真阅读

[ 本帖最后由 ChaChing 于 2010-6-28 18:38 编辑 ]
 楼主| 发表于 2007-8-3 13:45 | 显示全部楼层
没看明白 什么意思
发表于 2007-8-3 14:11 | 显示全部楼层
发表于 2007-8-4 10:14 | 显示全部楼层
这种简单错误自己看看基础书籍就能发现的, 希望以后能自己多思考:

%%% 将以下代码存为changpingpin.m,再运行即可
%%%%%%%%%%%%%%%%%%%%%%%%
function changpingpin
u0=[-1;-3;-2;1;2;3]; tspan=[0 20]; [t,u]=ode45(@changode,tspan,u0);
plot(t,u(:,1),t,u(:,2),t,u(:,3)); legend('u(1)','u(2)','u(3)'); xlabel('t'); ylabel('u');

function dudt=changode(t,u)
dudt=zeros(6,1); dudt(1)=u(4); dudt(2)=u(5); dudt(3)=u(6);
dudt(4)=-2*u(1)-u(2)-u(4)+3*sin(t);
dudt(5)=0.5*u(1)-u(2)+0.5*u(4)-0.5*u(6)+sin(t);
dudt(6)=(1/3)*(-4*u(3)-u(5))+2*sin(t);
%%%%%%%%%%%%%%%%%%%%%%%%

[ 本帖最后由 ChaChing 于 2010-6-28 18:43 编辑 ]

评分

1

查看全部评分

发表于 2008-4-22 15:51 | 显示全部楼层
先把最高阶的量统一放到方程左边,其余的放在右边,再编程就可以了!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-13 17:41 , Processed in 0.079827 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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