如何用matlab中的fslove函数求解二元三次方程组

目前疑问

  1. 下面的使用solve求解得出的解为什么都是''root(z^9 - (332238006377403642742''这种形式
  2. 怎么使用fslove函数求解如下方程,主要是不明白fslove中 f = [ ; ]后,求解的未知数就只有一个了。具体代码应该怎么写。
    方程如下
    syms x y
    eq1=5.348*x+3.515*y-10.8*x*x*x+5.244*x*y-0.2036*y*y+3.608*x*x*x-1.113*x*x*y-0.2199*x*y*y=22.209
    eq2=9.081*x+7.411*y-12.48*x*x+3.925*x*y-1.648*y*y+3.723*x*x*x-0.6574*x*x*y-0.2647*x*y*y+0.1309*y*y*y=16.844
    [x,y]=solve(eq1,eq2,x,y)
    x=subs(x),y=subs(y)
    

你在2和3等式后面用两个等于号

syms x y
eq1 = 5.348*x + 3.515*y - 10.8*x*x*x + 5.244*x*y - 0.2036*y*y + 3.608*x*x*x - 1.113*x*x*y - 0.2199*x*y*y == 22.209;
eq2 = 9.081*x + 7.411*y - 12.48*x*x + 3.925*x*y - 1.648*y*y + 3.723*x*x*x - 0.6574*x*x*y - 0.2647*x*y*y + 0.1309*y*y*y == 16.844;



fslove求解·

% 定义一个函数,输入为一个向量 [x, y],输出为一个向量 [eq1, eq2]
eqns = @(z) [5.348*z(1)+3.515*z(2)-10.8*z(1)^3+5.244*z(1)*z(2)-0.2036*z(2)^2+3.608*z(1)^3-1.113*z(1)^2*z(2)-0.2199*z(1)*z(2)^2-22.209;
             9.081*z(1)+7.411*z(2)-12.48*z(1)^2+3.925*z(1)*z(2)-1.648*z(2)^2+3.723*z(1)^3-0.6574*z(1)^2*z(2)-0.2647*z(1)*z(2)^2+0.1309*z(2)^3-16.844];

% 使用 fsolve 求解非线性方程组,初始值为 [1, 1]
[x, fval, exitflag] = fsolve(eqns, [1, 1]);


该回答引用ChatGPT

对于使用solve函数求解时输出结果都是"root(方程)"的形式,这是因为方程可能没有解析解或者解析解十分复杂,无法用有限的符号表达式表示。在这种情况下,MATLAB会返回方程的数值解或者用符号表示方程的根。

而fsolve函数用于求解非线性方程组,它要求将方程组转化为形式f(x) = 0。在这个函数中,变量x是一个向量,其中每个元素是方程组中的一个未知数。因此,在使用fsolve函数时,需要将方程组的每个方程写成形式f(x) = 0,其中x是包含方程组未知数的向量。

对于你提供的方程组,你可以将它们转化为形式f(x) = 0,其中x是一个2维向量,包含未知数x和y。具体地,可以这样写:


syms x y
f = [
    5.348*x+3.515*y-10.8*x^3+5.244*x*y-0.2036*y^2+3.608*x^3-1.113*x^2*y-0.2199*x*y^2-22.209;
    9.081*x+7.411*y-12.48*x^2+3.925*x*y-1.648*y^2+3.723*x^3-0.6574*x^2*y-0.2647*x*y^2+0.1309*y^3-16.844
];
[x, y] = fsolve(f, [0, 0]);


在这个例子中,f是一个包含两个方程的向量,它们表示方程组的形式f(x) = 0。在fsolve函数的第一个参数中,我们传入这个向量。在第二个参数中,我们传入一个包含初始值的向量,它用于启动迭代算法的搜索过程。在这个例子中,我们将x和y的初始值都设为0。最终,fsolve函数返回了方程组的解,它们被存储在变量x和y中。最后,你可以使用subs函数将这些解代入原始方程中,求得数值解。

注意,对于非线性方程组,有可能存在多个解或者不存在解。因此,在使用fsolve函数时,应该检查求得的解是否符合实际情况。