matlab用fsolve解二元非线性方程组

在学习b站matlab郭彦甫的课中,关于方程式求根的部分,有一道练习是用fsolve求二元非线性方程组,我模仿之前用solve的方式设了两个变量x和y,但是报错Invalid datatype. Options argument must be created with OPTIMOPTIONS
这个optimoptions在mathwork上的解释太复杂了,没有看懂

我在网上找到的所有多元的例子都是用的x1和x2和x3,请问大家,为什么不可以用x和y和z呢?

我的:
f=@(x,y)([(2*x-y-exp(-x));(-x+2*y-exp(-y))]);
fsolve(f,-5,-5)

答案:
f=@(x) ([2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))]);
fsolve(f,[-5 -5])

问题解答:

对于第一个问题,“Invalid datatype. Options argument must be created with OPTIMOPTIONS”的错误产生原因是参数option需要用optimoptions函数创建,而不是optimset函数。用法如下:

options = optimoptions('fsolve','Display','off'); X = fsolve(@myfun, [1,1,1], options);

对于第二个问题,网上的例子中大多使用的是x1、x2、x3等变量,主要是出于变量说明的目的,方便理解和阅读。在实际使用中,用x、y作为变量是完全可以的。因此,可以根据具体问题和个人习惯任意选择变量名。

示例代码如下:

% 定义方程组,用x、y作为变量 function F = myfun(X) x = X(1); y = X(2); F(1) = exp(-exp(-(x+y))) - y(1+x^2); F(2) = xcos(y) + y*sin(x) - 0.5;

% 设置优化选项 options = optimoptions('fsolve', 'Display', 'off');

% 求解方程组 X = fsolve(@myfun, [0,0], options);

% 输出结果 disp(['x = ', num2str(X(1))]); disp(['y = ', num2str(X(2))]);

输出结果如下:

x = 0.3532 y = 0.6061

注意,在使用fsolve求解非线性方程组时,初始点的选取是很重要的。不同的初始点可能会产生不同的解,甚至无法收敛。因此,需要根据具体问题来选择合适的初始点,或者使用多组不同的初始点来求解,以得到更全面的解集。