跳转到内容

化学工程过程导论/代数方程组

来自维基教科书,开放的书籍,开放的世界

什么是方程组?

[编辑 | 编辑源代码]

一个方程组是任意数量的方程,包含多个未知数,每个方程中的同一个未知数必须具有相同的值。你可能过去已经处理过大量的线性方程组,它们有许多求解方法。线性方程组的形式如下:

线性方程组

等等,其中 a 和 b 是常数。

任何非线性的方程组都是非线性的。一般来说,非线性方程比线性方程更难求解,但有一些技巧可以用于求解一些特殊情况的精确解。对于其他情况,可能没有解(这甚至对于线性方程组也是正确的!),或者这些解可能只能使用类似于单变量方程的数值方法来获得。正如你可能想象的,这些方法在多变量方程组中比在单个方程中要复杂得多,所以建议你在方程变得过于复杂时使用计算机程序。

可解性

[编辑 | 编辑源代码]

一个方程组是可解的,当且仅当它只有有限数量的解。当然,这通常是你想要的,因为你希望结果能够在某种程度上预测你正在设计的任何东西。

以下是判断一组方程是否肯定无法求解,或者仅仅是可能无法求解的方法。

方程组的可解性:

  1. 如果一组 n 个独立的方程有 n 个未知数,则该方程组有有限个(可能为 0)解。
  2. 如果一组 n 个独立的方程有少于 n 个未知数,则该方程组有无限个解。
  3. 如果一组 n 个独立或相关的方程有多于 n 个未知数,则该方程组没有解。
  4. 方程组中的任何相关方程都不计入 n。

请注意,即使一个方程组是可解的,也不意味着它有解,它只是意味着没有无限个解。

求解方程组的方法

[编辑 | 编辑源代码]

正如你可能记得的,求解线性方程组有很多方法。这些方法包括

  • 线性组合:将一个方程的倍数加到其他方程中,以消除一个变量。这是高斯消元法的基础,它是在计算机上使用的较快的方法之一。
  • 克莱姆法则,它涉及系数矩阵的行列式。
  • 代入法:用一个方程解出一个变量,然后将得到的表达式代入所有其他方程中,从而消除你所解出的变量。

最后一个方法,代入法,在求解一组非线性方程时最为有用。线性组合只能在所有方程中出现相同类型的项时使用(除非是线性方程组,否则这种情况不太可能发生),并且对于非线性方程组没有通用的克莱姆法则类似方法。但是,代入法仍然同样有效。让我们看一个简单的例子。

非线性方程组的代入法示例

[编辑 | 编辑源代码]

示例:

求解以下方程组,得到 X 和 Y 的值

解:我们希望使用代入法,因此我们应该问:哪个变量更容易解出?。在本例中,X(在顶部方程中)最容易解出,所以我们这样做,得到

代入底部方程得到

可以用代入法解此方程。

。代入后得到

注意
为了使此方法有效,必须消除所有 Y。当同一个变量(或一组变量)以相同形式出现时,可以采取类似操作。如果它不是每次都以相同形式出现,例如,如果方程是 ,则该方法不会足够简化计算以使其值得进行。

通过因式分解求解

因此,由于 ,我们得到了 Y 的四个解!

但是请注意,根据这个系统来源的不同,负解可能没有意义,所以在继续之前要三思!

现在让我们考虑所有这些解。由于我们已经得到了 Y,现在可以求解 X

注意
同样,X 的值可能只有正值才有意义。如果 X 和 Y 的值只有正值才有意义,那么对我们来说,唯一有意义的解是 ,因为 会导致 X 的值是负数。

请注意,即使像这样的简单系统也有大量的解,实际上,一些系统会有无穷多个解,例如

数值方法求解方程组

[编辑 | 编辑源代码]

在多个变量中,有一些方法与上一节中演示的某些方法等价。它们中许多在最纯粹的形式中涉及使用微积分(实际上,泰勒方法也是如此),但与之前一样,它们可以在牺牲一定精度的情况下简化为近似代数形式。

如果你可以显式地将所有方程都解出同一个变量(例如,y),那么你可以猜测除一个变量以外的所有变量,然后比较每个方程中得到的y值之间的差异。这种方法完全是暴力破解,因为如果方程多于两个,就需要使用这种方法猜测除一个变量以外的所有变量,而且无法判断下一个猜测应该是什么。从无到有地尝试猜测多个变量,即使借助计算机,也会变得很麻烦。

