Matlab 调用if-else输出到其他脚本

Matlab 调用if-else输出到其他脚本,matlab,function,if-statement,Matlab,Function,If Statement,我编写了一个名为“tension.m”的函数,其中使用了if-else条件,如下所示 function [T,T_earlyvalues,T_latervalues] = tension(u,sigma,G,N,K) %the values of sigma,G,N,K can be taken arbitrary. sigma=2; G=3;N=8;K=1; v=1; w=2.2; if u<w T =v*sqrt(sigma+G^2/(N-K)); T_earlyvalues=

我编写了一个名为“tension.m”的函数,其中使用了if-else条件,如下所示

function [T,T_earlyvalues,T_latervalues] = tension(u,sigma,G,N,K)
%the values of sigma,G,N,K can be taken arbitrary.
sigma=2; G=3;N=8;K=1; v=1;
w=2.2;
if u<w
  T =v*sqrt(sigma+G^2/(N-K));
  T_earlyvalues=T;
else
  T=(2*v)*sqrt(sigma+G^2/(N+K));
  T_latervalues=T;
end

如何将if else语句下的上述值从tension.m函数调用到myvalues.m脚本?

您已经定义了
tension
函数,使其返回三个输出

如果通过只需要一个输出来调用该函数,该函数将返回第一个值,在您的示例中为
T

这意味着

T=tension(u,sigma,G,N,K);
应该工作,因为
T
是第一个输出参数

T_earlyvalues=tension(u,sigma,G,N,K);
T_latervalues=tension(u,sigma,G,N,K);
不工作,因为实际上
tension
返回第一个值(
T
,而您分别期望第二个和第三个值。)

您可以通过以下方式调用上述两个调用:

[~,T_earlyvalues,~]=tension(u,sigma,G,N,K);
[~,~,T_latervalues]=tension(u,sigma,G,N,K);
~
允许避免函数返回输出参数

你可以找到

请注意,在函数中,
T_earlyvalue
未在
else
块中设置,与
if
块中的
T_latervalue
相同

这将生成一个错误,例如

调用张力期间未指定输出参数T_earlyvalue(可能还有其他值)

调用张力时未指定输出参数T_later值(可能还有其他值)

可以在函数开头将输出值初始化为默认值,例如:

T=NaN
T_earlyvalue=NaN
T_latervalues=NaN

然后,您可以使用这些特殊值(或您想要使用的任何其他值)来跟踪,例如,如果执行了
if
块或
else

块,这里似乎存在许多问题,其中最重要的问题是在定义或调用函数时对输出参数列表的工作方式有一些混淆。我建议从开始更好地理解如何创建和调用函数。然而,这个问题有点没有意义,因为更大的问题是你如何使用你的

您正试图将一个向量
u
传递给函数
tension
,根据我所知,您想要返回一个向量
T
,其中
u
T
值是用与
u>=w
T
值不同的公式计算的。您的条件语句无法为您完成此任务。相反,您将希望使用以下方式编写函数:

function [T, index] = tension(u, sigma, G, N, K)
  T = zeros(size(u));  % Initialize T to a vector of zeroes
  w = 2.2;
  index = (u < w);  % A logical vector, with true where u < w, false where u >= w
  T(index) = u(index)*v*sqrt(sigma+G^2/(N-K));       % Formula for u < w
  T(~index) = 2*(u(~index)-v)*sqrt(sigma+G^2/(N+K));  % Formula for u >= w
end

然后您可以使用子向量
T\u早期值
T\u晚期值
,随您的喜好而定。

谢谢您的回复。我已经纠正了打字错误。我尝试按如下方式替换,但出现了一个错误;T=张力(u,σ,G,N,K);[~,T_早期值,~]=张力(u,sigma,G,N,K);[~,~,T_值]=张力(u,σ,G,N,K);deltaA=T_早期值Sigma0*pi;deltaB=T_lateralvalueslambda*pi/2;我得到了以下错误,在调用“tension”期间未分配输出参数“T_earlyvalues”(可能还有其他参数)。MyValue中的错误(第7行)[~,T_早期值,~]=张力(u,sigma,G,N,K);您可以通过在函数体开头初始化输出变量(
T=NaN
T_-earlyvalue=NaN
T_-latervalues=NaN
,或任何其他默认值,
T=-999
T_-earlyvalue=-999
)来修复此错误。感谢您的回复。该代码与给定的函数配合良好。很抱歉,我打错了方程式。我试图在我的函数中修改它,但我得到了错误<代码>T(指数)=u*v*sqrt(西格玛+G^2/(N-K));%u
T(~index)=(2*(u-v))*sqrt(sigma+G^2/(N+K));%u>=w的公式
我得到以下错误;“在作业A(:)=B中,A和B中的元素数量必须相同。”@Jack:您必须在公式中用
索引
u
,如我更新的答案所示。谢谢您更新的答案。更新后的答案适用于
uw
的条件。我在赋值A(:)=B中得到了相同的错误
,A和B中的元素数必须相同。
对于
T(~index)=2*(u(index)-v)*sqrt(sigma+G^2/(N+K));%u>=w的公式
function [T, index] = tension(u, sigma, G, N, K)
  T = zeros(size(u));  % Initialize T to a vector of zeroes
  w = 2.2;
  index = (u < w);  % A logical vector, with true where u < w, false where u >= w
  T(index) = u(index)*v*sqrt(sigma+G^2/(N-K));       % Formula for u < w
  T(~index) = 2*(u(~index)-v)*sqrt(sigma+G^2/(N+K));  % Formula for u >= w
end
sigma0 = 2400; lambda = 1.3; v = 2; sigma = 2; G = 3; N = 8; K = 1;
u = 0:0.01:5;
[T, earlyIndex] = tension(u, sigma, G, N, K);  % Call function
T_earlyvalues = T(earlyIndex);   % Use logical index to get early T values
T_latervalues = T(~earlyIndex);  % Use negated logical index to get later T values