bird67 发表于 2007-5-19 16:14

请教if模块怎么用?

Ports & Subsystems模块组里的If模块怎么用啊?请高手指点。我想实现的功能是,当输入角度θ=0时,输出角度=θ×(-1)

cdwxg 发表于 2007-5-19 16:20

建议这样的模块自己help一下,实在看不明白英文再来问.
点该模块,.然后下面的help,有例程的.

cdwxg 发表于 2007-5-19 16:25

先稍微注释下该if模块
inputs那里,是管几个输入的
下面2个空的是填写条件的,默认下你看到的是2个output,但是一旦你填写了elseif 那个条件后,后面就出现三个输入了,按照不同的满足表达式的要求分别输出1out口,还是2out口,还是3out口
当然如果你的输入只有一个,那么elseif 这里也只能是u1,不能有u2 ,u3 等等
具体不清楚再问,先看help再说,help里面画图的很清晰.


当输入角度θ=0时,输出角度=θ×(-1)这个需要if么?
你的意思是不是θ是不知道的,当θ等于什么什么,输出角度=-1*θ?
不过怎么说也用不到if啊,直接想乘不行么?
如果你这个是三种讨论情况中的一种倒可以,如果是2种情况的直接用switch

bird67 发表于 2007-5-19 16:29

谢谢。已解决

bird67 发表于 2007-5-19 17:02

具体问题:
当输入角度θ=奇数次0之后,输出角度=θ×(-1);
当输入角度θ=偶数次0之后,输出角度=θ。
应该怎么实现呢?急

[ 本帖最后由 bird67 于 2007-5-19 17:17 编辑 ]

cdwxg 发表于 2007-5-19 21:25

2种情况好解决,但这个次数怎么来判断呢?不晓得涉不涉及累加器了。
其实你说的这个不就是第一个周期是-θ第二个周期是θ么?你这个过0,难道不是角度是0到2pi变化么?
从这个角度去考虑呢?
:@Q

bird67 发表于 2007-5-20 08:58

但是我的问题是θ是不定的,也不一定是从0到2pi变化,难就难在这里。

cdwxg 发表于 2007-5-20 12:56

那你就用M文件来写
当遇到0时候,记数0的k就加一
然后下面再判断K为奇数和偶数的情况

bird67 发表于 2007-5-21 00:20

附件里的S-Function模块的S-Function Parameters设置为k,然后在matlab的命令窗口输入k=0;文件system1.m如下所示:(现在遇到的问题是当将k设定为其他值时,如1,2等,仿真就出现如下提示:Output returned by S-function 'system1' in 'time1/S-Function' during flag=3 call must be a real vector of length 1。如何解决?还有,可以在system1.m里面改变工作空间里面的k的值么?)
function = system1(t,x,u,flag,k)
switch flag,
case 0,
    =mdlInitializeSizes;
case 1,
    sys=mdlDerivatives(u,k);
case 3,
    sys=mdlOutputs(x);
   case {2,4,9}
    sys=[];
otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function =mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 1;
sizes.NumDiscStates= 0;
sizes.NumOutputs   = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0= ;
str = [];
ts= ;
function sys=mdlDerivatives(u,k)
if u==0
sys=k+1;
else sys=k;
end
function sys=mdlOutputs(x)
sys=(-1)^x;

mengyu55 发表于 2007-5-21 21:50

奇偶数之间不就差一嘛
你先检测到θ=0,输出θ,然后再每次检测到0取一次负不就得了,还用判断吗??

cdwxg 发表于 2007-5-21 22:48

恩,而且你得S函数写得不对得,sizes.NumContStates= 1;这里不用状态变量哈
function sys=mdlDerivatives(u,k)
if u==0
sys=k+1;
else sys=k;
end
mdlDerivatives是微分得,不是你这样用得:),微分一般用于X'=AX+BU这样得形式得等等

bird67 发表于 2007-5-22 11:50

好的,谢谢
页: [1]
查看完整版本: 请教if模块怎么用?