【问题标题】:2D Newton's method in pythonpython中的二维牛顿法
【发布时间】:2018-11-21 04:15:12
【问题描述】:

我正在编写 Python 中的后向 Euler 方法,但在编写 Newton 部分时遇到问题。我们得到了 1e-4 的容差,使用这个我在牛顿法的输出向量中得到了非常小的数字。

这是我的代码:

def Newt(U,x,tol): #takes in matrix, x vector, tolerance 

    error=np.matrix([[1],[1]])  #set an error matrix of 1,1
    while abs(LA.norm(error))>tol:
        func=function(U,x)   #define a f(x) vector
        jac=functionprime(U,x) #define the inverse jacobian vector
        y0=jac*func  #the change vector is the jacobian inverse times the function
        xn=x-y0 #the new x is the difference
        error=xn-x #set the error
        x=xn
    print(x)     

对于这个问题,我使用了这些函数函数:

A=np.matrix([[-33.4, 66.6], [33.3, -66.7]]) #A matrix
x0=np.matrix([[3],[0]]) #x0 verctor

def function(A,x):
    z=A*x
    return(z) #all my function does is multiply the matrix by the x vector

def functionprime(A,x0):
    b=(1/10)*np.matrix([[-66.7,-66.6],[-33.3,-33.4]]) #tried to code this to just output the inverse jacobian 
    return(b)

当我运行它时,我得到一个矩阵:

[[  4.31664687e-27],
 [  2.15832344e-27]]

这太小了,无法在我的反向欧拉函数中使用,这让我觉得我的牛顿有问题。谁能帮我弄清楚我在这里做错了什么?根据我对牛顿函数的理解,这似乎应该是正确的,但显然它并没有完全按照我的需要做。

还要在我的代码顶部运行这个函数:

import matplotlib.pyplot as plt
import math
import numpy as np
from pylab import *
from numpy import linalg as LA

这不是全部都需要,但有些是!

【问题讨论】:

  • 多维 Newton-Raphson 变量?
  • 什么意思?
  • 你想在这里解决什么问题?
  • 我只是想得到最好的牛顿近似值,这样我就可以使用我的反向欧拉函数。我得到的牛顿输出的问题是,我需要进行数千次 BE 迭代才能得到任何答案,考虑到 BE 函数的准确性能力,这不应该发生。
  • 如果它有助于使这个问题更有意义,我也可以添加我的反向欧拉代码

标签: python newtons-method


【解决方案1】:

您的解决方案可能没有问题(雅可比计算除外)。在我看来,您正在尝试解决A*x==0。这个系统的明显解决方案是x=0,这就是你得到的。

要查看此内容,请尝试将您的 function() 更改为:z = A * x + np.matrix([[1], [-3]])

【讨论】:

  • 你能解释一下为什么我会再做一次吗?对不起,我仍然很困惑。第二个矩阵从何而来?这是雅可比函数计算中的问题还是实际函数本身的问题?如果是函数,该函数的特定代码适用于其他迭代方法,那么现在有什么不同?
  • 我试过这样做,它给了我更好的答案,谢谢!但我仍然不确定为什么。现在,当我将牛顿值设置为 xn 然后运行我的新函数 (A,xn) 时,它给了我零向量。这是出于同样的原因吗?还是我们以某种方式求解逆?
  • @bananagurlz 我所做的只是更改您的函数(或方程组),以便解决方案如果不是微不足道的。让我们考虑一维情况。 _you_are 所做的相当于解决-33.4*x==0。这个方程的解是什么?显然,它是 0。我做了什么?我将等式更改为-33.4*x +1 == 0。现在解决方案与零不同。因此,问题(我认为)是您的方程组(由您定义)具有微不足道的 (0, 0) 解决方案。如果你想找到非平凡的解决方案,你需要改变你的方程。
  • 这是有道理的。所以我需要找到一种方法来编写一个程序来解决这个系统。 1,3 向量是任意的还是您有理由这样做?如果有,你是怎么解决的?我只是在想怎么解决。
  • @bananagurlz 只是为了说明这一点是任意的。如果必须,你需要重新考虑你的问题。我不能告诉你你需要解决什么系统。
猜你喜欢
  • 1970-01-01
  • 2018-02-26
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
相关资源
最近更新 更多