用户输入一个数字,代码应对该数字进行一定数量的迭代(由N定义),或者直到根估计的变化变得足够小(由您自行决定)为止。
从初始逼近度(x_initial)为1开始,然后通过公式运行它以获得X的下一个迭代。似乎可以得到合理的答案,但除此之外似乎无法理解该做什么。
5
估算只是在两个不同的值之间交替。每次迭代后都没有定义一个新的X方程,我不确定还有什么尝试。
答案 0 :(得分:0)
问题似乎是您在每个循环开始时将x_new重置为基于x_initial。我将它们都折叠为一个变量x:
stat_rankL = function(x, y, descCols) {
ifelse(x %in% descCols, rank(desc(y)), rank(y))
}
df %>%
gather(key = data_col, value = "stat_value", 3:14) %>%
group_by(data_col) %>%
mutate(rank = stat_rankL(data_col, stat_value, c('ftm', 'ast')))
我还在一些地方使您的代码更加Pythonic,以提高可读性。
答案 1 :(得分:0)
让f是代表所讨论方程的符号函数,dF是代表f的导数的符号方程,x0起始值,epsilon(在离根足够近的情况下存在该函数的终止条件)和max_iter (你要多少迭代来运行)。这比您的方法更好,因为只要您编写适当的派生类,它对任何根都有效。
def newtons_method(f,Df,x0,epsilon,max_iter):
xn = x0
for n in range(0,max_iter):
fxn = f(xn)
if abs(fxn) < epsilon:
print('Found solution after',n,'iterations.')
return xn
Dfxn = Df(xn)
if Dfxn == 0:
print('Zero derivative. No solution found.')
return None
xn = xn - fxn/Dfxn
print('Exceeded maximum iterations. No solution found.')
return None
示例用法:
f = lambda x: x**4 - x**3 - 1
Df = lambda x: 4*x**3 - 3*x
approx = newtons_method(f,Df,1,1e-10,10)
print(approx)
答案 2 :(得分:0)
不确定您和其他人的情况为何如此复杂,但我对此进行了测试,结果很简单:
def cubenewton(num, ini=1, iters=50):
for i in range(iters):
ini = ini - (ini**3 - num)/float(3*ini**2)
return ini
>>> cubenewton(30) # I tried values from -100 to 100 and all works fine. works for 0 as well.
3.107232505953859