刚接触 MATLAB,我需要有关以下问题的帮助。
我想创建一个函数val=F(v,e),它接受两个输入v、一个1xn向量,以及标量 e,并输出标量 val,用于计算向量 v-e 的非零条目,即向量 v> 从其所有条目中减去 e。我的函数代码如下:
function val = eff(vec, e)
val = sum( (vec - e > 0) );
end
当我在单个点评估该函数时,它会按预期工作。但我想要这个函数在 (0,1) 上的绘图。绘制它会给出 e 的整个范围内的恒定值。我在 main 上使用以下代码
figure
e = linspace(0,1);
plot(e, eff(rand(1,100),e),'o',e, e)
此外,当我使用小向量(例如 rand(1,10))时,我会收到以下错误消息:
>Error using -
>
>Matrix dimensions must agree.
>
>Error in eff (line 3)
>
>val = sum( (vec - e > 0 ));
我的函数是否对矩阵维度太粗心了?或者是否有更简单的方法来评估矢量范围内的eff?
提前致谢。
最佳答案
您创建了一个函数,该函数设计仅适用于标量 e
参数,并且传递 e
作为数组可能会导致错误......但随后您使用 e = linspace(0,1)
调用它,它是一个数组。
当e
的大小为10时,特定的错误告诉您不能从大小为100的矩阵中减去它。
当e
碰巧与vec
具有相同的大小时,您的函数将两个大小相等的数组相减,并返回它们的总和,即是一个标量。因此,您的绘图本质上是在执行类似 plot(a_range, a_scalar)
的操作,这就是它看起来恒定的原因。
相反,您可能应该在 for 循环中为 e
的每个值收集一个数组 V
,或者使用 arrayfun
,例如
e = linspace(0,1);
V = arrayfun(@eff, e);
然后绘制 e
与 V
或者,您可以重写您的函数,使其期望 e
是一个数组,并且您的返回值是一个与 e
大小相同的数组,填充为适当的值。
关于matlab - 向量函数始终是常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39441279/