2016-05-19 8 views
0

なぜ正しく計算されないのですか? 正しい解はc = 25.672、b2 = 10.24です。 ここでソルバは入力値を返します。 助けてくれてありがとう!2つの複素方程式のnumpyにおける非線形根の発見

from numpy import * 
from scipy.optimize import * 

#UNITS: 
psi = 6895. 
ft=0.3048 
inch=0.0254 
psisqin=psi*sqrt(inch) 

#DATA: 
K_Ict=1500.*psisqin 
K_Icb=1700.*psisqin 
sigma_2=6700.*psi 
sigma_1=6000.*psi 
sigma_3=7200.*psi 
hp=105.*ft 
P = 6500*psi 

def f(p): 
    b2,c= p 
    F1 = sqrt(pi*c)*(K_Icb-K_Ict)/2 - ((sigma_2-sigma_1)*sqrt(c**2-b2**2) - (sigma_3-sigma_1)*sqrt(c**2-(hp-b2)**2)) 
    F2 = sqrt(pi)*(K_Icb+K_Ict)/(2*sqrt(c)) - ((sigma_2-sigma_1)*arcsin(b2/c) + (sigma_3-sigma_1)*arcsin((hp-b2)/c) - (sigma_2+sigma_3-2*P)*pi/2) 
    return (F1,F2) 

b2, c = fsolve(f,(16.002,30)) 
print b2, c 

答えて

0

全くわからない、なぜ私はあなたが範囲外のルーツの一つを残しているので、それはだと思うので、それはちょうどあなたが与えた境界を返します。本当の理由は、根を見つけるためにどのような方法が使用されているかによって異なります。 documentationの状態:

fsolveは、MINPACKのハイブリッドとハイブリッドアルゴリズムのラッパーです。

これらのアルゴリズムは私の専門知識をはるかに超えていますが、それらのドキュメントは簡単に見つかります。このlinkは一例です。いずれの場合においても

あなたの根の両方を含むように境界線を変更する場合は、(許容範囲内)正しい結果得られるはずです。

10.2613616029 25.63857432 

from numpy import * 
from scipy.optimize import * 

#UNITS: 
psi = 6895. 
ft=0.3048 
inch=0.0254 
psisqin=psi*sqrt(inch) 

#DATA: 
K_Ict=1500*psisqin 
K_Icb=1700*psisqin 
sigma_2=6700*psi 
sigma_1=6000*psi 
sigma_3=7200*psi 
hp=105.*ft 
P = 6500*psi 

def f(p): 
    b2,c= p 
    F1 = sqrt(pi*c)*(K_Icb-K_Ict)/2 
    F1 = sqrt(pi*c)*(K_Icb-K_Ict)/2 - ((sigma_2-sigma_1)*sqrt(c**2-b2**2) - (sigma_3-sigma_1)*sqrt(c**2-(hp-b2)**2)) 
    F2 = sqrt(pi)*(K_Icb+K_Ict)/(2*sqrt(c)) - ((sigma_2-sigma_1)*arcsin(b2/c) + (sigma_3-sigma_1)*arcsin((hp-b2)/c) - (sigma_2+sigma_3-2*P)*pi/2) 
    return (F1,F2) 

b2, c = fsolve(f,(9.002,30)) 
print(b2, c) 

を。これは、その結果

関連する問題