import math
from sympy import*
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
import pandas as pd
data=https://bbs.csdn.net/topics/pd.read_excel("C:\\Users\\lenovo\\中國年度人口資料.xls")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False
X=np.arange(0,22)
#Y=data["總人口(萬人)"]
Y=[126743,127627,128453,129227,129988,130756,131448,132129,132802,133450,134091,134735,135404,136072,136782,137462,138271,139008,139538,140005]
t=np.arange(0,22)
def residual(p):
xm,x0,r=p
return Y-(xm/1+(xm/x0-1)*np.exp(-r*t))
res=optimize.leastsq(residual,[1,1,1])
a,b,c=res[0]
print("xm={:.8f},x0={:.8f},r={:.8f}".format(a,b,c))
y=a/(1+a/b-1)*np.exp(-c*t)
y_test=a/(1+a/b-1)*np.exp(-c*22)
y2020=a/(1+a/b-1)*np.exp(-c*23)
print(y_test)
plt.plot(X,Y,'.',label="實際人口")
plt.plot(t,y,label="擬合")
plt.xlabel("時間(年)")
plt.ylabel("人口數量(萬人")
plt.title("中國人口增長模型")
plt.grid()
plt.legend()
plt.show()
想做一個人口的預測 但總是出現這個問題 一直不會從何解決 求各位大佬支招解答疑惑


uj5u.com熱心網友回復:
報錯資訊是說,進行廣播時型別不匹配。return Y-(xm/1+(xm/x0-1)*np.exp(-r*t))
你的Y的形狀是(20,)怎么去減(22,)形狀呢?把Y串列再加兩個數字試試
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/38498.html
