题目1:插值(综合)

题目1: 插值(综合)

美国的人口普查每10年举行一次,下表列出了从1960年到2020年的人口.(按千人计)。

1960 1970 1980 1990 2000 2010 2020
人口(千) 180671 205052 227225 249623 282162 309327 329484

(1)用适当Lagrange插值法分别求在1950年、2005年和2030年人口的近似值。

(2)1950年的人口大约是151326(千人),你认为你得到的2005年和2030年的人口数字精确度如何?

(3)用适当Newton插值法重做(1)和(2)。

(4)使用适当自由三次样条插值法重做(1)和(2)。

Lagrange插值法:

公式:
####

代码(python):

import matplotlib.pyplot as plt
import numpy as np

x_point = np.arange(1960,2030,10)
y_point = [180671, 205052, 227225, 249623, 282162, 309327, 329484]

x_choice = [1960, 1980, 2000, 2020]
y_choice = [180671, 227225, 282162, 329484]

x = np.arange(1950, 2030+0.01, 0.01)

def lagrange(xk,yk,x):
    n = len(xk)
    lk = []
    y = 0
    for k in range(n):
        fenzi = 1
        fenmu = 1
        for j in range(n):
            if j != k:
                fenzi *= (x - xk[j])
                fenmu *= (xk[k] - xk[j])
        lk.append(fenzi/fenmu)
    
    for i in range(n):
        y += lk[i] * yk[i]
    return y


y = lagrange(x_choice,y_choice,x)

plt.plot(x,y,label="拉格朗日拟合曲线",color="black")
plt.scatter(x_point, y_point, label="未选点"
  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

酷酷的懒虫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值