声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3120|回复: 11

请教if模块怎么用?

[复制链接]
发表于 2007-5-19 16:14 | 显示全部楼层 |阅读模式

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

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

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

使用道具 举报

发表于 2007-5-19 16:20 | 显示全部楼层
建议这样的模块自己help一下,实在看不明白英文再来问.
点该模块,.然后下面的help,有例程的.
发表于 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
 楼主| 发表于 2007-5-19 16:29 | 显示全部楼层
谢谢。已解决
 楼主| 发表于 2007-5-19 17:02 | 显示全部楼层
具体问题:
当输入角度θ=奇数次0之后,输出角度=θ×(-1);
当输入角度θ=偶数次0之后,输出角度=θ。
应该怎么实现呢?急

[ 本帖最后由 bird67 于 2007-5-19 17:17 编辑 ]
发表于 2007-5-19 21:25 | 显示全部楼层
2种情况好解决,但这个次数怎么来判断呢?不晓得涉不涉及累加器了。
其实你说的这个不就是第一个周期是-θ第二个周期是θ么?你这个过0,难道不是角度是0到2pi变化么?
从这个角度去考虑呢?
:@Q
 楼主| 发表于 2007-5-20 08:58 | 显示全部楼层
但是我的问题是θ是不定的,也不一定是从0到2pi变化,难就难在这里。
发表于 2007-5-20 12:56 | 显示全部楼层
那你就用M文件来写
当遇到0时候,记数0的k就加一
然后下面再判断K为奇数和偶数的情况
 楼主| 发表于 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 [sys,x0,str,ts] = system1(t,x,u,flag,k)
switch flag,
  case 0,
    [sys,x0,str,ts]=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 [sys,x0,str,ts]=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  = [0];
str = [];
ts  = [0 0];
function sys=mdlDerivatives(u,k)
if u==0
sys=k+1;
else sys=k;
end
function sys=mdlOutputs(x)
sys=(-1)^x;

time.mdl

14.85 KB, 下载次数: 13

发表于 2007-5-21 21:50 | 显示全部楼层
奇偶数之间不就差一嘛
你先检测到θ=0,输出θ,然后再每次检测到0取一次负不就得了,还用判断吗??

评分

1

查看全部评分

发表于 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这样得形式得等等
 楼主| 发表于 2007-5-22 11:50 | 显示全部楼层
好的,谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-26 21:07 , Processed in 0.092595 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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