Слау онлайн калькулятор метод крамера: Онлайн калькулятор. Решение систем линейных уравнений. Метод Крамера

Python для биоинформатики: расчет по правилу Крамера

Расчет по правилу Крамера

У нас есть домашнее задание по алгебре, которое включает в себя использование правила Крамера для решения не только систем 2 x 2, но и 3 x 3. Это кажется глупым, так как этот метод является излишним для 2 x 2 и никогда не будет использоваться для 4 x 4 или больше.

(Обратите внимание на статью в Википедии, начните примерно с середины, где написано «Явные формулы для малых систем».) правило, довольно простое. Речь идет о том, чтобы усложнить простую задачу, впихнув в нее много арифметических операций. И для меня это симптом больших трудностей с математическим образованием, поскольку я сталкиваюсь с этим через своего сына. Компьютеры гораздо лучше умеют считать, чем люди. Просто глупо мучить студентов арифметикой. Если вы хотите сделать что-то сложное, почему бы не вывести правило Крамера?

Итак, я решил написать решатель для систем 3 x 3 на Python. Я бы не сказал, что он еще полностью отлажен, поэтому дайте мне знать, если у вас возникнут проблемы. В показанном примере я получил тот же ответ, что и этот онлайн-калькулятор.

Первый сегмент кода содержит уравнения, явно введенные в виде массива. Я уверен, что вы знаете, как изменить его для чтения ввода из файла.

test.py


 импортировать numpy как np 
import Cramer

def test_Cramer():
L = [2, 3, 0, 5,
1, 1, 1, 3,
2,-1, 3, 7]
A = np.array(L)
A.shape = (3,4)
result = Cramer.solve(A)
if result:
x,y,z = результат
print 'solution'
print 'x =', x
print 'y =', y
print 'z =', z, '\n'
Cramer.check(A,x,y,z)

test_Cramer()

Вывод выглядит следующим образом:

7
1
 > Python test.py 
решить
[[ 2 3 0 5]
[ 1 1 1 3]
[ 2 -1 3 7]]

вычислить 3 x 3 det
[[ 2 3 0]
[ 1 1 1]
[ 2 - 1 3]]
D = 5

вычислить 3 x 3 det из
[[ 5 3 0]
[ 3 1 1]
[ 7 -1 3]]
Dx = 14

вычислить 3 x 3 det из
[[2 5 0]
[1 3 1]
[2 7 3]]
Dy = -1

вычислить 3 x 3 det от
[[ 2 3 5]
[ 1 1 3]
[ 2 -1 7]]
Dz = 2

решение
x = 2,8
y = -0,2
z = 0,4

проверка
ряд 0 = [2 3 0 5]
2,0*2,8 + 3,0*-0,2 + 0,0*0,4 = 5,0

ряд 1 = [1 1 1 3] 1
1
*2,8 + 1,0*-0,2 + 1,0*0,4 = 3,0

ряд 2 = [2 -1 3 7]
2,0*2,8 + -1,0*-0,2 + 3,0*0,4 = 7,0

6 . py


 import numpy as np 

def det2x2(A, v=False):

if v: print 'compute 2 x 2 det of'
if v: print A
assert A.shape == (2,2)
return A[0][0]*A[1][1] - A[0][1]*A[1][0]

def det3x3( A):
print 'вычислить 3 x 3 det of'
print A
assert A.shape == (3,3)
a,b,c = A[0]
c1 = a * det2x2(A[1: 3,[1,2]])
c2 = b * det2x2(A[1:3,[0,2]])
c3 = c * det2x2(A[1:3,[0,1]])
return c1 - c2 + c3

defsolve(A):
print 'solve'
print A, '\n'
assert A.shape == (3,4)
D = det3x3(A[:,:3 ])
напечатать 'D = ', D, '\n'
, если D == 0:
напечатать 'нет решения'
вернуть
Dx = det3x3(A[:,[3,1,2]])
напечатать 'Dx = ', Dx, '\n'
Dy = det3x3(A[:,[0 ,3,2]])
print 'Dy = ', Dy, '\n'
Dz = det3x3(A[:,[0,1,3]])
print 'Dz = ', Dz, '\n '
return Dx*1.0/D, Dy*1.0/D, Dz*1.0/D

def check(A,x,y,z):
print 'check'
for i,r in enumerate(A):
print 'row', i, '=', r
pL = list()
for coeff,var in zip(r[:3],(x,y,z)):

c = str(round(coeff ,2))
v = str(round(var,2))
pL.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

© 2015 - 2019 Муниципальное казённое общеобразовательное учреждение «Таловская средняя школа»

Карта сайта