python,solve,数组的最后2个维度必须是正方形

时间:2017-07-03 12:57:02

标签: python function

我需要使用牛顿方法调用给定函数值为0的点。

该功能由:

给出
def F(x):
    F = np.zeros(2)  
    F = np.array([x[0] - 0.25 * (np.cos(x[0])-np.sin(x[1])),x[1] - 0.25 * (np.cos(x[0])-2*np.sin(x[1]))])    

    return F

我为该方法编写的代码是:

def Newton(F,dFinv,x0,tol,maxit):
    x = np.zeros((x0.size,maxit))
    Converged = False
    i = 0

    for i in range(maxit):
        s = np.dot(dFinv(x), F(x))
        x -= s
        if np.linalg.norm(s) < tol*np.linalg.norm(x):
            return x, True,i

    return x,Converged,maxit

其中dFinv代表逆矩阵,maxit代表迭代的maixmum。至于callculte dFinv我写了另一个函数(我们不允许使用.inv()):

def dFinv(x):
    dF = np.zeros((2,2))
    dF = np.array([[ 1. + 0.25*np.sin(x[0]), 0.25*np.cos(x[1])],[-0.25* np.sin(x[0]),1+0.5*np.cos(x[1])]])

    dFinv = np.linalg.solve(dF,np.eye(2))

    return dFinv

但是当我尝试运行代码时(使用起始点x=np.array([1.0,1.0])),我在solve中收到了dFinv(x)的错误:

numpy.linalg.linalg.LinAlgError: Last 2 dimensions of the array must be square

我抬起头来看,错误到底意味着什么,但我不确定这是怎么可能的......无论我给函数赋值的是什么,矩阵都应该是正方形...

0 个答案:

没有答案