matlab里matlab求解微分方程程组太多了,怎么用for循环写

【合集】[求助]Matlab 微分方程组参数拟合问题 - 饮水思源
饮水思源 - 文章阅读  [讨论区: MathTools][][][][][][][][][][][][]
发信人: halleyhit (孤苦○仃|国色无双|卖萌会胖), 信区: MathTools
题: 【合集】[求助]Matlab 微分方程组参数拟合问题
发信站: 饮水思源 (日17:20:45 星期五), 站内信件
☆──────────────────────────────────────☆
yuanshi (为什么) 于 日14:26:58 星期一)
课题研究中碰到的一个问题,不知道有没有同学能帮忙解决。
dg1/dt = -k1*g1
dg2/dt = f1*k1*g1-k2*g2
dg3/dt = f2*k1*g1+f5*k2*g2-k3*g3
dg4/dt = f3*k1*g1+f6*k2*g2+f8*k3*g3-k4*g4
dg5/dt = f4*k1*g1+f7*k2*g2+f9*k3*g3+k4*g4
其中f1+f2+f3+f4=1,f5+f6+f7=1,f8+f9=1
而f1~f9这9个数都介于0和1之间,而k1~k4这4个数大于等于0
求拟合k1~k4以及f1~f9这13个参数
已知实验数据如下:
☆──────────────────────────────────────☆
halleyhit (孤苦○仃|国色无双|卖萌会胖) 于 日02:22:03 星期二 提到:
说个思路,也不一定对~
你的问题等价于,寻找一组f和k,使得,由dg1/dt = -k1*g1等组成的方程组,
求解出来的解,在某些时间点上,与实验数据最为接近。
好了,然后用数学语言来描述:
求一组f和k,使得min(||G-G'||)
1.||*||表示范数;
2.G=[ g1|t=t1
3.G'与G结构相同,元素分布为g1'等。
1.1 g1表示由待求的f和k带入5个微分方程后求解得到的g1(t)
1.2 g1'表示实验数据得到的g1(t),当然只在t=t1,t2等时才有定义
1.3 其余的g2,g2'等类似
如果可以这样等价,那么其实就是一个求最值的问题,matlab中的optimtool就可以
或者自己写程序,可能运行效率更高些
【 在 yuanshi (为什么) 的大作中提到: 】
: 课题研究中碰到的一个问题,不知道有没有同学能帮忙解决。
: dg1/dt = -k1*g1
: dg2/dt = f1*k1*g1-k2*g2
: dg3/dt = f2*k1*g1+f5*k2*g2-k3*g3
: dg4/dt = f3*k1*g1+f6*k2*g2+f8*k3*g3-k4*g4
: dg5/dt = f4*k1*g1+f7*k2*g2+f9*k3*g3+k4*g4
: 其中f1+f2+f3+f4=1,f5+f6+f7=1,f8+f9=1
: 而f1~f9这9个数都介于0和1之间,而k1~k4这4个数大于等于0
: 求拟合k1~k4以及f1~f9这13个参数
: 已知实验数据如下:
: .................(以下省略)
☆──────────────────────────────────────☆
yuanshi (为什么) 于 日23:28:55 星期二)
嗯嗯,谢谢提供思路,不知道用curvefit这样的能不能做呢
【 在 halleyhit 的大作中提到: 】
: 说个思路,也不一定对~
: 你的问题等价于,寻找一组f和k,使得,由dg1/dt = -k1*g1等组成的方程组,
: 求解出来的解,在某些时间点上,与实验数据最为接近。
: 好了,然后用数学语言来描述:
: 求一组f和k,使得min(||G-G'||)
: 1.||*||表示范数;
: 2.G=[ g1|t=t1
: 3.G'与G结构相同,元素分布为g1'等。
: 1.1 g1表示由待求的f和k带入5个微分方程后求解得到的g1(t)
: 1.2 g1'表示实验数据得到的g1(t),当然只在t=t1,t2等时才有定义
: 1.3 其余的g2,g2'等类似
: 如果可以这样等价,那么其实就是一个求最值的问题,matlab中的optimtool就可以
: 或者自己写程序,可能运行效率更高些
: (以下引言省略...)
☆──────────────────────────────────────☆
halleyhit (孤苦○仃|国色无双|卖萌会胖) 于 日23:43:59 星期二 提到:
我没用过这个~不过我感觉这个函数应该也是用这个思路写的代码~
其实用matlab之前还是先学下计算方法比较好~这样用别人的代码 心里有数
【 在 yuanshi (为什么) 的大作中提到: 】
: 嗯嗯,谢谢提供思路,不知道用curvefit这样的能不能做呢
: .................(以下省略)
[][][][][][][][][][][][]查看: 1716|回复: 3|关注: 0
MATLAB中如何用for循环(不用ODE45)求解微分方程组
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
求如何用for循环(不用ODE45)求解微分方程组?比如:dv/dt=-v;&&dz/dt=-2z-2v.
最后用plot画出Z(t)-t的曲线以及V(t)-t的曲线。急求!谢谢!~
<h1 style="color:# 麦片财富积分
关注者: 1
%& && & dv/dt = -v& && & % 离散就是 v(t) = v(t-1)/(1+dt)
%& &&&dz/dt = -2z-2v& &&&% 离散就是 z(t) = z(t-1)/(1+2*dt)-2*dt*v(t)/(1+2*dt)
dt = 1e-4;& && && && && &% 时间步长&&值越小&&计算越精确& &dt≤dm
dm = 1e-2;& && && && && &% 描点步长&&值越小&&曲线越光滑& &dm≥dt
t = 0:dm:10;& && && && & % 所求时刻&&0到10s&&每隔 dm 秒描点一次
V = zeros(size(t));
Z = zeros(size(t));
for m = 1:length(t)
& & N = t(m)/& && && &% 迭代步数
& & v = 10;& && && && &&&% 初始时刻 t=0s 时 速度为 10m/s
& & z = 10;& && && && &&&% 初始时刻 t=0s 时 位移为 10m
& & for n = 1:N
& && &&&v = v/(1+dt);
& && &&&z = z/(1+2*dt)-2*dt*v/(1+2*dt);
& & V(m) =
& & Z(m) =
SizeScreen = get(0,'ScreenSize');
Fig_w = 1120/SizeScreen(3);
Fig_h = 420/SizeScreen(4);
Fig_x = 0.5*abs(1-Fig_w);
Fig_y = 0.5*abs(1-Fig_h);
figure('Name','NUAA','Numbertitle','off','Units','Normalized','Position',[Fig_x,Fig_y,Fig_w,Fig_h])
subplot(1,2,1)
plot(t,V,'b-','LineWidth',2)
hh0 = title('V(t)-t曲线');
hh1 = xlabel('时间 t (s)');
hh2 = ylabel('速度 v(m/s)');
set(gca,'FontSize',12);
set(hh0,'FontSize',12);
set(hh1,'FontSize',12);
set(hh2,'FontSize',12);
subplot(1,2,2)
plot(t,Z,'r-','LineWidth',2)
hh0 = title('Z(t)-t曲线');
hh1 = xlabel('时间 t (s)');
hh2 = ylabel('位移 z(m)');
set(gca,'FontSize',12);
set(hh0,'FontSize',12);
set(hh1,'FontSize',12);
set(hh2,'FontSize',12);
<h1 style="color:# 麦片财富积分
weiwei30106 发表于
<h1 style="color:# 麦片财富积分
weiwei30106 发表于
((dV_2)/dt=1/C_2&&[I+1/R(V_1-V_2)]
和(dV_1)/dt=1/C_1&&[-IR+1/R(V_2-V_1)]
和(dI)/dt=-1/L V_2 )
这个三元一次微分方程组怎么编程呢?其中c1=100nF,c2=10nF,L=18mH,R=1.73k。V2,V1,I和t都是未知
求画出v1,v2和I的3d图像。谢谢!~
站长推荐 /3
Powered by

我要回帖

更多关于 matlab求解微分方程 的文章

 

随机推荐