声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1714|回复: 3

[编程技巧] 关于变参数微分方程的解!

[复制链接]
发表于 2007-6-18 10:20 | 显示全部楼层 |阅读模式

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

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

x
前段时间由于需要屡次发帖问这个问题
xjzuo楼主耐心的回答了一些问题,并写出了变参数微分方程的实例!
面对实例,我依葫芦画瓢,尽量将程序经过改进达到我要的效果。
因为我要模拟反应器,里面的反应以及组分都较复杂。
导致微分方程组变量是二维,方程也不止两个,而是很多个!
第一步将变量从一维到二维:
clear all
fun=inline('[y(2);sin(w(2)*t)-2*w(1)*y(1)-3*y(2)]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
   [t,y]=ode45(fun,tsp,y0,[],x(i,:));
   plot(t,y)
end
以上就基本解决了变量问题;
在将方程从几组到更多组的变化时
显然将他们写进inline()中将使书写十分的不好看,且在此过程中一换行就出错,不知其因。于是想出了以下的方法解决问题:
function asmmuct
clear all
fun=inline('[f1;f2]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
   [t,y]=ode45(fun,tsp,y0,[],x(i,:));
   plot(t,y)
end
function dydt=f(t,y)
f1=y(2)
f2=sin(w(2)*t)-2*w(1)*y(1)-3*y(2)
dydt=[f1;f2]
但提示就是:
??? Error using ==> inline.feval
Not enough inputs to inline function.
使得我难以解决问题。
相信在面对稍复杂问题的处理当中,方程和变量的加多是大家都会面对。
只要将以上问题解决,基本就可以解决这一类问题
而变参数的积分问题也可以沿着这个思路加以解决

在面对问题以来,由于本人的急躁发了许多帖,都没有实质的进展,且有灌水之嫌,再次表示歉意!
希望各位积极解决刚才的问题
使得变参数的积分以及微分问题有个较为圆满的解决!

http://forum.vibunion.com/thread-42367-1-1.html
这是xizuo楼主的示例帖
回复
分享到:

使用道具 举报

发表于 2007-6-18 10:27 | 显示全部楼层
 楼主| 发表于 2007-6-20 11:28 | 显示全部楼层
相信看过帖子的人不少吧

大家群策群力把问题解决吧

楼上推荐的帖子我也看了

如果是几个方程组我就将表达式直接写在inline的[]中,就可以运算了

现在是方程组较多,想将这一大堆表达式拿出来写

看上去就明了许多

但是就是在这个过程中遇到问题

还请各位多多帮助阿
 楼主| 发表于 2007-6-21 14:41 | 显示全部楼层
一直在等待问题的答案

大家帮帮忙

独自在一个污水厂做课题

没有其他的交流途径

就靠这论坛拉
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-16 23:50 , Processed in 0.081067 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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