声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1294|回复: 6

[编程技巧] 关于ode45解微分方程代入输入信号时遇到的问题

[复制链接]
发表于 2009-12-1 12:12 | 显示全部楼层 |阅读模式

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

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

x
我在用ode45解微分方程时,方程的输入信号是实验得到的一组数据,我在文本文档中保存着,现在要把它带入到方程中,但是我不知道到底该怎么办?
我想这个信号也是随时间变化的,所以在调用ode45的时候,我用了一下语句:
[t,x]=ode45(@vdp21,[0.01:0.01:50],y0,[],M,bv,Fq,w,T,kv,Fj);
这样,时间t 相当于有5000个时间点,我的文本文档存的输入信号也是5000个数,所以在vdp21中我将输入信号写为:signal(100*t);因为我想,这个t就是0.01:0.01:50的那么每次取100*t就刚好在每次分别代入输入信号(signal)的第1~5000个值,但是在运行时一直出现这样错误提示:
Attempted to access signal(1.00003); index must be a positive integer or logical.

Error in ==> vdp21 at 18
if signal(100*t)>0

Error in ==> ode45 at 324
    f(:,2) = feval(odeFcn,t+hA(1),y+f*hB(:,1),odeArgs{:});

Error in ==> vdp21_ceshi at 13
[t,x]=ode45(@vdp21,[0.01:0.01:50],y0,[],M,bv,Fq,w,T,kv,Fj);
我明明把时间给了定步长的0.01:0.01:50,那么我100*t应该就是1:1:5000么,为什么会出现这样的错误?还望高手赐教!!
回复
分享到:

使用道具 举报

发表于 2009-12-1 13:11 | 显示全部楼层
signal是矩阵吗?
矩阵的index仅能是整数!
 楼主| 发表于 2009-12-1 13:41 | 显示全部楼层

回复 沙发 ChaChing 的帖子

是的,signal就是我微分方程的输入,那个是我做实验得到的数据,我存在文本文档里,总共5000个数,我把它读取出来了,就是5000*1的数组了,然后就是要加到微分方程里面的问题了,我就是按上面我说的做的,但就是提示有那样的问题,我想我在调用ode45的时候不是已经把时间设置成0.01:0.01:50了么,那么我在程序里面代signal的时候直接写signal(100*t),不是就是在每个时间点代进去一个值么,刚好是signal(1:5000),为什么会出现说我的index是1.00003呢?我理解的是t 不是就是0.01:0.01:50么?那么我的100*t 就应该是1:1:5000么,怎么会有1.00003这样的index?望解答,谢谢!!
发表于 2009-12-1 16:00 | 显示全部楼层

回复 板凳 五味瓶 的帖子

ode个人没用过, 不很确定
但猜测会不会是因变步长的关系!
没程序也没得试!
 楼主| 发表于 2009-12-1 16:34 | 显示全部楼层

回复 地板 ChaChing 的帖子

恩,我看了,应该是变步长的问题,虽然把积分的时间点限定了,但是ode45在解得时候还是自己按照精度采取变步长的方法解得,我试了很多方法就是不知道该怎么解决这个问题
发表于 2009-12-1 19:52 | 显示全部楼层

回复 5楼 五味瓶 的帖子

虽然个人没玩过, 但我想应该有定步长的方式吧!
建议搜一下, 如http://forum.vibunion.com/forum/thread-11380-1-1.html
试试ode4!

评分

1

查看全部评分

 楼主| 发表于 2009-12-1 20:36 | 显示全部楼层

回复 6楼 ChaChing 的帖子

恩,好的,非常感谢!!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-16 20:33 , Processed in 0.074783 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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