Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-12-22, 11:37   #1
yuer981211
初级会员
 
注册日期: 2008-09-08
年龄: 42
帖子: 2
声望力: 0
yuer981211 正向着好的方向发展
默认 [求助]S函数中能否调用M函数

我现在写了一个S-FUNCTION
里面调用了一些M函数,当把S函数的名字写入S—FUNCTION块的时候
总是出现
??? SWITCH expression must be a scalar or string constant.

Error in ==> HSV at 32
switch flag,

不知道该如何处理了,请教大家了
AreaCXJTFT等都为M函数,如果我调用方式出现错误,请指出阿,:biggrin: :biggrin:
程序如下:
看着很麻烦,其实就是判断区域Area后,根据Area的值选择输出的计算方式:




function [sys,x0,str,ts]=HSV(t,x,u,flag)
switch flag,

case 0
[sys,x0,str,ts] = mdlInitializeSizes; % Initialization

case 3
sys = mdlOutputs(t,x,u); % Calculate outputs
case { 1, 2, 4, 9 }
sys = []; % Unused flags

otherwise
error(['Unhandled flag = ',num2str(flag)]); % Error handling
end;

function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs=7;
sizes.NumInputs=2;
sizes.DirFeedthrough=0;
sizes.NumSampleTimes=1;
sys = simsizes(sizes);
str = [];
ts = [-1 0];
function sys = mdlOutputs(t,x,u)
P=u(1);
Tamp=u(2)+273.15;
if (273.15<=Tamp<=1073.15) &( 0.007<=P<=100)
if (273.15<=Tamp<=623.15)
Pst=Ps(Tamp);
Pb12=Pst;
if P>=Pb12
Area=1;
else
Area=2;
end
elseif (623.15<Tamp<863.15)
Pb23=P23(Tamp);
Pst=Ps(Tamp);
if (623.15<Tamp<647.096)
if P==Pst
Area=4;
elseif (Tamp==647.096)&(P==22.064)
GV=0.003106;
Area=4;
end
elseif P<Pb23
Area=2;
else
Area=3
end
else (863.15<=Tamp<=1073.15)
Area=2;
end
else
return
end

switch Area,
case 1
PS=16.53; %1区基本方程3.1中压力常数,MPa
TS=1386; %1区基本方程3.1中温度常数,K
GH=1;
GS=1;
GV=1;
LH=TS*R0*(TS/Tamp)*AreaARr(P,Tamp);
LS=R0*((TS/Tamp)*AreaARr(P,Tamp) -AreaAR(P,Tamp));
LV=TS*R0*AreaARY(P,Tamp)/(PS*1000);
subArea=1;
case 2
TS=540; %TS=540K
PS=1; %PS=1Mpa
LH=1; %2_过热蒸汽区中水的比焓不计算
LS=1; %2_过热蒸汽区中水的比熵不计算
LV=1; %2_过热蒸汽区中水的比容不计算
if P<=10
GH=R0*T0*(TS/Tamp)*AreaBaH(P,Tamp);
GS=R0*AreaBaS;
GV=R0*T0*(P/PS)*AreaBaV(P,Tamp);
else
GH=R0*T0*(TS/Tamp)*AreaBaH(P,Tamp);
GS=R0*AreaBaS;
GV=R0*T0*(P/PS)*AreaBaV(P,Tamp);
end
subArea=2;
case 3
TS=647.096; %TS=647.096K
LH=1;
LS=1;
LV=1;
GH=R*TS*(AreaCTFT(P,Tamp)+AreaCDFD(P,Tamp));
GS=R*(AreaCTFT(P,Tamp)-AreaCF(P,Tamp));
GV=AreaCV(P,Tamp);
subArea=3;
case 4
LH=R*T*(AreaCNDTFT(P,Tamp)+AreaCNDDFD(P,Tamp));
LS=R*(AreaCNDTFT(P,Tamp)-AreaCNDF(P,Tamp));
LV=AreaCNDV(P,Tamp);
GH=R*T*(AreaCXJTFT(P,Tamp)+AreaCXJDFD(P,Tamp));
GS=R*(AreaCXJTFT(P,Tamp)-AreaCXJF(P,Tamp));
GV=AreaCXJV(P,Tamp);
subArea=4;
otherwise
return
end
sys=[LH,LS,LV,GH,GS,GV,subArea];
yuer981211 当前离线   回复时引用此帖
旧 2008-12-23, 08:02   #2
anbcjys
高级会员
 
注册日期: 2008-09-14
年龄: 43
帖子: 351
声望力: 24
anbcjys 正向着好的方向发展
默认 回复: [求助]S函数中能否调用M函数

你这个问题用不到s函数 另外检查一下你的语句 有些有问题 不是m语言 你说的那个没有试过 感觉不可以 不过你放到s函数里面试试
__________________
qq604443022
anbcjys 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[求助]两个图像如何相乘? Jael MATLAB论坛 4 2013-09-22 15:10
[求助]关于动态博弈的仿真研究 pp75557 MATLAB论坛 3 2010-07-09 18:23
[求助]颜色直方图(新人报道=.=) comet MATLAB论坛 5 2009-05-02 01:37
[求助]如何将2维数组转换成1维数组? wangzizizi MATLAB论坛 3 2008-11-28 19:33
[求助]一个有关用设计的滤波器处理声音信号的问题。 fujinhai MATLAB论坛 7 2008-11-13 09:31


所有时间均为北京时间。现在的时间是 07:42


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.