2012-07-06 70 views
1

我被这个错误卡住了:为什么不是标量的结果?

在赋值A(I)= B中,B和I中的元素数必须相同。 (1)=((u-uc)。^ 2)+((y-yc)。^ 2) - (d。^ 2); 我不明白,为什么这不会得到一个skalar?因为元素都是标量。应该改变什么来获得标量?

问候

编辑:感谢sloede,所有的输入都是标量,但我仍然得到这个错误

在分配A(I)= B,B中元素的个数,我必须 相同。

 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.* 
+1

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 

或正常矢量化的功能(如果可能的话): 您可以通过添加自己的函数中的下列建设解决这个问题(当然它改变您的需要/你的参数)可以插入命令'whos y uc y uc y yc d',并报告输出?输入变量或分配的变量肯定存在问题,'whos'命令将允许您查看这些变量的属性。 – 2012-07-06 07:02:31

回答

1

“。”在运算符之前意味着应该以元素方式应用以下操作,而不是整个向量。因此

a = b.^2 

会给你结果的b所有元素的平方和保存回一个。因此,在上面的代码中的语句,如果任何üUCÿYCd不是标量而是一个向量,你的结果将是一个载体为好。

否则,你的代码似乎没有错。

+0

感谢您的回复,所有输入都是标量。我编辑与我得到的错误的问题。 – shun 2012-07-06 05:39:21

+0

看起来你正试图在函数'myfun'中使用变量,这些变量在函数范围之外定义,因此不可见。我建议遵循比尔的建议,弄清楚错误陈述中的所有变量是否都是明确的。 – 2012-07-06 07:32:38

0

读fsolve的文档:http://www.mathworks.nl/help/toolbox/optim/ug/fsolve.html

它指出:

fun
The nonlinear system of equations to solve. fun is a function that accepts a vector x and returns a vector F , the nonlinear equations evaluated at x .

显然你的函数myfun不处理向量输入。以前只是

相关问题