数值分析上机实习题.docxVIP

  • 155
  • 0
  • 约2.77万字
  • 约 33页
  • 2019-01-13 发布于广东
  • 举报
第2章 插值法 已知函数在下列各点的值为 0.2 0.4 0.6 0.8 1.0 0.98 0.92 0.81 0.64 0.38 试用四次牛顿插值多项式及三次样条韩式(自然边界条件)对数据进行插值。用图给出,及 Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font_set = FontProperties(fname=rc:\windows\fonts\simsun.ttc,size=12) #求牛顿n次均差 def qiujuncha(x,f,n): for i in range(1,n): for j in range(4,i-1,-1): f[j]= (f[j] - f[j-1])/(x[j]-x[j-i]) #根据牛顿多项式求值 def niudun(x,f,x1): sum = f[0]; tmp = 1; for i in range(1,5): tmp *= (x1-x[i-1]) sum = sum + f[i]*tmp return sum #牛顿插值画图 def drawPic(x,f): x1 = np.linspace(0.2, 1, 100) plt.plot(x1, niudun(x,f,x1)) plt.title(u牛顿四次插值,fontproperties=font_set) plt.xlabel(ux轴,fontproperties=font_set) plt.ylabel(uy轴, fontproperties=font_set) plt.show() def qiu_h(x,h): n = len(x) -1 for i in range(n): print(i) h[i] = x[i+1]-x[i] #自然边界条件下的三次样条插值 求M def qiu_m(h,f,o,u,d): n = len(h) o[0] = 0 u[n] = 0 d[n] = d[0] = 0 a = [] for i in range(1,n): u[i] = h[i-1]/(h[i-1]+h[i]) for i in range(1,n): o[i] = h[i]/(h[i-1]+h[i]) for i in range(1,n-1): d[i] = 6*(f[i+1]-f[i])/(h[i-1]+h[i]) t = [0 for i in range(5)] t[0] =2 t[1] = o[0] a.append(t) for i in range(1,n): t = [0 for i in range(5)] t[i - 1] = u [i + 1] t[i] = 2 t[i + 1] = o [i + 1] a.append(t) t = [0 for i in range(5)] t[n - 1] = u[n] t[n] = 2 a.append(t) tmp = np.linalg.solve(np.array(a),np.array(d)) m = [] for i in range(5): m.append(tmp[i]) return m #根据三次条插值函数求值 def yangtiao(x1,m,x,y,h,j): return m[j]*(x[j+1]-x1)**3/(6*h[j])+m[j+1]*(x1-x[j])**3/(6*h[j])+(y[j]-m[j]*h[j]**2/6)*(x[j+1]-x1)/h[j]+(y[j+1]-m[j+1]*h[j]**2/6)*(x1-x[j])/h[j] def main(): x = [0.2, 0.4, 0.6, 0.8, 1.0] y = [0.98, 0.92, 0.81, 0.64, 0.38] f = y[:] f1 = y[:] h = [0.2,0.2,0.2,0.2] u = [0

文档评论(0)

1亿VIP精品文档

相关文档