2016-07-28 20 views
2

私は以下のテストプログラムを持っています。私のクエリは二重に折りたたまれています:(1)ソリューションがゼロを与える方法と(2)このx2= np.where(x > y, 1, x)変数の種類を変数に使用するのが適切ですか? Scipyに制約のある最適化ルーチンがありますか?Pythonで連立方程式を解く

a = 13.235 
b = 70.678 

def system(X, a,b): 
    x=X[0] 
    y=X[1] 

    x2= np.where(x > y, 1, x)  

    f=np.zeros(3) 
    f[0] = 2*x2 - y - a 
    f[1] = 3*x2 + 2*y- b 


    return (X) 


func= lambda X: system(X, a, b) 

guess=[5,5] 
sol = optimize.root(func,guess) 
print(sol) 

編集:(2A)ここx2= np.where(x > y, 1, x)条件に、二つの式は、1つの方程式となります。 (2b)別のバリエーション要件は、x2= np.where(x > y, x^2, x^3)です。私もこれらの2つについてコメントしましょう。ありがとう!

+0

@erip、LPアルゴリズムは、非線形方程式を扱うことができません。それは本当ですか? 私の典型的な方程式は代表的なものです。彼らは実際にログとexp形式です。 – learner123

答えて

1

最初に、あなたのsystemの機能は、あなたがreturn Xの代わりにreturn fであるため、同一性があります。リターンはあなたがより良い

f = np.array([2*x2 - y - a, 3*x2 + 2*y- b]) 

次の機能を持っていたXと同じ形状である必要があり、書かれた通りであり、X = Yを不連続性を持っており、これは初期推定のための問題であることがあることが原因となっています(5,5)の初期推測値を(5,6)に設定することで、解[13.87828571,14.52157143]を素早く見つけることができます。

第2の例では、再び[5,5]の初期推測を使用すると、[5,6]を使用して不連続性の問題が発生し、[2.40313743,14.52157143]の解が得られます。ここで

は私のコードです:

import numpy as np 
from scipy import optimize 

def system(X, a=13.235, b=70.678): 
    x = np.where(X[0] > X[1], X[0]**2, X[0]**3) 
    y=X[1]  
    return np.array([2*x - y - a, 3*x + 2*y - b]) 

guess = [5,6] 
sol = optimize.root(system, guess) 
print(sol) 
関連する問題