为什么计算不正确? 正确的解是c = 25.672,b2 = 10.24。 这里求解器返回输入值。 谢谢你的帮助!
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 :(得分:0)
不完全确定原因,但我认为这是因为你要离开范围之一,所以它只会返回你给出的边界。真正的原因取决于用于查找根的任何方法。 documentation州:
fsolve是MINPACK的hybrd和hybrj算法的包装。
这些算法有点超出我的专业知识,但您可以轻松找到有关它们的文档。这个link就是一个例子。
在任何情况下,如果你改变边界以包含你的根,你应该获得正确的结果(在公差范围内):
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)
这导致:
10.2613616029 25.63857432