实验9 人口预测与数据拟合(最小二乘法)

Posted 从零开始的智障生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验9 人口预测与数据拟合(最小二乘法)相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
在这里插入图片描述
最小二乘法数学原理请参考:多元函数及其微分法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个在前面的三次样条插值部分已经接触过了。只不过在二者侧重有所不同。
数据插值的部分使用三次样条插值重点是:将所有数据进行分块处理,使曲线变得光滑,且可以避免一些龙格的问题。
最小二叉树重点是:对所有数据直接处理,使曲线对所有已知的数据点进行处理,目的只有使曲线与数据的误差更小,但是随着自定义的经验公式的影响,某些情况下可能会误差理论上对测量的数据小但对现实的情形大,更类似于一般的多项式插值。
在这里插入图片描述
分别拟合3次和6次多项式曲线,并分析该组数据的总体发展趋势。

clear;close all;clc;
x=0:0.1:1;
y=[-0.4471	1.978	3.28	6.16	7.08	7.35	7.66	9.56	9.48	9.3	11.2];
plot(x,y,'k.','markersize',25);% 绘制数据点
p=polyfit(x,y,3);% 针对数据点,计算三次多项式基函数1,x,x^2,x^3的系数
p1=polyfit(x,y,6);% 针对数据点,计算三次多项式基函数1,x,x^2,x^3,x^4,x^5,x^6的系数
t=0:0.01:1.2;
s=polyval(p,t);% 计算三次多项式的各个自己给的点
s1=polyval(p1,t);% 计算六次多项式的各个自己给的点
hold on; % 绘制三次、六次多项式曲线
plot(t,s,'m-','linewidth',1);% 三次
plot(t,s1,'r--','linewidth',3);% 六次
grid;
legend("实验所给数据点","自己数据三次拟合","自己数据六次拟合");

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

clear;close all;clc;
t=1971:1990;
N=[8.523	8.718	8.921	9.086	9.242	9.372	9.497	9.626	9.754	9.871	10.007	10.165	10.301	10.436	10.585	10.751	10.93	11.103 11.27 11.433];
plot(t,N,'K.','markersize',20);
grid;hold on;
n=length(N);
a=sum(t(1:n));
b=sum(t(1:n).*t(1:n));
c=sum(log(N(1:n)));
d=sum(t(1:n).*log(N(1:n)));
A=[n,a;a,b];
B=[c;d];
p=inv(A)*B;%得出系数
x=1971:2010;
y=exp(p(1)+p(2)*x);% 代回经验公式并预测 1991-2020plot(x,y,'r-','linewidth',2);
str="N(t)=e\\^("+num2str(p(1))+"+"+num2str(p(2))+"t)";
legend("Data point","Malthus拟合:"+str);

在这里插入图片描述

clear;close all;clc;
t=1971:1990;
N=[8.523	8.718	8.921	9.086	9.242	9.372	9.497	9.626	9.754	9.871	10.007	10.165	10.301	10.436	10.585	10.751	10.93	11.103 11.27 11.433];
plot(t,N,'K.','markersize',20);
grid;hold on;
M=N.^(-1)-20^(-1);% 先算M(t)剩余部分与上面Malthus模型一样
n=length(N);
a=sum(t(1:n));
b=sum(t(1:n).*t(1:n));
c=sum(log(M(1:n)));
d=sum(t(1:n).*log(M(1:n)));
A=[n,a;a,b];
B=[c;d];
p=inv(A)*B;%得出系数
x=1971:2010;
y=1./(20^(-1)+exp(p(1)+p(2)*x));% 代回经验公式并预测 1991-2020plot(x,y,'r-','linewidth',2);
str="N(t)=1./[20\\^(-1)+e\\^("+num2str(p(1))+"+"+num2str(p(2))+"t])";
legend("Data point","Logistic拟合:"+str);

在这里插入图片描述

以上是关于实验9 人口预测与数据拟合(最小二乘法)的主要内容,如果未能解决你的问题,请参考以下文章

最小二乘法思想

已知一组数据,用JAVA JFRAME利用最小二乘法求出该组数据的多项式拟合公式

线性回归——最小二乘法_实例

最小二乘法拟合与多项式拟合的关系是啥?

Python最小二乘法拟合与作图

机器学习最小二乘法