首页 > 编程知识 正文

python二维插值,插值法图解

时间:2023-05-06 11:10:24 阅读:167635 作者:4570

importmatplotlib.pyplotasplt“”@ brief :计算n级差商f[x0,x1,x2 . xn]

@param: xi所有插值节点的横坐标集合o

@param: fi所有插值节点的纵坐标集合/

@return:返回xi的I阶差商(I是从xi的长度中减去1后的值) o )

@notice:a.Xi和fi的长度必须相等//"

b .因为使用了递归,所以注意不要让堆栈爆炸. o o o o

c .递归减少递归(每个递归包含两个递归函数),每个递归次数均为平方增加,总次数为充满二叉树的所有节点的数量(),因此容易发生堆栈溢出) )。

defget_order_diff_quot(Xi=[],fi=[] ) :iflen ) Xi )2andlen ) fi ) 2:return ) get_order_diff ) fi[:len(fi )-1]-get_order_diff_quot ) Xi [ 1: len (Xi ),fi[1:len ) fi ] ]/float ) )

Wi的语义示例w1=(x-x0 ); w2=(x-x0 ) ) x - x1 ); w3=(x-x0 ) ) x - x1 ) ) x - x2 ) )。

@param: i i阶(I阶多项式) ) ) ) ) ) ) ) ) ) ) ) )。

@param: xi所有插值节点的横坐标集合

@return:返回wi(x )函数“”

defget_wi(I=0,xi=[] ) :defWi(x ) x ) :

结果=1.0

foreachinrange(I ) :

result*=(x-Xi[each] ) returnresultreturnwi ' ' @ brief :得到诚实的水壶插值函数

@“”'

defget_Newton_inter(Xi=[],fi=[] ) :defNewton_inter(x ) x ) :

结果=fi [0]基础范围(2,Len ) Xi ) ) :

result=(get _ order _ diff _ quot (Xi [ : I ],fi[:i] ) get_wi(I-1,Xi ) ) ) ) returnresultretreturetureturetureturett

if_name_=='_main_': ' '内插节点,这里是用二次函数生成内插节点,每两个节点生成x轴距离位10 ' ' ' Sr _ x=[ iforinrange (-- ) ]

sr_fx=[i**2 for i insr_x]

NX=get_Newton_inter(Sr_x,sr_fx ) #获取内插函数

tmp _ x=[ iforiinrange (-50,51 ) ] #测试用例

tmp_y=[NX(I ) for i in tmp_x] #根据插值函数得到测试用例的纵轴

“”画图“”PLT.figure('IloveChina ) )。

ax1=PLT.subplot(111 ) )

这是PLT.SCA(ax1 )

PLT.plot(Sr_x,sr_fx,linestyle=',marker='o ',color='b ' )

PLT.plot(tmp_x,tmp_y,linestyle='-- ',color='r ' )

plt.show () ~

~

' linear_test.py' 81L,2764 cwritten 45,5 bot

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。