为什么结果不是标量?

时间:2012-07-06 05:08:17

标签: matlab

我遇到了这个错误:

在作业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.*

2 个答案:

答案 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

或正确地矢量化你的功能(如果可能的话)