由于这种方法存在许多问题,因此不再详细讨论。

不动点迭代

[编辑 | 编辑源代码]

同样,不动点迭代的多变量形式非常不稳定,通常可以认为它不会起作用。加权迭代也更加困难。

循环方法

[编辑 | 编辑源代码]

这是一种确实有效的方法,它与任何单变量方法都有所不同。在循环方法中,需要能够针对每个方程解出唯一的变量,然后你将基本上以循环的方式进行,从一个变量(理想情况下是单个变量,例如y)的初始猜测开始,然后计算所有方程,直到你返回到具有新值的原始变量y'。如果结果与你开始时的猜测相同,则无需进行新的猜测。如果结果与你开始时的猜测不同,则需要根据结果的趋势进行新的猜测。

注意
我指的是什么趋势?如果你有一个行为良好的系统,y的增加将始终导致y'的增加或减少,因此你可以利用这一点来查看你需要调整原始猜测的方向。不要尝试将y'的值用作新的猜测!

更具体地说,以下是一个你可以使用的算法

  1. 将所有方程解出不同的变量
  2. 对一个变量(或评估第二个变量所需的多个变量)进行猜测,如果有多个变量,则会变得更加困难,因此建议使用其他方法。
  3. 遍历所有方程,直到最终重新计算你最初猜测的变量(或所有变量)。注意结果是高于还是低于你的猜测。
  4. 对变量进行新的猜测。再次遍历循环。
  5. 经过这两个猜测,我们知道增加猜测会增加还是减少重新计算的值。因此,我们可以推断出需要增加还是减少猜测才能使重新计算的值等于猜测。
  6. 适当地继续猜测,直到重新计算的值等于猜测。

这种技术在工程计算中经常需要,因为它们是基于数据而不是基于数量的显式方程。然而,正如我们将看到的,它可能很难收敛,而且这种方法不太方便手工操作(尽管它是最可靠的现实方法)。但是,它非常适合将猜测输入计算机或电子表格,直到它起作用为止。

示例:

求解以下方程组

首先,我们需要将其中一个方程解出x,我们选择第一个方程

  • 首先,我们进行一个猜测:y = 0.1 然后从第一个方程得到x = 2.303
  • 将此代回第二个方程,你将得到y' = 0.834。重新计算的值太高了。
  • 现在对y进行新的猜测:例如,y = 0.5。这将导致x = 0.6931
  • 代回第二个方程得到y' = -0.3665。重新计算的值太低了。

注意
现在我们知道增加猜测会减少重新计算的值y',反之亦然。由于y'的第二个值太低,这意味着猜测需要小于0.5;同样,由于第一个y'太高,这意味着猜测需要大于0.1。

  • 现在我们尝试y = 0.25。
  • 这将导致从第一个方程得到x = 1.386,从第二个方程得到y' = 0.326。太高了,所以我们需要增加猜测。
  • 我们猜测y = 0.3
  • 这将导致x = 1.204,因此y' = 0.185,这太低了,表明猜测的值太高了。
  • 猜测y = 0.28,因此x = 1.273,y'= 0.241。因此,猜测仍然太高了。
  • 猜测y = 0.27,因此x = 1.309,y' = 0.269。因此,我们现在已经收敛

循环方法与电子表格

[编辑 | 编辑源代码]

我们可以通过将猜测过程编程到电子表格中来更轻松地进行。首先设置三行,如下所示

     A         B      C
1  y guess     x      y'
2           =-ln(A2) =ln(B2)

在B2中,我们放入解出x的第一个函数,在C2中,我们放入解出y的第二个函数。现在,我们只需要在A2中输入猜测,直到C2中的值与我们的猜测相同(电子表格会自动为你计算B2和C2)。为了使操作更加轻松,将行 放入单元格D2中。由于我们想要y'等于y,只需继续猜测,直到D2中的值尽可能接近零即可。

作为一个更深入的示例(手工操作将非常困难),请考虑以下方程组

示例:

求解

为了使这种方法有效,我们只需要解出每个方程的唯一变量,表达式不需要是显式的!以下将起作用(假设 X 是一个正值),这将在稍后变得明显

