Форум сайта python.su
py.user.nextДа не обратил внимание когда копировал исторический раритет. Спасибо за внимание к коду.
Где ты откопал такое?
Varmint1. Потому что будет в сотни раз медленнее чем на C.
Почему?
Офлайн
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Всё же хочу вернуться сюда. Как грамотно предотвратить или взять в свои руки ZeroDivisionError? (хочу увидеть действующее решение, а не объяснение try, except) Этот скрипт неплохо считает, когда в расширенной матрице совсем нигде нет нулей. Хотелось бы его доработать. Я уже битый час пытаюсь разобраться с тремя различными скриптами, но идеальный ‘слепить’ не получается.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
Отредактировано Varmint (Окт. 9, 2015 19:58:01)
Офлайн