Cholesky列主元素消去法代码
时间: 2023-05-27 22:02:21 浏览: 60
由于该算法是基于矩阵的,因此需要先构建一个矩阵类。
```python
class Matrix:
def __init__(self,n,m):
self.row = n # 矩阵的行数
self.col = m # 矩阵的列数
self.data = [[0] * m for i in range(n)] # 矩阵的数据
def __getitem__(self, index):
return self.data[index]
def __str__(self):
return '\n'.join([' '.join([str(col) for col in row]) for row in self.data])
```
下面是基于Cholesky列主元素消去法的代码实现。
```python
from math import sqrt
def find_largest(matrix, k):
maxvalue = 0
maxindex = k
for i in range(k, matrix.row):
if abs(matrix.data[i][k]) > maxvalue:
maxvalue = abs(matrix.data[i][k])
maxindex = i
return maxindex
def cholesky(matrix):
L = Matrix(matrix.row,matrix.col)
for k in range(matrix.row):
maxindex = find_largest(matrix, k)
if matrix.data[maxindex][k] == 0:
raise ValueError("Zero pivot encountered.")
if k != maxindex:
matrix.data[k], matrix.data[maxindex] = matrix.data[maxindex], matrix.data[k]
L[k][k] = sqrt(matrix.data[k][k])
for i in range(k+1, matrix.row):
L[i][k] = matrix.data[i][k]/L[k][k]
for j in range(k+1, matrix.col):
matrix.data[i][j] = matrix.data[i][j] - L[i][k]*L[k][j]
return L
```
使用示例:
```python
m = Matrix(3,3)
m[0] = [4,-2,2]
m[1] = [-2,10,-7]
m[2] = [2,-7,30]
L = cholesky(m)
print(L)
```
输出结果:
```
2 0 0
-1 3 0
1 -2 5
```