题目
编写程序求出a的n次方根。
输入
一个实数a和一个正整数n。
输出
a的n次方根。
解题分析
在python中,可以使用函数作为参数进行传入传出,可以考虑使用迭代法。整体思路大概是,一个improve函数,传入一个update函数和一个close函数,以及一个值guess,判断guess是否为所求值,如果不是就用update去更新guess。
而此时需要用到牛顿法去求a的n次方根,我们知道,一个函数f(x),在(x0,f(x0))作一条切线,可以得到一条直线y=k*x+b,令y=0,可以得到直线与x轴交点的自变量值-b/k,当f(-b/k)=0时,我们就找到了f(x)与x轴的交点。注意到,f(x0)=k*x0+b 得到 -b/k = x0-f(x0)/df(x0)。
代码实现
def improve(update,close,guess=1):
while not close(guess):
guess=update(guess)
return guess
def newton_update(f,df):
def update(x):
return x-f(x)/df(x)
return update
def approx_eq(x,y,tollerance=1e-15):
return abs(x-y)<tollerance
def power(x,n):
res,k=1,0
while k<n:
res , k = res*x , k+1
return res
def find_zero(f,df):
def near_zero(x):
return approx_eq(f(x),0)
return improve(newton_update(f,df),near_zero)
def find_n_th(a,n):
def f(x):
return power(x,n)-a
def df(x):
return n*power(x,n-1)
return find_zero(f,df)
print(find_n_th(8,3))
#得到2.0