ljunw003 发表于 2009-3-26 19:54

高手救急@求解变参数常微分方程

问题如下,在MATLAB环境里解常微分方程组

dx/dt=a*x+b
dy/dt=c*x
求t∈的数值解,步长为1
a,b,c为参数,且方程运算的每一步参数的值均有变化。参数a的变化有规律,b,c的变化没有规律,必须从外部输入。参数和初值如下:
t       a       b   c       x   y
0   1.0   2   1      1   2
1   1.1   6   4
2   1.2   3   2
3   1.3   5   2
4   1.4   3   1
5   1.5   7   3
6   1.6   2   1
7   1.7   3   2
8   1.8   5   4
9   1.9   4   2
10   2.0   2   3

ljunw003 发表于 2009-3-26 21:12

补充

这种方程用ODE45能解吗,如果不能的话又用什么方法呢?
期待高手指教

ChaChing 发表于 2009-3-26 21:53

建議樓主看下本版規則!

ljunw003 发表于 2009-3-26 23:24

楼上说的在理,正在学习论坛版规,虚心向各位请教:handshake

sogooda 发表于 2009-3-27 14:35


function odesss
clear;clc
= ode45(@xdot222,,);
plot(T,Y)
function xd=xdot222(tt,x)
xd=zeros(2,1);
t=0:10;
a=1.0:0.1:2.0;
b =[ 2   6   3   5   3   7   2   3   5   4   2];
c =;
at=interp1(t,a,tt);
bt=interp1(t,b,tt);
ct=interp1(t,c,tt);
xd(1)=at*x(1)+bt;
xd(2)=ct*x(1);

ljunw003 发表于 2009-3-27 17:27

谢谢

谢谢四楼sogooda朋友的热心帮助。正在学习你的方法,我课题里面出现的变参数有十多个,有问题再向你请教,谢谢你,你让我看到了解决这个问题的希望。

ljunw003 发表于 2009-3-27 21:39

困惑

刚才我计算了一下这个方程的解析解,发现跟四楼的方法得到的数值解相差很大,计算数值解时我把xdot222放到m文件里面,
输入的命令是 = ode45(@xdot222,,)
两个计算结果附在下面了
自变量   参数      解析解   数值解tabc    x    yxy0121    1     20011.16413.935980727.221748101021.23236.0811173350.46852889407031.352235.5657149339.793407514023041.431847.7687091598.263363656066051.57310240.9070220411.814032390346061.62133219.5085220756.06783112901344071.732407147.1404478972.7534588106011081.8546777613.0315061273.1833850057830091.94282896088.8187259003.92152660321194010223970330389.814554955551513061020734240
期待高手解答

sogooda 发表于 2009-3-27 21:59

回复 7楼 ljunw003 的帖子

先看看趋势对不对,如果只是精度不好,可以通过odeset来改善。
doc odeset

ljunw003 发表于 2009-3-28 09:45

怎样设置options

趋势是对的,跟解析解有相似的趋势
应该是自己水平太菜的缘故,按照sogooda朋友提供了思路我修改了半天精度还是没有大的改善,期待高手指点一下options怎样设置才使数值解跟解析解最接近。

ljunw003 发表于 2009-3-30 19:24

问题解决了,回来汇报

感谢大家对我的提问的关注,特别要感谢sogooda 朋友的热心帮助,现在我已经有这个问题的解决办法了,特意回来发到这里,跟大家交流

function dy=bcs(t,y)
dy=zeros(2,1)
global k
dy(1)=k(1)*y(1)+k(2);
dy(2)=k(3)*y(1);

clear
yy=[];y0=;
global k
for i=1:10
canshu=importdata('can.txt');k=canshu(i,:);
=ode45(@bcs,,y0);
yy=;
y0=y(end,:);
end
save result.txt yy -ascii

不知道什么原因。图片传不上去,老提示格式不对,可是我明明用的是JPG,遗憾

weiniuzhu 发表于 2011-1-8 10:25

高手,我也遇到这样一个问题,是关于曲轴连杆动力学方程的,因为压力p也是个变参数,所以想通过数值解检验一下解析解的正确性

weiniuzhu 发表于 2011-1-8 20:24

=ode45(@bcs,,y0);不知道什么意思,步长定值啊?
这个tspan应该改为吗,
页: [1]
查看完整版本: 高手救急@求解变参数常微分方程