fuill 2022-12-09 10:28 采纳率: 68.2%
浏览 43
已结题

找个会matlab的,写一下代码的过程

数学模型来预测国民生产总值,matlab

找个会matlab的

有代码了,找个帮我写代码的解析

%y=input('请输入数据');
y=[1.05,1.17,1.32,1.43,1.54,1.61,1.81,1.78];
n=length(y);
yy=ones(n,1);
yy(1)=y(1);
for i=2:n
    yy(i)=yy(i-1)+y(i)
end
B=ones(n-1,2);
for i=1:(n-1)
    B(i,1)=-(yy(i)+yy(i+1))/2;
    B(i,2)=1;
end
BT=B';
for j=1:(n-1)
    YN(j)=y(j+1);
end
YN=YN';
A=inv(BT*B)*BT*YN;
a=A(1);
u=A(2);
t=u/a;
%t_test=input('输入需要预测的个数');
t_test=1;
i=1:t_test+n;
yys(i+1)=(y(1)-t).*exp(-a.*i)+t;
yys(1)=y(1);
for j=n+t_test:-1:2
    ys(j)=yys(j)-yys(j-1);
end
x=1:n;
xs=2:n+t_test;
yn=ys(2:n+t_test);
plot(x,y,'^r',xs,yn,'*-b');
det=0;
for i=2:n
    det=det+abs(yn(i)-y(i));
end
det=det/(n-1);
disp(['百分绝对误差为:',num2str(det),'%']);
    disp(['预测值为:',num2str(ys(n+1:n+t_test))]);
  • 写回答

3条回答 默认 最新

  • ShowMeAI 2022-12-09 11:16
    关注

    望采纳,每行都加了注释

    % 该代码为用一次幂模型预测一个时间序列
    % y=input('请输入数据');
    y=[1.05,1.17,1.32,1.43,1.54,1.61,1.81,1.78]; % 输入时间序列数据
    n=length(y); % 计算时间序列长度
    yy=ones(n,1); % 初始化yy向量
    yy(1)=y(1); % 设置yy第一个元素为y的第一个元素
    
    for i=2:n % 从第二个元素开始遍历
      yy(i)=yy(i-1)+y(i) % 计算yy的第i个元素
    end
    
    B=ones(n-1,2); % 初始化B矩阵
    for i=1:(n-1) % 遍历B矩阵
      B(i,1)=-(yy(i)+yy(i+1))/2; % 计算B矩阵第i行第1列的值
      B(i,2)=1; % 设置B矩阵第i行第2列的值为1
    end
    
    BT=B'; % 计算B矩阵的转置
    for j=1:(n-1) % 遍历B矩阵
      YN(j)=y(j+1); % 计算YN向量的第j个元素
    end
    
    YN=YN'; % 计算YN向量的转置
    A=inv(BT*B)BTYN; % 计算A矩阵
    a=A(1); % 计算a
    u=A(2); % 计算u
    t=u/a; % 计算t
    %t_test=input('输入需要预测的个数');
    t_test=1; % 设置需要预测的个数
    i=1:t_test+n; % 计算i
    yys(i+1)=(y(1)-t).*exp(-a.i)+t; % 计算yys
    yys(1)=y(1); % 设置yys第一个元素为y的第一个元素
    
    for j=n+t_test:-1:2 % 从倒数第二个元素开始遍历
      ys(j)=yys(j)-yys(j-1); % 计算ys的第j个元素
    end
    
    x=1:n; % 计算x
    xs=2:n+t_test; % 计算xs
    yn=ys(2:n+t_test); % 计算yn
    plot(x,y,'^r',xs,yn,'-b'); % 绘制时间序列的折线图
    det=0; % 初始化det
    
    for i=2:n % 遍历yn
      det=det+abs(yn(i)-y(i)); % 计算det
    end
    
    det=det/(n-1); % 计算百分绝对误差
    disp(['百分绝对误差为:',num2str(det),'%']); % 输出百分绝对误差
    disp(['预测值为:',num2str(ys(n+1:n+t_test))]); % 输出预测值
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月17日
  • 已采纳回答 12月9日
  • 修改了问题 12月9日
  • 赞助了问题酬金15元 12月9日
  • 展开全部

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?