现假设某地区有100万初始人口。第一年内有43.5万移民迁入,第一年末总计人口达156.4万。根据上述数据推算该地区的增长率常数X(精确度为10^-4)。即求解方程:
我们首先建立函数:
其次,我们要知道精确度的定义:
上式中x0和x2为我们要确定的初始值;
接下来直接上代码的部分,里面也有一定的注释。
import math as ma
import time
import numpy as np
from sympy import *
def f(x):
y=100*ma.e**x+43.5/x*(ma.e**x-1)-156.4
return y
start=time.time()#记录开始时间
x=symbols('x')#定义变量
x0=1;x2=0#确定初始值
while True:
if np.abs((x0-x2)/x0)<=10**(-4):#精确度条件
end=time.time()#记录结束时间
print('牛顿迭代法的求值:{}\n运行的时间:{}'.format(x0,end-start))#输出
break#跳出循环
else:
x1=x0-f(x0)/(diff(f(x),x,1).subs(x,x0))#用sympy库对f(x)求导
x2=x0;x0=x1#进行变量替换,进行下一步的迭代
continue
本文主要是对牛顿迭代法的实际运用,没有考虑其存在的条件,即:
同时,初始值的确定是根据经验,或者说是大概的估算得来,具体怎么更好的确定初始值,可以查阅相关资料。