2015-07-16 2 views
-3
import re 
def get_number(element): 
    re_number = re.match("(\d+\.?\d*)", element) 

    if re_number: 
     return float(re_number.group(1)) 
    else: 
     return 1.0 

def getvalues(equation): 
    elements = re.findall("([a-z0-9.]+)", equation) 
    return [get_number(element) for element in elements] 


eqn = [] 
eqn_no = int(raw_input("Enter the number of equations: ")) 

for i in range(eqn_no): 
    eqn.append(getvalues(str(raw_input("Enter Equation %d: " % (i+1))))) 
print "Main Matrix: " 
for i in range((eqn_no)): 
    for j in range((eqn_no+1)): 
     print "\t%f" %(eqn[i][j]), 
    print 
print 
equation=[] 
equation=eqn 
for k in range((eqn_no-1)): 
    for i in range((k+1),eqn_no): 
     for j in range((eqn_no+1)): 
      if(eqn[i][j]!=0): 
       eqn[i][j]=eqn[i][j]-(eqn[k][j]*(equation[i][k]/eqn[k][k])) 



    print "Matrix After %d step: " %(k+1) 
    for i in range(eqn_no): 
      for j in range((eqn_no+1)): 
       print "\t%f"%(eqn[i][j]), 
       equation[i][j]=eqn[i][j]; 

      print 
    print 

для ввода:Вложенный список не работает должным образом

25x+5y+z=106.8 
64x+8y+z=177.2 
144x+12y+z=279.2 

выход:

Main Matrix: 
    25.000000 5.000000 1.000000 106.800000 
    64.000000 8.000000 1.000000 177.200000 
    144.000000 12.000000 1.000000 279.200000 

Matrix After 1 step: 
    25.000000 5.000000 1.000000 106.800000 
    0.000000 8.000000 1.000000 177.200000 
    0.000000 12.000000 1.000000 279.200000 

Matrix After 2 step: 
    25.000000 5.000000 1.000000 106.800000 
    0.000000 8.000000 1.000000 177.200000 
    0.000000 0.000000 1.000000 279.200000 

Но это должно быть как

Main Matrix: 
    25.000000 5.000000 1.000000 106.800000 
    64.000000 8.000000 1.000000 177.200000 
    144.000000 12.000000 1.000000 279.200000 

Matrix After 1 step: 
    25.000000 5.000000 1.000000 106.800000 
    0.000000 -4.80000 -1.56000 -96.208000 
    0.000000 -16.8000 -4.76000 -335.968000 

Matrix After 2 step: 
    25.000000 5.000000 1.000000 106.800000 
    0.000000 -4.80000 -1.56000 -96.208000 
    0.000000 0.000000 0.699999 0.759981 

Прежде всего это частичный код для решения корня из n числа уравнений с использованием Naive Guass elemina . Кто-нибудь знает, почему, черт возьми, это происходит? Почему нулевые части меняются, а другие нет? Я сделал этот код в C++, и он работает там отлично, но здесь у меня много проблем. Может быть, я новичок на питоне. Я использую Python 2.7 .....

+1

Что это должно быть делать? в простой английский ... –

+0

Мне сложно понять логику этой программы. В чем цель? – Dannnno

+0

ahhh его линейная алгебра Я думаю, теперь я начинаю понимать это –

ответ

3

Я думаю, что проблема заключается в задании equation = eqn. Поскольку eqn - это список, он является изменяемым и, таким образом, передается в качестве ссылки, когда вы назначаете mutable, переменная на самом деле содержит указатель на этот объект. Это означает, что equation и eqn - это тот же список.

Вы должны

from copy import deepcopy 
equation = deepcopy(eqn) 

Вам нужно deepcopy вместо copy, потому что у вас есть список списков, а также внутренний список должен быть скопирован.

+0

У меня будет список итераций матрицы и добавьте каждую итерацию в этот список, поэтому нам не нужно иметь несколько объектов, содержащих итерации. iterationList = list() then iterationList.append (eqn) – JRodge01

+0

Ваш блок "from copy import deepcopy equation = deepcopy (eqn)" не работает. Он получает синтаксическую ошибку. Измените этот блок. Я использую python 2.7 .... –

+0

@AhashanAlamSojib Это на самом деле работает, вы пишете все это в одной строке? – Oberix

1

Эта линия:

equation=eqn 

не делать то, что вы думаете, что он делает. Попробуйте это вместо:

import copy 
equation=copy.deepcopy(eqn) 

Назначение Python не операция копирования, а операция привязки. Линия у вас есть средства «связать имя equation на тот же объект, к которому eqn в настоящее время связан.»

Ваш алгоритм требует, чтобы equation и eqn являются различными объектами.

+0

Ваш блок «копия импорта» уравнение = copy.deepcopy (eqn) «не работает. Он получает синтаксическую ошибку. Измените этот блок. Я использую python 2.7 .... –

Смежные вопросы