重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
import matplotlib.pyplot as plt
成都创新互联是一家专业提供浦东企业网站建设,专注与做网站、成都网站设计、H5开发、小程序制作等业务。10年已为浦东众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
from pylab import mpl
import math
"""
牛顿插值法
插值的函数表为
xi -28.9, -12.2, 4.4, 21.1, 37.8
f(xi) 2.2, 3.9, 6.6, 10.3, 15.4
"""
x=[-28.9,-12.2,4.4,21.1,37.8]
y=[2.2,3.9,6.6,10.3,15.4]
"""计算4次差商的值"""
def Four_time_difference_quotient(x, y):
i = 0 # i记录计算差商的次数
quotient = [0, 0, 0, 0, 0,]
while i 4:
j = 4
while j i:
if i == 0:
quotient[j]=((y[j]-y[j-1])/(x[j]-x[j-1]))
else:
quotient[j] = (quotient[j]-quotient[j-1])/(x[j]-x[j-1-i])
j -= 1
i += 1
return quotient;
def function(data):
return x[0]+parameters[1]*(data-0.4)+parameters[2]*(data-0.4)*(data-0.55)+\
parameters[3]*(data-0.4)*(data-0.55)*(data-0.65)\
+parameters[4]*(data-0.4)*(data-0.55)*(data-0.80)
"""计算插值多项式的值和相应的误差"""
def calculate_data(x,parameters):
returnData=[];
for data in x:
returnData.append(function(data))
return returnData
"""画函数的图像
newData为曲线拟合后的曲线
"""
def draw(newData):
plt.scatter(x,y,label="离散数据",color="red")
plt.plot(x,newData,label="牛顿插值拟合曲线",color="black")
plt.scatter(0.596,function(0.596),label="预测函数点",color="blue")
plt.title("牛顿插值法")
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
plt.legend(loc="upper left")
plt.show()
parameters=Four_time_difference_quotient(x, y)
yuanzu=calculate_data(x,parameters)
draw(yuanzu)
差商的意思是:差商即均差,一阶差商是一阶导数的近似值。
差商即均差,一阶差商是一阶导数的近似值。对等步长(h)的离散函数f(x),其n阶差商就是它的n阶差分与其步长的n次幂的比值。
在给定自变数的两个值之间,函数值的差与变数差的商值称为差商。函数差商的羞商称为二阶差商函数的高阶差商,定义类同;差商决定于基点x0, x1…的集合,但与顺序无关,今以S=x0, x1,… xn表已知基点的集合,a与b表两增加之基点。
差商(difference quotient)
就是因变量的改变量与自变量的改变量两者相除的商
比如对于函数f(x)
差商就是[f(x+dx)-f(x)]/dx
而如果dx趋于0,这就是在表示导数了
你的程序默认输入的是列向量,你输入的x,y是行向量,所以出错
另外程序第四行“P(:,2)=y;”应为“p(:,2)=y;”
x=[0; 1; 2; 4; 6];
y=[1; 9; 23; 3; 259];
chashang(x,y)
ans =
0 1.0000 8.0000 3.0000 -2.7500 1.8750
1.0000 9.0000 14.0000 -8.0000 8.5000 0
2.0000 23.0000 -10.0000 34.5000 0 0
4.0000 3.0000 128.0000 0 0 0
6.0000 259.0000 0 0 0 0
有下面的关系:
f[x0,x1,...xn]=f(a)/n! a属于[a,b] //f(a)表示的是f(x)求n阶导之后代a的值
所以先f(x)求7阶导代a的值之后为7!在除以7!就是1,在8阶就是0,除以8!就是0了
f[2^0,2^1,...,2^7]=1,f[2^0,2^1,...,2^8]=0