ly012659 发表于 2007-10-10 16:47

s函数中状态变量的个数最多为多少?

s函数中,可不可以用一个4*6的矩阵作为状态变量?
为什么当我的输入变量u为一个有八个元素的向量时系统就报错说输入太多呢?

lirui0662 发表于 2007-10-11 08:35

回复 #1 ly012659 的帖子

你的矩阵是4*6的,也就是说有4个状态变量
你输入8个肯定会报错的

jack_boy 发表于 2007-10-11 09:39

有几个地方不明白:
1、状态变量的个数为什么是矩阵?在s函数中,mdlInitializeSizes(T)这个函数中如何设置size.NumContStates或者是size.NumDiscStates的值,让它的值为一个矩阵?
2、输入变量u的维数与mdlInitializeSizes(T)中size.NumInputs的值相关,如果设置为8,输入变量u的维数是8不应该报错呀!如果设置为4,出错也只会说输入向量的维数必须是4,不会报错说大也不会说小吧,不知如何判断出一定是输入太多?

ly012659 发表于 2007-10-11 09:45

回复 #2 lirui0662 的帖子

状态变量矩阵的维数与输入没有必然关系吧,只是将中间的过程变量暂存在里边,相当于一个寄存器吧?

jack_boy 发表于 2007-10-11 09:53

回复 #4 ly012659 的帖子

你能把你的空间状态方程和s函数发上来看看吗?实在是不知道你的状态变量矩阵是怎么回事,这样如何在s函数中设置?

ly012659 发表于 2007-10-11 10:33

附件上传的网址是什么,我找了半天没找到:@D

jack_boy 发表于 2007-10-11 10:40


点下回复!这里可以上传,不会是开玩笑的吧:@L

ly012659 发表于 2007-10-11 10:55

:@L 刚才一直在快速恢复栏里找...






刚才的模型传错了,又重新传了一遍....

[ 本帖最后由 ly012659 于 2007-10-11 12:01 编辑 ]

jack_boy 发表于 2007-10-11 11:41

你用的是自适应控制,这个我学得不是很好,你的仿真我也没法运行,也许版本问题
先说说我的几点疑问:
1、看s函数你想得到的是但是按照仿真图中的连接方法得到的是,且u似乎也有相似的问题。

2、r(k)-u(k)=e(k)?




3、sizes.NumDiscStates= 9,P = x(4:7,4:7),K = x(1:4,8),theta = x(1:4,9);而x0 = ;
   状态变量x是4×9,还是6×9的矩阵
4、P = eye(4),eye好像没有定义过
5、在mdlInitializeSizes中theta = theta0,x0 = ,是否每次运行S函数时都要初始化theta=theta0,从我知道的来看theta(k)应该等于theta(k-1)
以上几点是我小小的疑问,外家之言见笑了

ly012659 发表于 2007-10-11 12:09

1 仿真模型传错了 所有的y u都是应该从k-1时刻开始,不可能有当前时刻的
2 同上
3 4*9
4 eye(4)4阶单位矩阵,eye是单位矩阵函数,mat自带
5 初始化只在仿真开始时才进行

jack_boy 发表于 2007-10-11 16:10

明白了,看看s函数和仿真框图,模块之间连接没问题的话,应该可以运行啊
找不出问题所在!:@(

ly012659 发表于 2007-10-12 09:40

请高手赐教!!不胜感激:loveliness:

matlab000 发表于 2007-12-18 15:41

回复 #9 jack_boy 的帖子

请问s函数的参数里包含一个矩阵,那矩阵的初始化应该放在什么地方,谢谢!!

yh880426 发表于 2012-2-23 11:24

我也遇到了类似的问题,真的很麻烦,初学搞不懂

yh880426 发表于 2012-2-23 12:12

状态变量的个数跟输入没有关系吧,为什么状态变量多了s函数就不能导入到simulink,sfunction模块中呢
页: [1] 2
查看完整版本: s函数中状态变量的个数最多为多少?