Matlab 求解非线性方程组
我想在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]
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个方程是不一致的。让我再写一遍。@Apteronotusx0
是在myfunc
之外定义的。在myfunc
中,应该是x
。顺便说一下,如果x
和c
是向量,您可以使用标量积,而不是显式地写入和:F(1)=x*c(1:4)-coefs(end-1)代码>和F(2)=x*c(5:8)-系数(结束)代码>。但是,如果需要,您应该注意向量维度和转置。