даже через код из примера
import numpy as np
def solve_with_rotation(m):
"""Solve system with rotation method.
:param m: numpy matrix
:return: None
"""
n = m.shape[0]
# forward trace
for i in range(n-1):
for j in range(i + 1, n):
c = m[i, i] / (m[i, i]**2 + m[j, i]**2) ** .5
s = m[j, i] / (m[i, i]**2 + m[j, i]**2) ** .5
tmp1 = m[i, :] * c + m[j, :] * s
tmp2 = m[i, :] * -s + m[j, :] * c
m[i, :] = tmp1
m[j, :] = tmp2
# check for non-singularity
if is_singular(m):
print('The system has infinite number of answers...')
return
# backward trace
x = np.matrix([0.0 for i in range(n)]).T
for k in range(n - 1, -1, -1):
x[k, 0] = (m[k, -1] - m[k, k:n] * x[k:n, 0]) / m[k, k]
# Display results
print('ответ :\n{:f}\n{:f}\n{:f}'.format(x.item(0), x.item(1), x.item(2)))
def is_singular(m):
"""Check matrix for nonsingularity.
:param m: matrix (list of lists)
:return: True if system is nonsingular
"""
return np.any(np.diag(m) == 0)
m = np.matrix(
'2 -9 5 -4;'
'1.2 -5.3999 6, 0.6001;'
'1 -1 -7.5 -8.5'
)
print(m)
solve_with_rotation(m)
вывод
[[ 2. -9. 5. -4. ]
[ 1.2 -5.3999 6. 0.6001]
[ 1. -1. -7.5 -8.5 ]]
ответ :
0.000000
1.000000
1.000000