Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2015 23:19:25

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Решение системы уравнений методом Гаусса

py.user.next
Где ты откопал такое?
Да не обратил внимание когда копировал исторический раритет. Спасибо за внимание к коду.
Varmint
Почему?
1. Потому что будет в сотни раз медленнее чем на C.
2. По сути решение линейной системы уже практически встроенная функция питона и нет смысла тратить на это время.
3. потому что наверняка то что вы напишете будет хуже того что уже встроено в язык.



Офлайн

#2 Окт. 8, 2015 13:22:05

Varmint
Зарегистрирован: 2015-07-23
Сообщения: 10
Репутация: +  -1  -
Профиль   Отправить e-mail  

Решение системы уравнений методом Гаусса

doza_and
потому что наверняка то что вы напишете будет хуже того что уже встроено в язык.
Конечно, будет. А по поводу скорости решения совсем не переживаю – я пишу для себя, а так как другие языки изучать даже до такого уровня не желаю, то довольствуюсь своим упрямством, ещё и с Вами им делюсь.

Пошаманил ещё немного, но всё равно считает неправильно. Может, кто-то видит ошибку?
matrix = [[1,1,1,6],
          [1,-1,2,5],
          [2,-1,-1,-3]]
def guass(a):
	x = [a[i][-1] for i in range(len(a))]
	for k in range(1,len(a)-1):
		for j in range(k,len(a)-1):
			m = a[j][k-1]/a[k-1][k-1]
			for i in range(len(a)):
				a[j][i] -= m*a[k-1][i]
			x[j] -= m*x[k-1]
	for i in range(len(a)-1,-1,-1):
		x[i]=a[i][len(a)]/a[i][i]
		if i != len(a)-1:
			for j in range(i+1,len(a)-1):
				x[i] -= a[i][j]*x[j]/a[i][i]
	print(x)
 

Офлайн

#3 Окт. 9, 2015 19:48:48

Varmint
Зарегистрирован: 2015-07-23
Сообщения: 10
Репутация: +  -1  -
Профиль   Отправить e-mail  

Решение системы уравнений методом Гаусса

Varmint
def myGauss(m):
    # eliminate columns
    for col in range(len(m[0])):
        for row in range(col+1, len(m)):
            r = [(rowValue * (-(m[row][col] / m[col][col]))) for rowValue in m[col]]
            m[row] = [sum(pair) for pair in zip(m[row], r)]
    # now backsolve by substitution
    ans = []
    m.reverse() # makes it easier to backsolve
    for sol in range(len(m)):
            if sol == 0:
                ans.append(m[sol][-1] / m[sol][-2])
            else:
                inner = 0
                # substitute in all known coefficients
                for x in range(sol):
                    inner += (ans[x]*m[sol][-2-x])
                # the equation is now reduced to ax + b = c form
                # solve with (c - b) / a
                ans.append((m[sol][-1]-inner)/m[sol][-sol-2])
    ans.reverse()
    return ans
Всё же хочу вернуться сюда. Как грамотно предотвратить или взять в свои руки ZeroDivisionError? (хочу увидеть действующее решение, а не объяснение try, except) Этот скрипт неплохо считает, когда в расширенной матрице совсем нигде нет нулей. Хотелось бы его доработать. Я уже битый час пытаюсь разобраться с тремя различными скриптами, но идеальный ‘слепить’ не получается.

Примеры можете найти тут.

Отредактировано Varmint (Окт. 9, 2015 19:58:01)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version