1

我想在 MATLAB 中求解两个非线性方程,所以我做了以下操作:

我脚本的一部分

c=[A\u;A\v];
% parts of code are omitted.
x0=[1;1];
sol= fsolve(@myfunc,x0);

myfunc功能如下

function F = myfunc(x)

  F=[ x(1)*c(1)+x(2)*c(2)+x(1)*x(2)*c(3)+c(4)-ii;

     x(1)*c(5)+x(2)*c(6)+x(1)*x(2)*c(7)+c(8)-jj];

end

我有两个未知数x(1)x(2)

我的问题是每次调用时如何将值(,,,cii传递jj给?myfunc

或如何克服此错误Undefined function or method 'c' for input arguments of type 'double'.

谢谢

4

2 回答 2

1

编辑:之前的答案是虚假的,根本没有贡献。因此已被删除。这是正确的方法。

在您的主代码中创建一个系数向量c,ii,jj和一个虚拟函数句柄f_d

coeffs = [c,ii,jj];
f_d = @(x0) myfunc(x0,coeffs);      % f_d considers x0 as variables
sol = fsolve(f_d,x0);

使您的函数myfunc能够接受 2 个变量,x0并且coeffs

function F = myfunc(x, coeffs)
c = coeffs(1:end-2);
ii = coeffs(end-1);
jj = coeffs(end);

F(1) = x(1)*c(1)+x(2)*c(2)+x(1)*x(2)*c(3)+c(4)-ii;
F(2) = x(1)*c(5)+x(2)*c(6)+x(1)*x(2)*c(7)+c(8)-jj;

我认为这应该解决 x0(1) 和 x0(2)。

编辑:谢谢Eitan_T。上面已经进行了更改。

于 2012-12-16T22:50:37.120 回答
1

如果函数句柄不是您想要的,我更喜欢另一种选择。

说我有这个功能:

function y = i_have_a_root( x, a )
    y = a*x^2;
end

您可以通过如下调用来传递您的初始猜测x和值:afsolve

a = 5;
x0 = 0;
root = fsolve('i_have_a_root',x0,[],a);

注意:[]保留给fsolve您可能想要使用的选项。有关参数的信息,请参阅此处fsolve文档中的第二次调用。options

于 2012-12-18T06:56:44.023 回答