声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2562|回复: 12

[编程技巧] 怎么用Matlab解显含时间的微分方程啊?

[复制链接]
发表于 2006-8-30 12:59 | 显示全部楼层 |阅读模式

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

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

x
怎么用Matlab解显含时间的微分方程啊?有专门的命令?
回复
分享到:

使用道具 举报

发表于 2006-8-30 13:54 | 显示全部楼层
用数值方法吧,ode文件。
符号运算方面以前没用来解过显含时间的微分方程,不太清楚,不过可以试一下,dsolve函数。

评分

1

查看全部评分

发表于 2006-8-30 15:13 | 显示全部楼层
一般微分方程想要的到解析解的话都比较困难

如果用ode系列求数值解的话,显含不显含时间的方法都是一致的
 楼主| 发表于 2006-8-30 16:07 | 显示全部楼层
谢谢上面两位,问题是怎么处理这个时间啊,函数文件里有t,主程序里的ODE命令里也有时间,系统报错的
发表于 2006-8-30 16:34 | 显示全部楼层
最简单的一个例子,求微分方程x'=cos(t)

写一个函数vdp1000.m

  1. function dy = vdp1000(t,y)
  2. dy = cos(t);
复制代码


主程序:

  1. x0=0;  %初始值
  2. tspan=[0 10*pi]; %求解区间
  3. [T,Y] = ode15s(@vdp1000,tspan,x0);
  4. plot(T,Y)
复制代码
未命名.GIF

评分

1

查看全部评分

 楼主| 发表于 2006-8-30 17:15 | 显示全部楼层
我是一个微分方程组,含有参数,当然参数我定义为了全局变量,但t就不行了,不说明这个变量的话它就报错,说是没定义变量,定义的话也只能是个区间,它也报错All rows in the bracketed expression must have the same number of columns.,不知道怎么弄
发表于 2006-8-30 17:19 | 显示全部楼层
把你的方程提出来,这样说不清楚

[ 本帖最后由 ChaChing 于 2010-6-14 00:57 编辑 ]
 楼主| 发表于 2006-8-30 17:27 | 显示全部楼层
函数文件
global u;  global L;
lf=1.2;  lr=1.3; m=1500; iz=3000;
bf=11.275; br=18.631; cf=1.56; cr=1.56;
df=-2574.7; dr=-1749.7; ef=-1.999; er=-1.7908;
kp=0.3; K=0.02; Tr=0.2; Q=0.05;
wd=2*pi; t=[0,40] deltd=Q*cos(wd*t);
alphaf=atan((y(1)+lf*y(2))/u)-y(5);
alphar=atan((y(1)-lr*y(2))/u)-kp*y(5);
Ff=df*sin(cf*atan(bf*(1-ef)*alphaf+ef*atan(bf*alphaf)));
Fr=dr*sin(cr*atan(br*(1-er)*alphar+er*atan(br*alphar)));
dy=[2*(Ff*cos(y(5)+deltd)+Fr*cos(kp*(y(5)+deltd)))/m-u*y(2);
     2*(lf*Ff*cos(y(5)+deltd)-lr*Fr*cos(kp*(y(5)+deltd)))/iz;
     y(1)*cos(y(4))+u*sin(y(4));
     y(2);
     -(K*y(3)+K*L*y(1)*cos(y(4))/u+K*L*sin(y(4))+y(5))/Tr];

主程序最简单画相图就可以

[ 本帖最后由 ChaChing 于 2009-8-8 20:35 编辑 ]
发表于 2006-8-30 19:17 | 显示全部楼层
贴图给方程吧,程序太乱看不懂
这个问题可以用 [T,Y] = solver(odefun,tspan,y0,options,p1,p2...) 这种格式显示

global 定义的全局变量u和L可以通过格式中的p1,p2传递

函数可以写成 function dy = vdp1000(t,y,u,L) 的形式

[ 本帖最后由 ChaChing 于 2009-8-8 20:31 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2006-8-30 20:55 | 显示全部楼层
谢谢HAPPY教授的回答,不过我也查到了一些问题,好像用ODE也是可以的
发表于 2006-8-30 20:58 | 显示全部楼层
我上面给出的solver就指代的是ode45 ode23s等等

[ 本帖最后由 ChaChing 于 2010-6-14 00:57 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2006-8-30 21:19 | 显示全部楼层
顺便问个问题吧,在matlab里,正余弦是表示成sin,cos之类吧,为什么我看到后面还加个h,写成cosh什么的?matlab实在学的不怎么样,多多指教吧
发表于 2006-8-30 21:29 | 显示全部楼层
加 h 表示双曲余弦、双曲正弦函数,和cos sin之类是不一样的

[ 本帖最后由 ChaChing 于 2010-6-14 00:32 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-22 05:11 , Processed in 0.081581 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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