2016-04-01 9 views
0

を使用して、3つの変数:線形方程式を解く。私はこの1つのような連立方程式を表示し、解決することができなければならないクラスを必要としている現在だnumpyの

| 2x-4y+4z=8 | 
| 34x+3y-z=30 | 
| x+y+z=108 | 

私はクラスを書くために良いアイデアだと思いました私はこの現在書かれている

/2 -4 4\ 
|34 3 -1| 
\1 1 1/ 

class mymatrix(object): 
    def __init__(self): 
     o11 = None 
     o12 = None 
     o12 = None 
     o21 = None 
     o22 = None 
     o23 = None 
     o31 = None 
     o32 = None 
     o33 = None 

    def set(row, column, value): 
     string = 'o'+str(row)+str(column)+' = '+str(value) 
     exec(string) 

    def solve(self, listwithrightsidethings): 
     #Here I want to solve the system. This code should read the three  
     #values out of the list and solves the system It should return the 
     #values for x, y and z in a tuple: (x, y, z) 
     pass 
マトリックスのようなオブジェクトにeqationシステムの左側のものを変換するために、ここではこのシステムの自作-行列であります

私は、線形代数のpronlemsを解決するためのモジュールを検索し、numpyが見つかりました。私はマニュアルを検索しましたが、私の問題の私の解決策は全く見つかりませんでした。

functoinはどうすれば書けますか?

編集:

のpythonこの

/o11, o21, o31\ 123 
|o21, o22, o32| = 456 
\o31, o32, o33/ 789 

編集のようにそれをinterprete必要があります:私は正確に3 VARS wがそれを解決し、あなたが使用することができますタプル

答えて

8

としてそれを返すようにしたいですnumpy.linalg.solve

import numpy as np 
a = np.array([[2, -4, 4], [34, 3, -1], [1, 1, 1]]) 
b = np.array([8, 30, 108]) 
x = np.linalg.solve(a, b) 
print x # [ -2.17647059 53.54411765 56.63235294] 
+0

xをタプルに変換できますか? –

+1

確かに、ちょうど 'tuple(x)'を使用してください – Zaphod

+0

ありがとう、that worksfine!あなたは本当に私の一日を作った! –

5
import numpy as np 

a = np.array([[2, -4, 4], [34, 3, -1], [1, 1, 1]]) 
b = np.array([8, 30, 108]) 
try: 
    x = np.linalg.solve(a, b) 
except LinAlgError: 
    x = np.linalg.lstsq(a, b)[0] 
関連する問題