声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3308|回复: 5

[编程技巧] 关于ode45解微分方程过程中参数传递的问题

[复制链接]
发表于 2009-10-22 19:32 | 显示全部楼层 |阅读模式

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

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

x
我在用ode45解微分方程的时候,需要把一个参数进行传递,但是这个参数又是随时间变化的,不知道可以传递不?
因为参数在>0和<0时,微分方程的表达式不一样,所以我想用参数把它传递进去。。。
希望高手可以给予解答!先谢谢了!!
回复
分享到:

使用道具 举报

发表于 2009-10-23 08:33 | 显示全部楼层
我也在考虑如何向ode函数里面传递变量参数的问题,我们可以讨论一下:
举个二维的例子:
function dx=ode5(t,x)
dx=zeros(2,1);
n=randn(1,1);
dx(1)=(3*x(1)+x(2))+(3*x(1)+0.2*x(2))*n;
dx(2)=x(2)+x(2)*n;
main 函数就是用ode45来解这个微分方程。
这里面n就相当于一个随机数,但是这并不符合我的要求,这个里的n应该代表随机过程,它是随时间的变化而变化的才可以,比如说在main函数里 t=(0:0.1:10),n=randn(1,length(t)).敢问各位大侠,用ODE45解这个问题的时候该怎么描述呢?
发表于 2009-10-23 08:34 | 显示全部楼层
看了相关的帖子后,我用如下函数来编写:
function dx=examplemao(t,x,n)
%global n
dx=zeros(2,1);
dx(1)=(3*x(1)+x(2))+(3*x(1)+0.2*x(2))*n;
dx(2)=x(2)+x(2)*n;
主程序:clear
global n
sn=randn(1,1000);
xx=[];
for i=1:length(sn)
   n=sn(i);
    [t,x]=ode15s(@examplemao,[0;0.01;9.99],[1 1],[],n);
  xx=[xx,x];
  end
plot(t,x)
但是感觉得到的结果还是不对
回复 支持 1 反对 0

使用道具 举报

发表于 2009-10-23 11:01 | 显示全部楼层
请参考http://forum.vibunion.com/forum/ ... p%3Bfilter%3Ddigest
虽然那个帖子主要是讨论参数积分,但是问题都是如何传递参数的问题。里面很多方法都可以借鉴。

评分

1

查看全部评分

发表于 2009-10-24 08:34 | 显示全部楼层
谢谢你,我去学习一下
发表于 2010-4-22 22:09 | 显示全部楼层

回复 板凳 limengiiii 的帖子

你的解决办法是什么啊
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-20 10:45 , Processed in 0.071344 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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