声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: zyf

[基本模块类] [求助]如何用 simulink中的 state-space实现 X’=AX+Bu+Ed?

[复制链接]
 楼主| 发表于 2007-5-30 20:01 | 显示全部楼层
Vin和d都是mux的输入啊
回复 支持 反对
分享到:

使用道具 举报

发表于 2007-5-30 20:36 | 显示全部楼层
那你的S函数怎么知道你的VIN和d是输入呢?
你S函数的这些接入点在哪里呢
发表于 2007-6-3 18:06 | 显示全部楼层
simulink很好,不用编程的 呵呵
发表于 2007-6-9 15:51 | 显示全部楼层

回复 #1 zyf 的帖子

这个问题不用s函数的话也可以,把U=[u;d],就可以了,这样就是多输入系统了

评分

1

查看全部评分

发表于 2007-6-9 21:00 | 显示全部楼层
原帖由 xiaosan01 于 2007-6-9 15:51 发表
这个问题不用s函数的话也可以,把U=,就可以了,这样就是多输入系统了

这样就可以解决了么?那B和E不一样怎么用simulink里的那个模块解决呢?
发表于 2007-6-10 13:22 | 显示全部楼层

回复 #20 cdwxg 的帖子

其中B=[B E];状态方程可转化为:x'=Ax+[B E][u;d];这样就可以了

评分

1

查看全部评分

发表于 2007-6-14 14:28 | 显示全部楼层
为什么不将输入u和d揉在一个矢量里面呢,变成一行三列的然后再用模块去做呢?

评分

1

查看全部评分

发表于 2007-6-21 22:42 | 显示全部楼层
这个S函数里很多matlab语句不规范,我给该了一下,起码不报错了,逻辑上有没有错误我就不管了:
function [sys,x0,str,ts] = statefunc(t,x,u,flag,d)
A=[0 -1000000/335;100000 -100000/11];B=[1000000*d/335 0;0 100000];
E=[Vin*1000000/335 0];C=[0 1];D=[0 0];
switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 2,
    sys=[];
  case 3,
    sys=mdlOutputs(t,x,u);
  case 4,
    sys=[];
  case 9,
    sys=mdlTerminate(t,x,u);
  case 1,
    sys =mdlDerivatives(t,x,u,d);
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end

function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 1;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   
sys = simsizes(sizes);
x0  = [0];

str = [];

ts  = [0 0];     


function sys=mdlDerivatives(t,x,u,d)
sys = [A*x+B*u+E*d];
function sys=mdlOutputs(t,x,u)
sys =[C*x+D*u];

function sys=mdlTerminate(t,x,u)
sys = [];

[ 本帖最后由 yf2002043227 于 2007-6-21 22:44 编辑 ]
1.JPG
2.JPG

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-26 20:51 , Processed in 0.082790 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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