数模自用,方便队友复制粘贴代码
1.main函数
%第四讲 拟合
%分析近年来人口数据,并且对未来几年人口进行预测
load population.mat
load year.mat
%看起来像是一次,用了指数SSE更小,再用了二次更好
%即二次>指数>一次
%plot(year,population,'o')
%hold on
[fitresult, gof] = createFit(year, population)
hold on
future_year=[2018:1:2022]
p1=12.46
p2=-4.948e+04
p3= 4.925e+07
predict_population=p1*future_year.*future_year+p2*future_year+p3
plot(future_year,predict_population,'o','DisplayName','predict_population')
plot(future_year,predict_population,'-','DisplayName','predict_line')
%cftool
2.生成拟合曲线函数及图像代码
function [fitresult, gof] = createFit(year, population)
%CREATEFIT(YEAR,POPULATION)
% 创建一个拟合。
%
% 要进行 '人口数据预测' 拟合的数据:
% X 输入: year
% Y 输出: population
% 输出:
% fitresult: 表示拟合的拟合对象。
% gof: 带有拟合优度信息的结构体。
%% 拟合: '人口数据预测'。
[xData, yData] = prepareCurveData( year, population );
% 设置 fittype 和选项。
ft = fittype( 'poly2' );
% 对数据进行模型拟合。
[fitresult, gof] = fit( xData, yData, ft );
% 绘制数据拟合图。
figure( 'Name', '人口数据预测' );
h = plot( fitresult, xData, yData,'o' );
legend( h, 'population', 'population fitting', 'Location', 'NorthWest', 'Interpreter', 'none');
% 为坐标区加标签
xlabel( 'year', 'Interpreter', 'none' );
ylabel( 'population', 'Interpreter', 'none' );
grid on