我刚开始使用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)));
因此,我需要U0
,vw
,vt
,L
,R
如果我把它放在命令窗口中:
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时出错。输出参数太多。
您是否了解如何使此功能正常工作?
答案 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