雨寒x 2023-04-19 11:45 采纳率: 100%
浏览 63
已结题

matlab实验问题

img


使用matlab 根据图中要求 进行数据拟合并预测人口数量 完成实验

  • 写回答

4条回答 默认 最新

  • 斗迷飞鸟 2023-04-20 10:45
    关注

    (1)问题分析
    从图中摘取数据之后,可以先通过matlab的polyfit函数分别得到二次、三次、四次多项式的最小二乘拟合系数,再通过polyval计算1978年到2021年的人口预测值,从而计算拟合误差,最后通过拟合误差最小的拟合多项式预测2022年的人口数量。PS. 问题中2022年的人口数量有误,根据国家统计局数据,2022年全国人口141175万人。
    (2)问题的matlab解决代码

    %Load data
    data=[1978, 96259, 18.25, 6.25, 12.00, 0;
    1979, 97542, 17.82, 6.21, 11.61, 1283;
    1980, 98705, 18.21, 6.34, 11.87, 1163;
    1981, 100072, 20.91, 6.36, 14.55, 1367;
    1982, 101654, 22.28, 6.60, 15.68, 1582;
    1983, 103008, 20.19, 6.90, 13.29, 1354;
    1984, 104357, 19.90, 6.82, 13.08, 1349;
    1985, 105851, 21.04, 6.78, 14.26, 1494;
    1986, 107507, 22.43, 6.86, 15.57, 1656;
    1987, 109300, 23.33, 6.72, 16.61, 1793;
    1988, 111026, 22.37, 6.64, 15.73, 1726;
    1989, 112704, 21.58, 6.54, 15.04, 1678;
    1990, 114333, 21.06, 6.67, 14.39, 1629;
    1991, 115823, 19.68, 6.70, 12.98, 1490;
    1992, 117171, 18.24, 6.64, 11.60, 1348;
    1993, 118517, 18.09, 6.64, 11.45, 1346;
    1994, 119850, 17.70, 6.49, 11.21, 1333;
    1995, 121121, 17.12, 6.57, 10.55, 1271;
    1996, 122389, 16.98, 6.56, 10.42, 1268;
    1997, 123626, 16.57, 6.51, 10.06, 1237;
    1998, 124761, 15.64, 6.50, 9.14, 1135;
    1999, 125786, 14.64, 6.46, 8.18, 1025;
    2000, 126743, 14.03, 6.45, 7.58, 957;
    2001, 127627, 13.38, 6.43, 6.95, 884;
    2002, 128453, 12.86, 6.41, 6.45, 826;
    2003, 129227, 12.41, 6.40, 6.01, 774;
    2004, 129988, 12.29, 6.42, 5.87, 761;
    2005, 130756, 12.40, 6.51, 5.89, 768;
    2006, 131448, 12.09, 6.81, 5.28, 692;
    2007, 132129, 12.10, 6.93, 5.17, 681;
    2008, 132802, 12.14, 7.06, 5.08, 673;
    2009, 133450, 11.95, 7.08, 4.87, 648;
    2010, 134091, 11.90, 7.11, 4.79, 641;
    2011, 134916, 13.27, 7.14, 6.13, 825;
    2012, 135922, 14.57, 7.13, 7.43, 1006;
    2013, 136726, 13.03, 7.13, 5.90, 804;
    2014, 137646, 13.83, 7.12, 6.71, 920;
    2015, 138326, 11.99, 7.07, 4.93, 680;
    2016, 139232, 13.57, 7.04, 6.53, 906;
    2017, 140011, 12.64, 7.06, 5.58, 779;
    2018, 140541, 10.86, 7.08, 3.78, 530;
    2019, 141008, 10.41, 7.09, 3.32, 467;
    2020, 141212, 8.52, 7.07, 1.45, 204;
    2021, 141260, 7.52, 7.18, 0.34, 48];
    
    %Do polynomial fitting 
    warning off;
    p2=polyfit(data(:,1),data(:,2),2);
    p3=polyfit(data(:,1),data(:,2),3);
    p4=polyfit(data(:,1),data(:,2),4);
    warning on;
    
    %Calculate error
    p2_predict=polyval(p2,data(:,1));
    p3_predict=polyval(p3,data(:,1));
    p4_predict=polyval(p4,data(:,1));
    p2_error=sum((p2_predict-data(:,2)).^2);
    p3_error=sum((p3_predict-data(:,2)).^2);
    p4_error=sum((p4_predict-data(:,2)).^2);
    fprintf('2次、3次、4次多项式的拟合偏差平方和分别为:%d, %d, %d\n',...
        p2_error,p3_error,p4_error);
    
    %Predict the population size of 2022
    error_vec=[p2_error,p3_error,p4_error];
    [~,min_error_ind]=min(error_vec);
    switch min_error_ind
        case 1
            fprintf('最佳拟合多项式是2次。\n');
            population_2022=polyval(p2,2022);
        case 2
            fprintf('最佳拟合多项式是3次。\n');
            population_2022=polyval(p3,2022);
        case 3
            fprintf('最佳拟合多项式是4次。\n');
            population_2022=polyval(p4,2022);
    end
    fprintf('根据最佳拟合多项式预测的2022年人口数量为:%d万人\n',int32(population_2022));
    

    (3)代码运行结果

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月19日