Matlab 求解非线性方程组

Matlab 求解非线性方程组,matlab,equation,equation-solving,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]

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

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

或者如何克服此错误
对于“double”类型的输入参数,未定义函数或方法“c”。


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

在主代码中,创建一个系数向量
c,ii,jj
和一个伪函数句柄
f\u d

coeffs = [c,ii,jj];
f_d = @(x0) myfunc(x0,coeffs);      % f_d considers x0 as variables
sol = fsolve(f_d,x0);
使您的函数
myfunc
能够接受两个变量,
x0
coefs

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)


编辑:谢谢您。上面已经做了更改。

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

假设我有这个功能:

function y = i_have_a_root( x, a )
    y = a*x^2;
end
只需调用
fsolve
即可传递
x
的初始猜测值和
a
的值,如下所示:

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

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

我的问题是否清楚?!这意味着我求解12个变量!这是错误的,我只有两个未知数。不管怎样谢谢你的回答我写得太匆忙了。让我把代码写出来,然后贴出来。我知道你是说12个变量的2个方程是不一致的。让我再写一遍。@Apteronotus
x0
是在
myfunc
之外定义的。在
myfunc
中,应该是
x
。顺便说一下,如果
x
c
是向量,您可以使用标量积,而不是显式地写入和:
F(1)=x*c(1:4)-coefs(end-1)
F(2)=x*c(5:8)-系数(结束)。但是,如果需要,您应该注意向量维度和转置。