求助关于灰色理论预测python代码

来一个蛋挞 2024-10-09 21:06:20

用2005-2021年的建筑材料消耗量预测2022年的建筑材料消耗量,一开始结果预测值出现负值,搜了下后面又取对数,预测值变成了0,如下面的代码,该怎么办啊,有没有大佬知道!!!

import numpy as np
from scipy.integrate import odeint
# 加载数据
a = np.loadtxt("D:\碳排放影响因素数据\预测2022年生产阶段数据\四川.txt")  # 加载表中的后5列数据
if a.ndim == 1:
    a = a[:, np.newaxis]
n=a.shape[0]  #观测数据的个数
# 数据预处理,对数变换
a_log = np.log(a + 1)  # 加1是为了避免对0取对数
# 累加生成
x10 = a_log[:, 0]
x20 = a_log[:, 1]
x30 = a_log[:, 2]
x40 = a_log[:, 3]
x50 = a_log[:, 4]

x11 = np.cumsum(x10)
x21 = np.cumsum(x20)
x31 = np.cumsum(x30)
x41 = np.cumsum(x40)
x51 = np.cumsum(x50)

z1 = (x11[:-1] + x11[1:]) / 2.
z2 = (x21[:-1] + x21[1:]) / 2.
z3 = (x31[:-1] + x31[1:]) / 2.
z4 = (x41[:-1] + x41[1:]) / 2.
z5 = (x51[:-1] + x51[1:]) / 2.
B1=np.c_[z1,np.ones((n-1,1))]
u1=np.linalg.pinv(B1).dot(x10[1:]); print(u1)
B2=np.c_[z1,z2]
u2=np.linalg.pinv(B2).dot(x20[1:]); print(u2)
B3=np.c_[z3,np.ones((n-1,1))];
u3=np.linalg.pinv(B3).dot(x30[1:]); print(u3)
B4=np.c_[z1,z3,z4]
u4=np.linalg.pinv(B4).dot(x40[1:]); print(u4)
B5=np.c_[z1,z2,z3,z4,z5]
u5=np.linalg.pinv(B5).dot(x50[1:]); print(u5)
def Pfun(x, t):
    x1, x2, x3, x4, x5 = x
    return np.array([max(0, u1[0] * x1 + u1[1]),
                     max(0, u2[0] * x1 + u2[1] * x2),
                     max(0, u3[0] * x3 + u3[1]),
                     max(0, u4[0] * x1 + u4[1] * x3 + u4[2] * x4),
                     max(0, u5[0] * x1 + u5[1] * x4 + u5[2] * x5)])
# 预测
t = np.arange(0, 18)
X0 = np.array([5.810, 2.590, 27.250, 3.570, 0.260])
s1 = odeint(Pfun, X0, t)
s2 = np.diff(s1, axis=0)
xh = np.vstack([X0, s2])

# 反变换,指数变换
pre = np.exp(xh[-1, :]) - 1  # 反变换
cha=a-xh[:-1,:]  #计算残差
delta=np.abs(cha/a)  #计算相对误差
maxd=delta.max(0)  #计算每个指标的最大相对误差
print("最大相对误差:", np.array(maxd).astype(str))
print("预测值为:", np.array(pre).astype(str))

 

...全文
107 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

12,042

社区成员

发帖
与我相关
我的任务
社区描述
创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践
python学习 企业社区
社区管理员
  • Python全栈技术社区
  • Lumos_zbj
  • 北侠大卫
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

创建由Python学习者和社区专家组成的国内最大的第三方Python中文社区,帮助社区成员更好地入门学习、职业成长和应用实践

  • 这里有最新最全的 Python 学习内容及资源,每月多达4次技术公开课
  • 这里有众多 Python 学习者,陪伴你一起交流成长
  • 这里有专业 Python 社区专家、讲师,帮助你跨越学习瓶颈,解决实操难题
  • 这里有丰富的社区活动,可以开阔眼界,结识更多同伴

【最新活动】:

  1. 周四技术公开课讲师招募中,点击查看详情
  2. “Python 社区专家团” 招募中,点击查看详情

 

试试用AI创作助手写篇文章吧