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

时间:2012-10-10 02:27:11

标签: matlab symbolic-math

我正在使用 Matlab Symbolic Toolbox 及其求解函数并尝试求解4个方程的非线性系统,

有4个变量:

x1 y1 x2 y2

和4个参数

 delta1 delta2 alpha beta

方程如下图所示: Nonlinear equations

这是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解决

但是,如果我尝试将alphabeta替换为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将给出结果。

所以我想知道:

  1. 这些方程式真的无法解决吗?

  2. 如果它可以解决,我是否以错误的方式使用Matlab Symbolic Toolbox? Matlab实际上可以解决它。

  3. 如果Matlab没有足够的能力来解决它,是否有其他工具可以解决非线性方程系统?

2 个答案:

答案 0 :(得分:3)

几乎可以肯定,不,这些在分析上是不可解决的。除非alpha和beta为1或0(或明显为1/2),否则方程式将等同于分析解决方案的过高,但如果不仔细观察我就无法确定。但是对于一般的真正的alpha,这是太多了。

是的,我知道电脑很大,速度快,功能强大。他们可以做任何事,对吧?但是看看当你试图解决这样的同时多项式方程时会发生什么。

例如,当您消除其中一个未知数时,两个未知数中的两个二次方程将减少到四阶方程。具有非常数系数的四阶多项式方程是可解的。但是你有四个方程式,每个方程式本质上都是二次方程式。 (每个等式中都有变量的乘积。)因此,如果你试图象征性地求解它们,那么它们中的4个将等价于八阶多项式。它将具有一般的非常数系数。并且我们知道5阶多项式或更高阶通常不具有解析解。所以,虽然你很幸运,也许是因为某些特殊的alpha& amp; beta,几乎可以肯定,没有这样的分析解决方案。

对于一般真正的alpha,情况更糟。根本没有期望存在解决方案。事实上,当你尝试时,它失败了。但是,嘿,更大的计算机可能会找到答案。对不起,但不是真的。

答案 1 :(得分:2)

您应该尝试使用Matlab的mupad命令。它打开了一个类似于Maple的符号编程环境,它比符号库更强大。如果你的方程式有解(甚至是一些虚构的解,或者如果它们的解决方案确实是特定的情况),那么符号环境肯定会找到它们。

试一试!

修改 看到@woodchips答案(这似乎比我知道得多!)你也可以尝试解决已知alpha beta范围的方程式。您可以假设它们具有哪些值并从范围迭代。我只是不知道它是否会起作用,这正是我在你的情况下会尝试做的事情。

仍然没有放弃尝试使用mupad,它可能会起作用(如果您做出假设,则可以使用空间,例如:assume alpha real类型的命令。只需查看帮助)