24小时热门版块排行榜    

查看: 2175  |  回复: 12

beysem

金虫 (正式写手)

[交流] 【求助】常微分方程组求解中系数与某变量值关联的问题

以常见的Appollo的 微分方程组为例,其function文件如下

11.        function dx=appollo(t,x)

% 确定几个待定系数 mu/mustar/r1/r2
12.        mu=1/82.45;
13.        mustar=1-mu;
14.        r1=sqrt((x(1)+mu)^2+x(3)^2);
15.        r2=sqrt((x(1)-mustar)^2+x(3)^2);

% 4个微分方程的表达式
16.        dx=[x(2)
17.            2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^3
18.            x(4)
19.        -2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];


现在我的问题是

当x(2) 小于 0 时,待定系数为 mu=1/82.45;

现假设: 调用 ode45时,如果 x(2) 的值出现大于0时, 实际需要mu=-1,

我在尝试类似问题时,发现 mu的一旦定义了,哪怕是 if... 语句中,
mu的值第一次就判断好,后来都不会跳转,很头疼。

请问怎么解决?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

WF1987

铜虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
xiegangmai(金币+1): 谢谢参与! 2011-12-16 21:46:57
[t,y]=ode45('appollo2',[0,20],[1,-30,1,1]);
plot(t,y(:,3));figure;plot(t,y(:,4))
上为调用程序
%……………………………………………………………………
function dx=appollo2(t,x)
mu=1/82.45*(x(2)<0)-1*(x(2)>0);  %这是关键
mustar=1-mu;
r1=sqrt((x(1)+mu)^2+x(3)^2);
r2=sqrt((x(1)-mustar)^2+x(3)^2);
dx=[x(2);
    2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^3;
    x(4);
    -2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];
8楼2011-12-16 16:36:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

lijinfeng042

木虫 (小有名气)

Matlab


ctgu_zheng(金币+1):鼓励应助 2010-08-28 16:48:10
beysem(金币+1):感谢关注,但我的问题还是没有解决哦 2010-08-29 07:48:36
引用回帖:
Originally posted by beysem at 2010-08-28 08:59:20:
以常见的Appollo的 微分方程组为例,其function文件如下

11.        function dx=appollo(t,x)

% 确定几个待定系数 mu/mustar/r1/r2
12.        mu=1/82.45;
13.        mustar=1-mu;
14.        r1=sqrt((x(1)+mu)^2+x(3)^2);
15.         ...

这是你转换好的方程式吧 那原来的方程组呢 u r1 r2 三个参数吧 呵呵 这个看得挺累的.....
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
2楼2010-08-28 13:26:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

beysem

金虫 (正式写手)

robert2020:建议使用“引用回复该贴”,方便对方收到你的信息! 2010-08-28 20:07:32
zzuwangshilei:多谢给出说明 2010-08-29 08:08:04


谢谢楼上 ,我把方程式贴出来
3楼2010-08-28 14:52:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li2008jie

铁杆木虫 (著名写手)

逍遥孤鹤

好难呀,进来帮顶。但愿高手帮忙。我也学习一下
阿甘与徐三多,执着+执着+执着=成功!
4楼2010-08-29 07:58:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)

Matlab


nono2009(金币+1):鼓励应助。 2010-08-30 06:22:02
beysem(金币+1):感谢关注 2010-08-30 09:56:39
引用回帖:
Originally posted by beysem at 2010-08-28 08:59:20:
以常见的Appollo的 微分方程组为例,其function文件如下

11.        function dx=appollo(t,x)

% 确定几个待定系数 mu/mustar/r1/r2
12.        mu=1/82.45;
13.        mustar=1-mu;
14.        r1=sqrt((x(1)+mu)^2+x(3)^2);
15.         ...

想了一下啊 如果要做函数过程中对函数值正负进行判断再改变参数值  在ode调用时应该比较困难啊
改变函数结构,暂时还没有解决
工作了,偶尔会上来~可以关注新浪微博 @云是风的梦_Matlab
5楼2010-08-29 19:22:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

free--fire

新虫 (小有名气)

★ ★
beysem(金币+2):谢谢关注,能否提供个带源码示例,只要简单示意一下思路,谢谢 2010-08-30 09:57:52
robert2020(金币+2):多谢解答,欢迎常来仿真模拟版交流! 2010-08-30 12:33:28
引用回帖:
Originally posted by beysem at 2010-08-28 08:59:20:
以常见的Appollo的 微分方程组为例,其function文件如下

11.        function dx=appollo(t,x)

% 确定几个待定系数 mu/mustar/r1/r2
12.        mu=1/82.45;
13.        mustar=1-mu;
14.        r1=sqrt((x(1)+mu)^2+x(3)^2);
15.         ...

如果系数对解答有依耐性(就是你说的:当x(2) 小于 0 时,待定系数为 mu=1/82.45;如果 x(2) 的值出现大于0时, 实际需要mu=-1),可以将系数也设置成函数形式。然后用迭代加上检测条件的方式来求解。需要注意的是,在第一次计算的时候,你需要给出一个确定的系数,否则无法进入程序。
我是流,是浮云天上游;我是虎,是大虫卧山谷。
6楼2010-08-30 08:58:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

WF1987

铜虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖
你把调用的函数也给出来吧 我在做类似的程序  我试试看能解出来不
7楼2011-12-16 15:40:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

WF1987

铜虫 (小有名气)

有问题再给我留言
9楼2011-12-16 16:37:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

captainmeng

木虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
楼上的功夫了得,向你学习,现在也在做这方面的工作。感谢提供帮助。··
10楼2013-11-22 00:04:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 beysem 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见