Simulink:语法错误

时间:2017-05-11 11:20:47

标签: matlab simulink

我在以下等式中有语法错误:

((Cs+Cf)*u(1)/Cf-Cs*u(2)/Cf)*(1/(1+(Cs+Cf)/(Cf*(10^(u0/20)))))*(1-exp(-(pi*f1*(10^9)/(fs*10^6))*(Cf/(Cs+Cf)+1/(10^(u0/20)))))

检查大写/小写,它们没问题。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

mentioned的文档中的Interpreted MATLAB Function

  

解释的MATLAB功能块接受一个实数或复数   输入类型为double ...

您正在使用多个输入 CsCfu0uf1fs

如何解决?

解决方案-1 使用Interpreted MATLAB Function block

解决这个问题的一种方法是将所有输入矩阵连接成一个矩阵,并使用其索引来表示等式中的每个值。
e.g;如果你有:

u=[1 5];   u0=5;   Cs=1;   Cf=1;   f1=1;   fs=20;

将它们连接到工作区中的单个矩阵中。如下所示:

new=[u, u0, Cs, Cf, f1, fs];  
%It could be different depending on the dimensions of these 
%variables that you actually have

然后根据 Interpreted MATLAB Function block new的索引使用以下等式:

((new(4)+new(5))*u(1)/new(5)-new(4)*u(2)/new(5))*(1/(1+(new(4)+new(5))/(new(5)*(10^(new(3)/20)))))*(1-exp(-(pi*new(6)*(10^9)/(new(7)*10^6))*(new(5)/(new(4)+new(5))+1/(10^(new(3)/20)))))

解决方案-2 使用MATLAB Function block

您还可以使用可以使用多个输入的MATLAB Function block。对于您的情况,请在其中编写以下代码:

function y = foo(u,u0,Cs,Cf,f1,fs)
y = ((Cs+Cf)*u(1)/Cf-Cs*u(2)/Cf)*(1/(1+(Cs+Cf)/(Cf*(10^(u0/20)))))* ...
    (1-exp(-(pi*f1*(10^9)/(fs*10^6))*(Cf/(Cs+Cf)+1/(10^(u0/20)))));

并使用其输入连接 Constant,并使常量的值等于您要使用的相应变量。