gpt4 book ai didi

python - 用numpy求解矩阵方程时出错

转载 作者:太空狗 更新时间:2023-10-29 20:25:15 25 4
gpt4 key购买 nike

我正在使用 sympynumpy 在 Python 中编写自己的 Newton-Raphson 算法。

代码如下,但您可以忽略它并跳到错误处:

代码

def newtonRhapson(fncList, varz, x0):

jacob = []

for fnc in fncList:
vec = []
for var in varz:
res = fnc.diff(var)
for i in range(len(varz)):
res = res.subs(varz[i], x0[i])
vec.append(res)
jacob.append(numpy.array(vec, dtype='float64'))

fx0=[]

for fnc in fncList:
res2 = fnc
for i in range(len(varz)):
res2 = res2.subs(varz[i], x0[i])
fx0.append(res2)

j = jacob
f = fx0

print j
print ''
print f

print numpy.linalg.solve(j,f).tolist()

函数的参数是:

fncList - 使用 Sympy 符号的 python 函数列表

varz - 包含这些符号(变量)的列表

x0 - 初始猜测

错误

直到我们print jf 它工作正常并打印以下内容:

[array([-9.13378682, -5.91269838]), array([ 4.84401379,  1.01980286])]

[-5.15598620617611, 5.13378681611922]

当我运行时:

newtonRhapson([5*cos(a)+6*cos(a+b)-10, 5*sin(a)+6*sin(a+b)-4], [a,b], [0.7,0.7])

但是在运行这条线时:

print numpy.linalg.solve(j,f).tolist()

我得到错误:

File "/Users/me/anaconda/lib/python2.7/site-  packages/numpy/linalg/linalg.py", line 384, in solve
r = gufunc(a, b, signature=signature, extobj=extobj)
TypeError: No loop matching the specified signature and casting was found for ufunc solve1

最佳答案

您的问题在您的第二个 for 中环形。

for fnc in fncList:
res2 = fnc
for i in range(len(varz)):
res2 = res2.subs(varz[i], x0[i])
fx0.append(res2)

当您附加到 fx0 时,您需要确保附加相同的类型 ( float64 ),以便 NumPy 可以使用 LAPACK 计算系统的行列式(请参阅 this answer 了解更多信息)。您目前正在附加 <class 'sympy.core.numbers.Float'> - 您的错误消息告诉您您使用的类型签名不正确。

要纠正这个问题,您可以简单地附加 numpy.arraydtype float64 的规范就像你上面做的那样

for fnc in fncList:
res2 = fnc
for i in range(len(varz)):
res2 = res2.subs(varz[i], x0[i])
fx0.append(numpy.array(res2, dtype='float'))

关于python - 用numpy求解矩阵方程时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36689080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com