matlab用ode45求解微分方程组 10

用ode45求解微分方程组dx(1)=x(2);dx(2)=0.5x(2)+x(1)-x(1)^3+0.83*cos(t);如何编写tspan=[0:0.0125:500... 用ode45求解微分方程组dx(1)=x(2);dx(2)=0.5x(2)+x(1)-x(1)^3+0.83*cos(t);如何编写

tspan=[0:0.0125:500];
x0=[0,0];
for n=1:1001
s(n)=0.83*cos(floor((n-1)*0.5));
end
第一种直接加正弦信号
dx=@ (t,x)[x(2);-0.5*x(2)+x(1)-x(1)^3+0.83*cos(t)];
[t,z]=ode45(dx,tspan,x0);
第二种先离散正弦信号
dx=@ (t,x)[x(2);-0.5*x(2)+x(1)-x(1)^3+s(floor(t/0.5+1))];
[t,zz]=ode45(dx,tspan,x0);
第二种与第一种用法一样吗?不一样的话,应该怎样加入离散数据呢?

第一次写,问题不少!多多指教!
展开
 我来答
漫步睹233
2014-06-15 · TA获得超过170个赞
知道答主
回答量:125
采纳率:0%
帮助的人:159万
展开全部
这个方程要解出来还要初始条件吧
不妨设(x(0),y(0))=(A,B);
还有用ode45只能得到数值解,不能给出解析式表达
那么先建立一个函数文件
test_fun.m
function dx=tsst_fun(x,t)
dx(1)= c-b*x(1)-w*x(1)*x(2);
dx(2)=w*x(1)*x(2)-(b+m)*x(2);
那么调用ode45
x0=(0,0);
t0=0:0.01:10;
;%根据你所想要的求得值设定t0,间隔是任意的,与求解所用的步长无关,
[x,t]=ode45(@test_fun,t0,x0);
得到了
这样可以么?
追问
还有不懂的地方,能给解释一下吗?
1、间隔是任意的,与求解所用的步长无关。。。为什么呢?
2、另外如果正弦信号是已知的离散信号,应该怎样加入微分方程中求解呢?
lhmhz
高粉答主

2015-08-10 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17014

向TA提问 私信TA
展开全部
ode45是最常用的求解非刚性微分方程(组)的指令,它采用变步长四、五阶Runge-Kutta法,求解精度比ode23、ode15要高。但ode45的计算量比较大,而ode23计算量小,且误差大
调用格式:[t,y]=ode45(odefun,tspan,y0)
odefun 用以表示f(t,y)的函数句柄或inline函数,t是标量,y是标量或向量;
tspan 如果是二维向量[t0,tf],表示自变量初值t0和终值tf;如果是高维向量[t0,t1,t2,。。。,tn],则表示输出结点列向量;
y0 表示初值向量;
t 表示结点列向量(t0,t1,t2,。。。,tn)^T;
y 表示数值解矩阵,每一列对应y的一个分量。
实例说明:

例1 y'=y-2t/y,y(0)=1,0<t<4
odefun=inline('y-2*t/y','t','y');
[t,y]=ode45(odefun,[0,4],1)
plot(t,y,'o-')
运行结果,略。
例2 x'=-x^3-y,x(0)=1;y'=x-y^3,y(0)=0.5,0<t<30
首先,建立自定义函数文件myfun.m
function f=myfun(t,x)
f(1)=-x(1)^3-x(2);
f(2)=x(1)-x(2)^3;
f=f(:)
然后,在命令窗口中输入
[t,y]=ode45(myfun,[ 0 30],[1:50]])
plot(t,x(:,1) ,t,x(:,2),'o-')
figure
plot(x(:,1) ,x(:,2),':')
运行结果,略。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-11-07
展开全部
您好,这个问题求告知,谢谢了呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式