我想在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
?
或如何克服此错误Undefined function or method 'c' for input arguments of type 'double'.
感谢
答案 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个变量,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。上面已经做出了改变。
答案 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
的第二次调用。