声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2580|回复: 3

[编程技巧] 如何在m文件中实现simulink中的du/dt实时求导功能?

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

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

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

x
不想用simlink环境仿真。在设计控制器的中间步骤中用到中间量的导数,在simulink中可以用du/dt模块轻松实现,但到m文件中如何实现呢?请指教!谢谢先。
回复
分享到:

使用道具 举报

发表于 2007-6-8 17:56 | 显示全部楼层
原帖由 zearo 于 2007-6-8 17:55 发表
不想用simlink环境仿真。在设计控制器的中间步骤中用到中间量的导数,在simulink中可以用du/dt模块轻松实现,但到m文件中如何实现呢?请指教!谢谢先。


help diff
 楼主| 发表于 2007-6-8 18:39 | 显示全部楼层

按照help 里面 diff 的用法不行,请帮忙看看

例如
在如下系统方程中,假设控制 u 为 Y(2) 的导数,简单写成 u=diff(Y(2)),那么运算时 u=[],不可用,如何解决呢?
主程序为
function DuffingM
P1 = 0.4;
P2 = -1.1;
P3 = 1.0;
P4 = 1.8;
w = 1.8;
tspan=[0:0.01:100];
Y0=[0 0];
[T,YY]=ode45('Duffing',tspan,Y0,[],P1,P2,P3,P4,w);

系统方程为:
function DY=Duffing(t,Y,flag,P1,P2,P3,P4,w)
switch flag
    case ''
       u = diff(Y(2))
     DY=[Y(2); u- P1*Y(2) - P2*Y(1) - P3*Y(1)^3 + P4*cos(w*t)];
end
发表于 2007-6-8 23:08 | 显示全部楼层
原帖由 zearo 于 2007-6-8 18:39 发表
例如
在如下系统方程中,假设控制 u 为 Y(2) 的导数,简单写成 u=diff(Y(2)),那么运算时 u=[],不可用,如何解决呢?
主程序为
function DuffingM
P1 = 0.4;
P2 = -1.1;
P3 = 1.0;
P4 = 1.8;
w = 1.8; ...


请仔细看 diff 的例子。另外,从数学上说,要求某一点的导数,能脱离它的周围点吗?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-4 15:05 , Processed in 0.050115 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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