python - python中多变量的牛顿法(方程组)

标签 python numpy python-2.x

我的代码第一次迭代运行良好,但之后输出以下错误:

ValueError: matrix must be 2-dimensional

据我所知(这在Python中并不多),我的代码是正确的。但我不知道为什么它在所有给定的迭代中都不能正确运行。谁能帮助我解决这个问题。

from __future__ import division
import numpy as np
import math
import matplotlib.pylab as plt
import sympy as sp
from numpy.linalg import inv

#initial guesses
x = -2
y = -2.5
i1 = 0

while i1<5:
    F= np.matrix([[(x**2)+(x*y**3)-9],[(3*y*x**2)-(y**3)-4]])
    theta = np.sum(F)
    J = np.matrix([[(2*x)+y**3, 3*x*y**2],[6*x*y, (3*x**2)-(3*y**2)]])
    Jinv = inv(J) 
    xn = np.array([[x],[y]])    
    xn_1 = xn - (Jinv*F)
    x = xn_1[0]
    y = xn_1[1]
    #~ print theta
    print xn
    i1 = i1+1

最佳答案

我相信xn_1是一个二维矩阵。尝试打印它,你会看到 [[something], [something]]

因此要获取x和y,需要使用多维索引。这是我所做的

x = xn_1[0,0]
y = xn_1[1,0]

这是可行的,因为 2D 矩阵 xn_1 中有两个单元素数组。因此我们需要进一步索引 0 来获取该单个元素。

编辑:澄清一下,xn_1[1,0] 表示索引 1,然后采用该子数组和索引 0。 And although according to Scipy看起来它在功能上应该等同于 xn_1[1][0]仅适用于一般 np.array 类型,而不适用于 np.matrix 类型Here is an excellent thread on SO that explains this

所以你应该使用xn_1[1,0]方式来获取你想要的元素。

关于python - python中多变量的牛顿法(方程组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659731/

相关文章:

python - 在 Pandas 中查找时差,包括工作日和工作时间

python - 如何通过教程解决使用 graphene django 基本设置的 ImportError?

python - 如何使用scikit-image使用最近的邻居插值来调整标记蒙版的大小

python - 如何将 np.nan 类型 Nat 更改为 NaN

python - 手动创建 Python Traceback

python - 如何从 Python 中的文件名中删除前缀?

python - 组合两个numpy数组以形成一个数组,每个数组中的最大值

python - 在 Python+numpy 中将字节类型转换为 uint64 数组

Python 2.7 多重处理 - 无法通过管理器字典传递套接字对象

django - 使用 CSV Django 模块以通用换行模式打开文件