从两个复方程组求非线性根

2024-09-28 19:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么计算不正确? 正确的解是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

Tags: fromimportpisqrtb2sigmahpf2
1条回答
网友
1楼 · 发布于 2024-09-28 19:30:07

不完全确定为什么,但我认为这是因为你把其中一个根放在范围之外,所以它只返回你给出的边界。真正的原因取决于用什么方法找到根源。documentation声明:

fsolve is a wrapper around MINPACK’s hybrd and hybrj algorithms.

这些算法有点超出我的专业知识范围,但您可以很容易地找到有关它们的文档。这个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)

这将导致:

^{pr2}$

相关问题 更多 >