1

我被这个错误困住了:

在赋值 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.*
4

2 回答 2

1

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

a = b.^2

结果将为您提供b的所有元素平方并保存回a。因此,在您上面的代码语句中,如果uucyycd中的任何一个不是标量而是向量,那么您的结果也将是向量。

否则,您的代码似乎没有任何问题。

于 2012-07-06T05:26:31.090 回答
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

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

于 2012-07-06T08:13:43.037 回答