EDA365电子论坛网
标题:
Matlab之用最小二乘建立模型预测值以下例子使用1960,1970,1990和2000的人口估计1...
[打印本页]
作者:
haidaowang
时间:
2020-10-29 15:35
标题:
Matlab之用最小二乘建立模型预测值以下例子使用1960,1970,1990和2000的人口估计1...
2 p" j: X( w5 |; r4 M
Matlab之用最小二乘建立模型预测值以下例子使用1960,1970,1990和2000的人口估计1980的人口。分别用了直线估计和抛物线估计
1 w4 b0 d. @9 e- v( T* g7 L
8 x, j T2 t2 D% F0 \* B) ~/ q
以下例子使用1960,1970,1990和2000的人口估计1980的人口。分别用了直线估计和抛物线估计。
; b- A% D* ~ a! D6 J
/ x9 p$ n& G( h' z1 C
% page 199 3
2 O: \ n1 | U6 C
% this problem is to estimate the populatipn in 1980 and
! I- Y' g1 _. K \4 ]! Q3 G* }9 `8 A
% compare the error using different method to estimate
4 g: W& r* {4 F6 ]. k' k
% one use line and the other is parabale
8 E/ J2 w9 F' Y9 a/ H* g
% input:none
5 J4 |* u$ H2 X2 u$ z8 l
% output:plot the figure and display error
, E$ ?9 Y( V, p( T9 K' r$ |
function page_199_3_script
$ \/ S5 {, Z+ c9 `7 b$ i, v
format long;
* p i7 N; N5 @
x0 = [0 10 30 40];
4 f" k6 v$ y: Y; @, t
y0 = [3039585530 3707475887 5281653820 6079603571];
* [) @: x. K$ H; Z
x1 = 0:.01:450;
5 V$ K' Y6 R) v. t! @) Y; E* Q$ ^4 u
c1 = polyfit(x0,y0,1);
8 y# O q# z$ T* T
error1 = norm(polyval(c1,x0)-y0,2);
2 J# f1 [; x0 J. c( r$ D6 ~ }; o
fprintf('使用直线拟合所得的RMSE为 %f\n',error1/2);
* p7 W- u1 }6 `0 U+ e1 M# J
y1_1980 = polyval(c1,20);
Z: t+ g) ?2 ~7 E8 Y0 c
fprintf('使用直线拟合的1980的人口 %f\n',y1_1980);
4 n/ e& c# z: }3 y
fprintf('拟合与实际上人口的误差为 %f\n\n',y1_1980-4452584592);
' f- P% K+ }; N9 a% h8 {
y1 = polyval(c1,x1);
8 o5 c6 N4 V5 G) @7 W3 j8 l
figure(1);
- I8 |+ v5 G% s( z4 ?9 l6 j
plot(x0,y0,'o',x1,y1);
! N! b% U6 U7 ~6 z# T) `. t
xlabel('let 1960 = 0/year');
0 {& j$ E! J5 }# `) H) e; ^6 D
ylabel('population');
5 f, R3 ~. ?" x
title('用直线拟合最小二乘所得的结果');
1 Y! U3 W+ c5 {9 @6 C
, a# m, u) j# D0 @
c2 = polyfit(x0,y0,2);
$ c" c( @2 j" ?& F, ^7 J) V& ?
error2 = norm(polyval(c2,x0)-y0,2);
2 R" E7 R$ Z3 L$ i1 s3 Q$ y
fprintf('使用抛物线拟合所得的RMSE为 %f\n',error2/2);
; _2 v8 U C5 W) u! i
y2_1980 = polyval(c2,20);
5 C; u C# S2 F. t
fprintf('使用抛物线拟合的1980的人口 %f\n',y2_1980);
- z' X- O R& c8 S( K
fprintf('拟合与实际上人口的误差为: %f\n',y2_1980-4452584592);
5 v% ^3 b" Q( f2 a9 E0 x
fprintf('我们从误差来看,使用抛物线的拟合效果更好\n\n');
5 y. S( ~0 \7 O
y2 = polyval(c2,x1);
8 O' g* X- V4 n
figure(2);
; m: b( a( r5 @) c9 f; H R
plot(x0,y0,'o',x1,y2);
8 n" i+ n' V0 G; z% R
xlabel('let 1960 = 0/year');
) f( k5 |1 Y; q* h3 V' E0 c* `6 B* k
ylabel('population');
6 X; ]( G& c7 p2 n y
title('用抛物线拟合最小二乘所得的结果');
; i! `* T" b6 y1 t' _1 {5 s8 L
, @$ g; Q4 X5 \: U. m
' J2 g* |! K* P
2 f- W( [2 w9 ^$ B/ b8 ]
参考函数:
+ y B$ s! E( O9 U" @6 j' z
/ p2 @ r- x+ x" ^
函数一:polyfit(x0,y0,2);得到对应点的最小二乘后的系数,2次拟合。
5 P1 W8 ^1 j* @) x0 b4 w) g/ X
函数二:polyval(c2,x1);得到插值系数为c2数组的插值多项式,得到的是一个x1代入后的对应值组成的一维数组。
作者:
youOK
时间:
2020-10-29 17:06
Matlab之用最小二乘建立模型预测值以下例子使用1960,1970,1990和2000的人口估计1980的人口。分别用了直线估计和抛物线估计
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2