🥥MATLAB与Python数值计算
MATLAB | Python | 数值计算 | 线性方程 | 矩阵 | 雅可比法 | 最小二乘解 | 非线性方程 | 插补 | 微积分 | 非线性常微方程 | 线性规划 | 二次规划 | 非线性规划
使用直接方法求解线性系统
解线性系统方法
矩阵分解技术
迭代和最小二乘法解线性系统
迭代方法
雅可比法
给定方程的线性系统:
从上面的等式可以得出:
雅可比法是一种迭代方法,它从对解的初始猜测开始。 然后,使用迭代中的解来找到迭代中系统解的近似值。 完成如下:
通常,迭代中的解可以表示为:
对于任意,当时,雅可比迭代停止。
**示例1,**为线性系统编写雅可比方法的前三个迭代:
从零向量开始
解决
我们写成:
- 第一次迭代 
- 第二次迭代 
- 第三次迭代$k=2$ 
**示例2,**雅可比方法将用于求解线性系统:
MATLAB代码
function x = JacobiSolve(A, b, Eps)
	 n = length(b) ;
	 x0 = zeros(3, 1) ;
	 x = ones(size(x0)) ;
	 while norm(x-x0, inf) ≥ Eps
		 x0 = x ;
		 for i = 1 : n
			 x(i) = b(i) ;
			 for j = 1 : n
				 if j , i
				 x(i) = x(i) - A(i, j)*x0(j) ;
			 end
		 end
		 x(i) = x(i) / A(i, i) ;
	 end>> A = [-5 1 -2; 1 6 3; 2 -1 -4] ;
>> b = [13; 1; -1] ;
>> JacobiSolveLinSystem(A, b)
-2.0000
1.0000
-1.0000使用Python,功能JacobiSolve具有以下代码:
def JacobiSolve(A, b, Eps):
 import numpy as np
 n = len(b)
 x0, x = np.zeros((n, 1), 'float'), np.ones((n, 1), 'float')
 while np.linalg.norm(x-x0, np.inf) ≥ Eps:
	 x0 = x.copy()
	 for i in range(n):
		 x[i] = b[i]
		 for j in range(n):
			 if j != i:
				 x[i] -= A[i][j]*x0[j]
		 x[i] /= A[i][i]
 return x通过调用函数JacobiSolve求解给定的线性系统,我们获得:
In [3]: A = np.array([[-5, 1, -2], [1, 6, 3], [2, -1, -4]])
In [4]: b = np.array([[13], [1], [-1]])
In [5]: x = JacobiSolve(A, b, Eps)
In [6]: print(’x = \\n’, x)
Out[6]:
x =
[[-2. ],
[ 1.00000002],
[-1.00000002]]最小二乘解
线性系统解中的病态和正则化技术
解非线性方程组
数据插补
微分和积分
解非线性常微分方程
常微分方程的非标准有限差分法
线性规划和二次规划
非线性规划
最优控制问题
Last updated
Was this helpful?