Найти - Пользователи
Полная версия: Решение системы уравнений методом Гаусса
Начало » Центр помощи » Решение системы уравнений методом Гаусса
1 2
doza_and
py.user.next
Где ты откопал такое?
Да не обратил внимание когда копировал исторический раритет. Спасибо за внимание к коду.
Varmint
Почему?
1. Потому что будет в сотни раз медленнее чем на C.
2. По сути решение линейной системы уже практически встроенная функция питона и нет смысла тратить на это время.
3. потому что наверняка то что вы напишете будет хуже того что уже встроено в язык.
Varmint
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)
 
Varmint
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) Этот скрипт неплохо считает, когда в расширенной матрице совсем нигде нет нулей. Хотелось бы его доработать. Я уже битый час пытаюсь разобраться с тремя различными скриптами, но идеальный ‘слепить’ не получается.

Примеры можете найти тут.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB