在Octave中,我在单独的文件正方形中定义了一个函数。m
function y = square(x)
y = x^2;
endfunction
在其他文件脚本中,我有
disp("Hello World 2");
fplot( @(x) square(x),[-1 1])
我得到 错误:对于x ^ A,A必须是正方形矩阵。使用。^表示逐元素幂。
如果我尝试
y = x.^2;
在函数中,我得到完全相同的消息
答案 0 :(得分:1)
出现该错误的原因是因为fplot
一次将所有指定范围作为矢量传递,将您的函数视为矢量化函数,期望有矢量输入并返回矢量输出。 / p>
您可以通过以下方法确认“正确”:将“调试时出错”变为true,执行debug_on_error(true)
,运行有问题的行,然后检查x
。
因此,在函数内部,事情出了问题,因为您试图获取向量的平方,这是一个非法操作(从数学上来说)。
在这种情况下,将函数转换为y = x.^2
应该可行,因为您要将向量的每个元素都转换为其平方,这就是您想要的。但是显然,仅将^
更改为.^
可能无法解决每个问题。
通常,最好创建自己的“范围”和“输出”并使用plot
直接绘制它们;这样可以给您更多的控制权,并且您可以先检查输入和输出,以确保您正在绘制自己想绘制的内容。
答案 1 :(得分:0)
欢迎使用StackOverflow!
我刚刚在https://octave-online.net/上尝试了您的代码(无需创建帐户,甚至也不需要文件)。
第二个版本可以按预期工作:y = x .^ 2;
在函数内部。
确定修改后保存了文件吗?