现在我们需要问:哪个变量最适合作为迭代过程的初始猜测?在本例中,最好的答案是 T,因为根据这个猜测,我们可以从方程 3 计算出 P,然后从方程 2 计算出 X,最后从方程 1 计算出 T 的新猜测,并使用这个新值作为我们旧猜测的度量。

注意
通常,您希望从允许您仅使用一个猜测来计算第二个值的变量开始循环。尝试在求解之前代数操作您的方程,以便这种情况发生,因为我们希望尽可能避免对多个变量进行猜测。

让我们将其编程到电子表格中

      A                B           C                        D                                        E
1   T guess            P           X                        T'                                    T' - T guess
2                   =0.1*A2    =sqrt(A2^3 - B2) =(2*B2^2*C2^2 - 3*exp(-C2/A2))/(A2 - 2)          =D2 - A2

一旦所有这些都编程好,您就可以像以前一样输入猜测,最终的结果是

多变量牛顿法

[edit | edit source]

注意
如果您不知道如何求矩阵的逆、加矩阵或乘矩阵,则可以跳过本节。

牛顿法有一个多变量扩展,非常有用。它收敛很快,就像单变量版本一样,缺点是,至少手工操作起来很繁琐。但是,计算机可以轻松地编程来完成这项工作,并且该方法不仅限于可以像循环方法那样明确求解的系统。此外,与循环方法不同,牛顿法实际上会给出下一组值作为猜测。

该方法的工作原理如下

1. 将所有方程解为 0,即让 对于系统中的所有函数 F。

2. 猜测所有变量的值,并将它们放入矩阵 (X) 中。计算所有函数 F 在此猜测时的值,并将它们放入矩阵 (F) 中。

3. 我们需要找到对函数在猜测值处的偏导数的估计,这将在后面介绍。

4. 构造一个矩阵(成为雅可比矩阵)如下:创建一个具有 n 行和 n 列的空矩阵,其中 n 是方程数或变量数(记住,可解系统通常具有与变量数相同的方程数)。然后用变量名称标记列,用函数名称标记行。它应该看起来像这样

5. 将适当的偏导数放在标记的位置。例如,将来自函数 1 关于 x1 的偏导数放在第一个位置。

6. 一旦雅可比矩阵完全构建,找到矩阵的。包括这个在内的多个计算机程序可以做到这一点(警告:未经测试的软件,使用风险自负!)。或者,如果您知道如何操作,您可以手动进行。

7. 用逆雅可比矩阵乘以转置函数矩阵 F(将其变成列矩阵),然后从 X 的转置(再次将其变成列矩阵)中减去它

多变量牛顿法公式

8. 结果是您的下一个猜测。重复此操作,直到收敛。

估计偏导数

[edit | edit source]

偏导数在最基本意义上,是当除一个变量外所有变量保持不变时,具有多个变量的函数的切线的斜率。计算它的方法是

现在我们需要保持井井有条,所以让我们引入一些符号

是函数 i 对变量 j 的偏导数。

要计算它

  1. 根据你的猜测计算一个函数 F。
  2. 将 *一个* 变量 x 增加一个非常小的值 。**保持所有其他变量不变**。
  3. 重新计算 F 在修改后的猜测值下,得到 F'。

则函数 F 关于 x 的偏导数为

牛顿法使用示例

[edit | edit source]

让我们回到我们的典型示例

**步骤 1**:我们需要将每个方程求解为零

**步骤 2**:让我们猜测 x = 2.303 且 y = 0.1(选择满足其中一个方程的猜测是一个好主意)。 那么

F 在此猜测下的值为 ,因此根据定义

**步骤 3-5**:计算偏导数 让我们选择 。 那么

类似地,可以计算出 F2 的偏导数为

因此,该系统的雅可比矩阵为

步骤 6:可以使用任何你所知的方法来求解该矩阵的逆矩阵

步骤 7:F 的转置矩阵为

因此,通过矩阵乘法,可以得到以下修正矩阵

因此,应该从 x 中减去 1.3682,从 y 中减去 0.1418,得到下一个猜测值

注意,这个结果比我们最初的猜测更接近真实解。但是,由于需要进行大量繁琐的矩阵代数运算,这种方法通常更适合计算机处理。

华夏公益教科书