输出参数错误太多:MATLAB

时间:2017-07-27 10:45:46

标签: matlab function

我刚开始使用MATLAB,我正在寻求有关如何使函数更多参数的建议。

我已经建立了这个公式:

I = real((U0.*exp(i.*vw.*vt))./(L.*(-vw.^2+ (R/L).*i.*vw + (1/L.*C)))) + ...
    exp((-R.*vt)./(2.*L).*( alpha.*cos( sD.*vt)+ beta.*sin( sD.*vt)));

因此,我需要U0vwvtLR

的值

如果我把它放在命令窗口中:

D = (1/L*C)-((R^.2)/(4*L^.2));
sD = sqrt(D);
vt = linspace(tmin,tmax,200);
vw = omega;
[vw,vt] = meshgrid(vw,vt);
I = real((U0.*exp(i.*vw.*vt))./(L.*(-vw.^2+ (R/L).*i.*vw + (1/L.*C)))) + exp((-R.*vt)./(2.*L).*( alpha.*cos( sD.*vt)+ beta.*sin( sD.*vt)));
surf(vw,vt,I)

工作正常。

所以,现在我想创建一个函数来读取值并计算上面的所有内容并返回surf

我的尝试:

function [u] = test(L,C,R,tmin,tmax,omega,U0)
    D = (1/L*C)-((R^.2)/(4*L^.2));
    sD = sqrt(D);
    vt = linspace(tmin,tmax,200);
    vw = omega;
    [vw,vt] = meshgrid(vw,vt);
    I = real((U0.*exp(i.*vw.*vt))./(L.*(-vw.^2+ (R/L).*i.*vw + (1/L.*C))))+exp((-R.*vt)./(2.*L).*( alpha.*cos( sD.*vt)+ beta.*sin( sD.*vt)));
    surf(vw,vt,I)
end

发生此错误:

  

使用alpha时出错。输出参数太多。

您是否了解如何使此功能正常工作?

1 个答案:

答案 0 :(得分:1)

什么是alpha?它可能存在于您的工作区中,因此当您从工作区调用这些行时,一切都很好。但是,在test函数中,MATLAB没有“基础”工作空间的可见性,并且alpha不存在!将其作为参数传递或将其定义为您的其他值。与beta同上。

您还在函数

中定义了输出参数u
% Ouput  vvv
function [u] = test(L,C,R,tmin,tmax,omega,U0)

但是你在函数期间从未向变量u分配任何内容。如果你想返回surf图形对象,请在调用它时将其分配给u

% Square brackets not needed as only returning one variable
function u = test(L,C,R,tmin,tmax,omega,U0)
   % ... stuff
   u = surf(vw,vt,I)
end