求解非线性方程组,cos(a) = 1 - d^2 / (2*r^2) ,L = a * r,d = 140,L= 156; 导入参数雅克比矩阵, 再次进行求解。
A、求解非线性方程组:
#导入优化模块和余弦函数
from scipy.optimize import fsolve
from math import cos
#定义函数
def f(x):
d=140
l=156
a,r=x.tolist()
return [cos(a)-1+d*d/(2*r*r),l-a*r]
res = fsolve(f,[1,1])
#打印
print("a r")
print(res)
print(f(res))
输出结果:
a r
[ 1.5940638 97.86308398]
[4.596323321948148e-14,2.7682744985213503e-11]
B、用jacobi矩阵来解非线性方程组
#导入优化模块和余弦函数
from scipy.optimize import fsolve
from math import cos
#定义函数
def f(x):
d=140
l=156
a,r=x.tolist()
return [cos(a)-1+d*d/(2*r*r),l-a*r]
#定义导函数
def j(x):
d=140
l=156
a,r=x.tolist()
return[
[-sin(a),-(d*d)/(r*r*r)],
[-r,-a]
]
#通过fprime将j的参数传递给fsolve()
res = fsolve(f,[1,1],fprime=j)
#打印
print("a r")
print(res)
print(f(res))
输出结果:
a r
[ 1.5940638 97.86308398]
[-1.3322676295501878e-15,-5.400124791776761e-13]
python scipy求解非线性方程组
最新推荐文章于 2024-07-29 00:58:39 发布