解非线性方程组

时间:2012-12-16 21:36:08

标签: matlab equation equation-solving

我想在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)

我的问题是如何在每次调用时将值ciijj)传递给myfunc

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

感谢

2 个答案:

答案 0 :(得分: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个变量,x0coeffs

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。上面已经做出了改变。

答案 1 :(得分:1)

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

说我有这个功能:

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

您可以通过调用x来传递a的初始猜测和fsolve的值:

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

注意:[]是为fsolve选项保留的,您可能希望使用这些选项。有关fsolve参数的信息,请参阅文档here中对options的第二次调用。