【发布时间】:2021-02-03 14:30:42
【问题描述】:
我已将函数 newton 定义为实现 Newton 方法以求实值函数和向量值函数的根。
问题在于,创建的序列在每一步都包含在一个额外的 [] 中。
为什么会发生这种情况,如何通过更改牛顿函数定义来避免这种情况?
这是我的输出序列:
x_1 = [[4.66097544]]
x_2 = [[[2.76124695]]]
x_3 = [[[[3.14624513]]]]
x_4 = [[[[[3.14159265]]]]]
这是我的代码:
from math import exp
import numpy as np
from numpy import array
from numpy.linalg import norm
from numpy import sin,cos,pi
def newton (F, DF, x0, eps, K):
x = x0 - np.linalg.inv(DF(x0))*F(x0)
k=1
print("x_", end="")
print(k, end="")
print(" = ", end="")
print(x)
print("( ||F(x)|| = ", end="")
print(norm(F(x)), end=" )\n")
while (norm(F(x)) > eps) and (k<=K):
x = x - np.linalg.inv(DF(x))*F(x)
k += 1
print("x_", end="")
print(k, end="")
print(" = ", end="")
print(x)
print("( ||F(x)|| = ", end="")
print(norm(F(x)), end=" )\n")
return x,k
F = lambda y: cos(y/2)
DF = lambda y: array([-sin(y/2)/2])
x,k = newton(F, DF, array([1.]), 1e-8, 100)
非常感谢任何帮助或 cmets。谢谢!
【问题讨论】:
-
这必须是调用
norm(F(x))或np.linalg.inv(DF(x))*F(x)的结果。给每个样本数据提供一些样本数据,看看哪个导致了额外的嵌套(向数据添加另一个维度),然后阅读文档并了解它为什么这样做(或先阅读每个函数的文档)。 -
x = x - (np.linalg.inv(DF(x))*F(x)).reshape((1,1)) -
您可以使用
f-string以更易读的方式打印输出,而不是使用一系列print语句 -
这不会使我的实现对向量值函数 F 无用吗? @Epsi95
标签: python numeric newtons-method