栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python数模小作业】动手‘预习‘高数之 人口预测(线性拟合)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python数模小作业】动手‘预习‘高数之 人口预测(线性拟合)

第一次发文章,不太会操作,也没啥文化,我就直接放代码了

对了问题描述:

GitModel 公司对面试的实习生给出了这样一个问题 : 搜集 1950∼2020 年间美国人口数据,,猜测其满足的函数关系,,并综合数据预测美国 2030 年的人口数:

*根据找到的数据,假定1950∼2020年美国人口是一次函数的线性关系,应该只用最小二乘法就能解决。

*当然真实人口预测的话,还需要考虑很多方面,需要把人口分为男性和女性,还需要注意人口流入流出趋势、年龄分段等等。

#导入数据
import pandas
Renkou = pandas.read_excel('美国人口.xlsx', sheet_name='Sheet1')
Renkou

#处理数据,绘制图像
import matplotlib.pyplot as plt
import scipy.optimize as opt
import numpy as np
from sympy import *

year = Renkou['年份']
people_num = Renkou['人口']
plt.plot(year, people_num,'b')
plt.xlabel('year')
plt.ylabel('number')
plt.title('American population of 1950-2020')
plt.show()



# 方法一:【暴力无脑】直线拟合与绘制

def f(x, A, B ):
    return A * x + B
A1, B1 = opt.curve_fit(f, year, people_num)[0]

y1 = A1 * year + B1
plt.plot(year, people_num,'b',year, y1, "r-.")


x=symbols('x')
y1=A1 * x + B1
print('y1=',y1)
print("预计2030年有 %d 人" % y1.evalf(subs = {x:2030}))
#绘图
plt.xlabel('year')
plt.ylabel('number')
plt.title('Population fitting line')
plt.show()


# 方法二:【同样暴力无脑】二次函数的最小二乘法 曲线拟合与绘制
x = np.array(year)
y = np.array(people_num)

def residual(p):
  a,b,c = p
  return y-(a*x**2+b*x+c)
#使用opt的最小二乘法拟合函数
a,b,c  = opt.leastsq(residual,[1,1,0])[0]

#绘图对比
y2=(a*x**2+b*x+c)
plt.plot(year, people_num,'b',year, y2, "r-.")
x=symbols('x')
y2=a * x**2 + b*x+c
print('y2=',y2)
print("预计2030年有 %d 人" % y2.evalf(subs = {x:2030}))

plt.xlabel('year')
plt.ylabel('number')
plt.title('Population fitting curve')
plt.show()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号