计算方法——牛顿插值多项式

计算方法——牛顿插值多项式

【问题描述】考虑[0,4]内的函数y=f(x)=cos(x)。利用多个(4、5等)节点构造牛顿插值多项式。

【输入形式】在屏幕上依次输入在区间[0,4]内的一个值x*,构造插值多项式后求其P(x*)值,和多个节点的x坐标。

【输出形式】输出牛顿插值多项式系数向量,差商矩阵和P(x*)值(保留小数点后6位有效数字)。

【样例1输入】

0.3

0 1 2 3 4

【样例1输出】

[-0.01465683 0.23450012 -0.8492783 0.16973731 1. ]

[[ 1. 0. 0. 0. 0. ]

[ 0.54030231 -0.45969769 0. 0. 0. ]

[-0.41614684 -0.95644914 -0.24837572 0. 0. ]

[-0.9899925 -0.57384566 0.19130174 0.14655916 0. ]

[-0.65364362 0.33634888 0.45509727 0.08793184 -0.01465683]]

P4(0.3)=0.980699

【样例1说明】输入:x*为0.3,5个节点为(k, cos(k)),其中k = 0, 1, 2, 3, 4。

输出:牛顿插值多项式系数向量,表示P4(x)=0.01466 x^4 + 0.2345 x^3 - 0.8493 x^2 + 0.1697 x + 1; 差商矩阵;当x*为0.3时,P4(0.3)值为0.980699

【评分标准】根据输入得到的输出准确

import math
import numpy as np
xx=float(input())
X=np.array(input().split(),dtype=float)
n=len(X)
D=np.zeros((n,n))

for i in range(0,n):
    D[i][0]=math.cos(X[i])

for i in range(1,n):
    for j in range(i,n):
        D[j][i]=(D[j][i-1]-D[j-1][i-1])/(X[j]-X[j-i])

S=D[n-1][n-1]
for i in range(1,n):
    S=np.polymul(S,np.poly1d([1,-X[n-i-1]]))+D[n-i-1][n-i-1]

print(S.c)
print(D)
print('P{}({})={:.6f}'.format(n-1,xx,S(xx)))

'''''
0.3
0 1 2 3 4
'''''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊噗呲咔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值