1

我正在使用带有求解功能的Matlab Symbolic Toolbox并尝试求解 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替换beta0.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没有足够的能力来解决它,还有其他工具可以解决非线性方程组吗?

4

2 回答 2

3

几乎可以肯定,不,这些不是分析可解的。除非 alpha 和 beta 是 1 或 0(或者显然是 1/2),否则这些方程将等价于解析解的阶数太高,尽管如果不仔细观察我无法确定这一点。但是对于一般的真实阿尔法,这做的太多了。

是的,我知道计算机体积大、速度快、功能强大。他们可以做任何事,对吧?但是看看当你尝试解决这样的联立多项式方程时会发生什么。

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

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

于 2012-10-10T12:56:34.353 回答
2

你应该试试 Matlab 的mupad命令。它打开了一个类似于 Maple 的符号编程环境,比符号库强大得多。如果你的方程有解(即使是一些虚构的,或者如果它们有解是非常具体的情况),那么符号环境肯定会找到它们。

试试看!

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

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

于 2012-10-10T09:18:02.067 回答