Chapter 2. Solving Linear Equations (Part 1)

2.1 vectors and linear equations

线性代数的核心问题是求解方程组,这些方程是线性的。所谓线性,即未知量只做加减和数乘。
例子:

x2y=13x+2y=11

从以下2种角度来理解这个方程:
(1)row picture(行图):
每个方程可以用一条直线表示,那么得到两条直线,如果直线有交点P,那么交点P的坐标(x, y)同时满足两个方程,即为这个方程组的解。

(2)column picture(列图):
从线性组合的角度来理解这个方程组,即

x[13]+y[22]=[111]

这里 方程组的解就是找到 合适的系数,使得例子中的2个向量经过线性组合后,得到方程组右边的向量。

这里令 A=[1322]
我们把A称作”coefficient matrix”。
所以我们可以把这个方程组写成矩阵方程的形式 Ax=b

[1322][xy]=[111]

同样的,假设扩展到三个未知量,三个方程的方程组。在有解的情况下,我们可以理解为三条空间直线交于一点P,或者(x,y,z)三个系数使得三个列向量的线性组合为方程组等号右边的列向量。
如果扩展到四个未知量,四个方程的方程组,再从row picture的角度就难于理解了,因为我们不知道四维空间的”物体”是什么样的,但是从column picture的角度,我们仍然可以理解为四个四维向量的线性组合得到方程组等号右边的四维向量。

2.2 the idea of elimination

上面小节讲述了如何理解向量和线性方程组的关系,但是如何去求解呢?
这就要引出消元的思想了。
还是用上面的例子:
消元以前:

x2y=13x+2y=11

我们从第二个方程里面减去第一个方程的3倍,得到
消元以后:
x2y=18y=8

这样一来,第二个方程就只有一个未知量了,十分容易算出来y=1,所以再把y=1代入第一个方程,就又解出了x=3。
通过观察可以发现,消元以后的到新方程组,它的系数矩阵有一个特点: 上三角结构
[1028]

在这里我们先要定义几个概念:
pivot(主元):first nonzero in the row that does the elimination
multiplier(倍数,乘数):divided by pivot
所以,在这个例子中,主元就是在主对角线上的1和8,倍数是3(=3/1)。

那么如果是三个未知量,三个方程的情况下,我们是不是也可以经过运算,得到上三角的结构,然后从底下开始求解,往上代入?

这样一来,不管方程组有多大,都可以拍拍胸脯表示宝宝不怕了呢!
可是现实情况真的如此吗?欲知后事如何,请听下回分解!
(开个玩笑啦!)

现在我们就要讨论一下消元法失效的情况。
(1)情况1:消元法永远失效/方程组没有解

x2y=13x6y=11

按着消元的步骤我们得到;
x2y=10y=11

但是没有y能够满足0y=11,所以这个方程就没有解。
这里,这个系数矩阵只有一个主元。

(2)情况2:消元法暂时失效/方程组有无穷多解

x2y=13x6y=3

还是经过消元得到:
x2y=10y=0

任何的y都可以满足与第二个方程,所以对应有任意的x,所以就有无穷多个解。
这里,这个系数矩阵也只有一个主元。

(3)情况3:消元法暂时失效/需要经过行交换才能继续求解

0x+2y=43x2y=5

这里我们发现,第一个主元的位置是0,但是主元不能为0,所以交换方程的上下位置,得到:
3x2y=50x+2y=4

这样就可以求解了。

总结如下:
奇异方程组:主元数量 方程的数量,结果是无解或者无穷解;
非奇异方程组:主元数量=方程的数量,结果是有唯一解。

在这一小节我们介绍了消元法,并归纳了消元法求解方程组可能会碰到的几个问题及处理措施。
现在我才可以拍胸脯保证,在面对不管多大的线性方程组,我都可以解出来。

### 回答1: 我可以给你一个解决线性方程的代码例子:#include <iostream>using namespace std;int main(){ int a, b, c; // a, b, c are coefficients of the equation int x, y; // x and y are the variables of the equation cout << "Enter the coefficients a, b, c of the equation: "; cin >> a >> b >> c; x = (c - b) / a; y = (a * x) + b; cout << "The solution of the equation is x = " << x << " and y = " << y << endl; return 0; } ### 回答2: 当然可以!下面是一个用Python编写的解线性方程组的代码示例: ```python import numpy as np def solve_linear_equations(coefficients, constants): try: solution = np.linalg.solve(coefficients, constants) return solution except np.linalg.LinAlgError: return "无解或有无限多解" # 示例方程组为: # 2x + 3y = 8 # 4x - 5y = -7 # 系数矩阵 coefficients = np.array([[2, 3], [4, -5]]) # 常数矩阵 constants = np.array([8, -7]) # 求解方程组 result = solve_linear_equations(coefficients, constants) # 输出解 print("解为:") print("x =", result[0]) print("y =", result[1]) ``` 以上代码使用了NumPy库中的函数`np.linalg.solve()`来求解线性方程组。在示例方程组中,使用了一个2x2的系数矩阵和一个常数矩阵。函数`solve_linear_equations()`返回方程组的解(如果有解),如果方程组无解或有无限多解,则返回相应的提示。 运行代码后,输出的解为: ``` 解为: x = 3.0714285714285716 y = 0.8571428571428568 ``` 这说明方程组的解为x ≈ 3.071和y ≈ 0.857。 ### 回答3: 当然可以,以下是一个用Python编写的解线性方程组的代码示例: ``` import numpy as np # 创建系数矩阵A和常数向量b A = np.array([[2, 3], [4, -1]]) b = np.array([9, 5]) # 求解线性方程组 Ax = b x = np.linalg.solve(A, b) # 输出解 print("解为:x =", x) ``` 这个代码示例使用了NumPy库中的`linalg.solve()`函数来求解线性方程组。首先,我们创建了一个2x2的系数矩阵A和一个长度为2的常数向量b。然后,使用`solve()`函数解方程组Ax = b,并将解存储在变量x中。最后,输出解x的值。 此代码示例可以用于解任意大小的线性方程组。只需将系数矩阵A和常数向量b替换为相应的值即可。这样,您可以使用该示例来解决其他线性方程组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值