使用numpy求解矩阵方程式时出错

编程入门 行业动态 更新时间:2024-10-27 09:45:36
本文介绍了使用numpy求解矩阵方程式时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用sympy和numpy在Python中编写自己的Newton-Raphson算法.

I'm writing my own Newton-Raphson algorithm in Python using sympy and numpy.

下面是代码,但您可以忽略此代码并跳至错误:

The code is below but you can ignore this and skip on to the error:

代码

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函数列表

fncList - a python list of functions using Sympy symbols

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

varz - a list containing those symbols (variables)

x0-初步猜测

错误

直到我们print j和f正常工作并打印以下内容:

Up until the point where we print j and f it works fine and prints the following:

[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循环中.

Your issue is in your second for loop.

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计算系统的行列式(请参见此答案以获取更多信息).您当前正在附加<class 'sympy.core.numbers.Float'>-错误消息告诉您使用的类型签名不正确.

When you append to fx0, you need to ensure that you are appending the same type (float64) such that NumPy can compute the determinant of your system with LAPACK (see this answer for more info). You are currently appending <class 'sympy.core.numbers.Float'> - your errror message is telling you that you have an incorrect type signature for usage.

要纠正此问题,您只需像上面所做的那样,为float64附加numpy.array的float64规范即可.

To correct this issue, you can simply append numpy.array with a dtype specification for float64 as you did above

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'))

更多推荐

使用numpy求解矩阵方程式时出错

本文发布于:2023-11-29 18:37:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1647263.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方程式   矩阵   numpy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!