数值计算方法实验之Hermite 多项式插值 (Python 代码)
2024-09-06 01:56:55
一、实验目的
在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单函数P(x)(常是多项式),使其在插值基点xi,处成立P(xi)= yi(i=0,1,……,n),而在[a,b]上的其它点处成立f(x)≈P(x).
二、实验原理
三、实验内容
求f(x)=x4在[0,2]上按5个等距节点确定的Hermite插值多项式.
四、实验程序
import numpy as np
from sympy import *
import matplotlib.pyplot as plt def f(x):
return x ** 4 def ff(x): # f[x0, x1, ..., xk]
ans = 0
for i in range(len(x)):
temp = 1
for j in range(len(x)):
if i != j:
temp *= (x[i] - x[j])
ans += f(x[i]) / temp
return ans def draw(L, newlabel= 'Lagrange插值函数'):
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(0, 2, 100)
y = f(x)
Ly = []
for xx in x:
Ly.append(L.subs(n, xx))
plt.plot(x, y, label='原函数')
plt.plot(x, Ly, label=newlabel)
plt.xlabel('x')
plt.ylabel('y')
plt.legend() plt.savefig('1.png')
plt.show() def lossCal(L):
x = np.linspace(0, 2, 101)
y = f(x)
Ly = []
for xx in x:
Ly.append(L.subs(n, xx))
Ly = np.array(Ly)
temp = Ly - y
temp = abs(temp)
print(temp.mean()) def calM(P, x):
Y = n ** 4
dfP = diff(P, n)
return solve(Y.subs(n, x[0]) - dfP.subs(n, x[0]), [m,])[0] if __name__ == '__main__':
x = np.array(range(11)) - 5
y = f(x) n, m = symbols('n m')
init_printing(use_unicode=True) P = f(x[0])
for i in range(len(x)):
if i != len(x) - 1:
temp = ff(x[0:i + 2])
else:
temp = m
for j in x[0:i + 1]:
temp *= (n - j)
P += temp
P = expand(P) P = P.subs(m, calM(P, x))
draw(P, newlabel='Hermite插值多项式')
lossCal(P)
五、运算结果
最新文章
- beego上传文件
- itrator控制迭代次数
- 11g SQL Monitor
- Terminal的快捷键 for Terminal for Mac OS 10.10, Linux/GNU(Ubuntu, deepin, elementory os,CentOS)
- Entity Framework 6 Code First +MVC5+MySql/Oracle使用过程中的几个问题
- Codeforces Round #80 Div.1 D
- 漫谈linux文件IO
- 跟Google学习Android开发-起始篇-与其它应用程序交互(1)
- Weka初步
- opnet点对点通信模型 分类: opnet 2014-05-26 22:15 246人阅读 评论(3) 收藏
- 【Nginx系列】Nginx虚拟主机的配置核日志管理
- 微信小程序如何动态增删class类名
- Hash函数
- vs2019离线安装包下载
- Python学习(二十六)—— Django基础一
- Python中list,tuple,dict,set的区别和用法(转)
- php框架安装
- 4. Neural Network
- Template Method 模板方法 MD
- 在delphi原有控件基础上画图