我遇到了这个错误:
在作业A(I)= B中,B和I中的元素数必须相同。
yres(1)=((u - uc)。^ 2)+((y - yc)。^ 2) - (d。^ 2); 我不明白,为什么这不会得到一个标量?因为元素都是标量。什么应该改为标量?
最好的问候
编辑:谢谢sloede,所有输入都是标量,但我仍然会收到此错误
在作业A(I)= B中,B和I中的元素数必须是 相同。
Error in myfun (line 7)
yres(1)=sqrt(((u - uc).^2) + ((y - yc).^2) ) -d;
Error in fsolve (line 241)
fuser = feval(funfcn{3},x,varargin{:});
Error in modfsolve (line 26)
x= fsolve(@myfun,x0,options,uc,d,spacing_amplitude,spacing_width);
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE
cannot continue.*
答案 0 :(得分:1)
“。”在运算符之前意味着应该以元素方式应用以下操作,而不是整个向量。因此
a = b.^2
将为您提供 b 的所有元素的平方并保存回 a 。因此,在上面的代码语句中,如果 u , uc , y , yc ,中的任何一个d 不是标量而是矢量,你的结果也是矢量。
否则您的代码似乎没有任何问题。
答案 1 :(得分:0)
阅读fsolve的文档:http://www.mathworks.nl/help/toolbox/optim/ug/fsolve.html
它声明:
fun
求解非线性方程组。fun
是一个接受向量x
并返回向量F
的函数,在x
评估非线性方程。
显然你的函数myfun
不处理向量输入。
您可以通过在函数内添加以下结构来解决此问题(当然,根据您的需要/您的参数将其更改):
function out = myfun(in)
if ~isscalar(in)
% assuming it's a matrix or vector
out = reshape(arrayfun(@myfun,in(:)),size(in));
else
% your actual function execution statements
out = dostuffon(in);
end
end
或正确地矢量化你的功能(如果可能的话)