无法在Matlab中求解非线性方程组

无法在Matlab中求解非线性方程组,matlab,symbolic-math,Matlab,Symbolic Math,我正在使用Matlab符号工具箱及其求解函数,试图求解一个由4个方程组成的非线性系统 有4个变量: x1 y1 x2 y2 和4个参数 delta1 delta2 alpha beta 下图描述了这些方程: 以下是Matlab代码: syms x1 x2 y1 y2 alpha beta delta1 delta2 [x1,y1,x2,y2] = solve('delta1 * x1^alpha * y1^(1 - alpha) = (1 - x2)^alpha * (1 - y2)^

我正在使用Matlab符号工具箱及其求解函数,试图求解一个由4个方程组成的非线性系统

有4个变量:

x1 y1 x2 y2
和4个参数

 delta1 delta2 alpha beta
下图描述了这些方程:

以下是Matlab代码:

syms x1 x2 y1 y2 alpha beta delta1 delta2

[x1,y1,x2,y2] = solve('delta1 * x1^alpha * y1^(1 - alpha) = (1 - x2)^alpha * (1 - y2)^(1-alpha)',...
    'delta2 * x2^alpha * y2^(1 - alpha) = (1 - x1)^beta* (1 - y1)^(1-beta)',...
    'alpha / (1-alpha) * (1 - y2) / (1 - x2) = beta / (1 - beta) * y2/x2',...
    'alpha / (1-alpha) * y1 / x1 = beta / (1 - beta) * (1 - y1) / (1 - x1)','x1','y1','x2','y2')
Matlab返回:

警告:找不到显式解决方案

>在81岁的时候,他被解救了

但是,如果我尝试将
alpha
beta
替换为
0.5

[x1,y1,x2,y2] = solve('delta1 * x1^0.5 * y1^ 0.5 = (1 - x2)^0.5* (1 - y2)^0.5',...
    'delta2 * x2^0.5 * y2^0.5 = (1 - x1)^0.5* (1 - y1)^0.5',...
    '(1 - y2) / (1 - x2) = y2/x2',...
    'y1 / x1 = (1 - y1) / (1 - x1)','x1','y1','x2','y2')
然后Matlab将给出结果

所以我想知道:

  • 这些方程真的不可解吗

  • 如果它可以解决,我是否以错误的方式使用Matlab符号工具箱?Matlab实际上可以解决这个问题

  • 如果Matlab不能解决这个问题,还有其他工具可以解决非线性方程组吗


  • 您应该试试Matlab的
    mupad
    命令。它打开了一个类似于Maple的符号编程环境,比符号库强大得多。如果你的方程有解(即使是一些假想的,或者如果它们有解是真正的特殊情况),符号环境肯定会找到它们

    试试看

    编辑: 看到@woodchips的答案(在这方面似乎比我知道得多!)你也可以尝试解已知α-β范围的方程。您可以假设它们将具有哪些值,并从一个范围内进行迭代。我只是不知道它是否会起作用,这正是我在你的情况下所要做的


    仍然不要停止使用
    mupad
    ,它可能会起作用(如果你做了一些假设,比如:
    假设alpha real
    类命令。只需查看帮助即可)

    你应该试试Matlab的
    mupad
    命令。它打开了一个类似于Maple的符号编程环境,比符号库强大得多。如果你的方程有解(即使是一些假想的,或者如果它们有解是真正的特殊情况),符号环境肯定会找到它们

    试试看

    编辑: 看到@woodchips的答案(在这方面似乎比我知道得多!)你也可以尝试解已知α-β范围的方程。您可以假设它们将具有哪些值,并从一个范围内进行迭代。我只是不知道它是否会起作用,这正是我在你的情况下所要做的


    仍然不要停止尝试使用
    mupad
    ,它可能会起作用(如果你做了一些假设,比如:
    假设alpha real
    类命令。只需查看帮助即可)

    几乎可以肯定,不,这些是不可解析解的。除非alpha和beta是1或0(或显然是1/2),否则这些方程将相当于解析解的高阶数,尽管我无法在不仔细观察的情况下确定这一点。但对于通用real alpha来说,这太难了

    是的,我知道电脑体积大,速度快,功能强大。他们什么都能做,对吗?但是看看当你试图解决这样的联立多项式方程时会发生什么

    例如,当您消除其中一个未知数时,两个未知数中的两个二次方程将简化为四阶方程。一个具有非常系数的四阶多项式方程是可解的。但是你有四个方程,每个方程本质上都是二次方程。(每个方程中都有变量的乘积。)因此,如果你试图用符号的方式求解,其中4个将等价于一个八阶多项式。它将具有一般的非常数系数。我们知道一个五阶或更高的多项式通常不会有解析解。所以,虽然你可能会很幸运,也许对于一些特殊的alpha和beta值,几乎可以肯定的是,没有这样的解析解


    而对于一般真实阿尔法来说,情况更糟。根本不存在解决方案的期望。事实上,当你尝试,它失败了支持这一点。但是,嘿,一台更大的计算机可能会找到答案。抱歉,但不是真的。

    几乎可以肯定,不,这些都不是解析解。除非alpha和beta是1或0(或显然是1/2),否则这些方程将相当于解析解的高阶数,尽管我无法在不仔细观察的情况下确定这一点。但对于通用real alpha来说,这太难了

    是的,我知道电脑体积大,速度快,功能强大。他们什么都能做,对吗?但是看看当你试图解决这样的联立多项式方程时会发生什么

    例如,当您消除其中一个未知数时,两个未知数中的两个二次方程将简化为四阶方程。一个具有非常系数的四阶多项式方程是可解的。但是你有四个方程,每个方程本质上都是二次方程。(每个方程中都有变量的乘积。)因此,如果你试图用符号的方式求解,其中4个将等价于一个八阶多项式。它将具有一般的非常数系数。我们知道一个五阶或更高的多项式通常不会有解析解。所以,虽然你可能会很幸运,也许对于一些特殊的alpha和beta值,几乎可以肯定的是,没有这样的解析解

    而对于一般真实阿尔法来说,情况更糟。根本不存在解决方案的期望。事实上,当你尝试,它失败了支持这一点。但是,嘿,一台更大的计算机可能会找到答案。对不起,不是真的