用Matlab做曲线拟合的最小二乘法
xl=[350350350350350350350350350500500500500500500500500500650650650650650650650650650...
xl=[350 350 350 350 350 350 350 350 350 500 500 500 500 500 500 500 500 500 650 650 650 650 650 650 650 650 650];
x2=[2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5];
x3=[2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428];
y=[90.27 93.68 92.65 87.4 91.71 93.94 86.49 93.9 93.6 82.4 92.27 93.98 87.58 93.01 93.24 82.96 92.61 94.83 90.32 92.6 92.77 89.97 90.31 93.47 90.51 92.61 94.04];
每3个x为一组对应一个y,请问怎样编写matlab程序,进行最小二乘法拟合,得到回归方程……很迷茫,看书都不知道从哪里看起,还没有入门…… 展开
x2=[2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5];
x3=[2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428];
y=[90.27 93.68 92.65 87.4 91.71 93.94 86.49 93.9 93.6 82.4 92.27 93.98 87.58 93.01 93.24 82.96 92.61 94.83 90.32 92.6 92.77 89.97 90.31 93.47 90.51 92.61 94.04];
每3个x为一组对应一个y,请问怎样编写matlab程序,进行最小二乘法拟合,得到回归方程……很迷茫,看书都不知道从哪里看起,还没有入门…… 展开
3个回答
展开全部
x1=[350 350 350 350 350 350 350 350 350 500 500 500 500 500 500 500 500 500 650 650 650 650 650 650 650 650 650];
x2=[2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5];
x3=[2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428];
y=[90.27 93.68 92.65 87.4 91.71 93.94 86.49 93.9 93.6 82.4 92.27 93.98 87.58 93.01 93.24 82.96 92.61 94.83 90.32 92.6 92.77 89.97 90.31 93.47 90.51 92.61 94.04];
%每3个x为一组对应一个y,请问怎样编写matlab程序,进行最小二乘法拟合,得到回归方程……很迷茫,看书都不知道从哪里看起,还没有入门……
format short g
Y=y'
X11=[ones(1,length(y));x1;x2;x3]'
B1=regress(Y,X11)% 多元一次线性回归
[m,n]=size(X11)
X22=[];
for i=2:n
for j=2:n
if i<=j
X22=([X22,X11(:,i).*X11(:,j)]);
else
continue
end
end
end
X=[X11,X22];
B2=regress(Y,X)% 多元二次线性回归
[Y X*B2 Y-X*B2]
plot(Y,X11*B1,'o',Y,X*B2,'*')
hold on,line([min(y),max(y)],[min(y),max(y)])
axis([min(y) max(y) min(y) max(y)])
legend('一次线性回归','二次线性回归')
xlabel('实际值');ylabel('计算值')
运行结果:
X11 =
1 350 2 2.33
1 350 2 1
1 350 2 0.428
1 350 3.5 2.33
1 350 3.5 1
1 350 3.5 0.428
1 350 5 2.33
1 350 5 1
1 350 5 0.428
1 500 2 2.33
1 500 2 1
1 500 2 0.428
1 500 3.5 2.33
1 500 3.5 1
1 500 3.5 0.428
1 500 5 2.33
1 500 5 1
1 500 5 0.428
1 650 2 2.33
1 650 2 1
1 650 2 0.428
1 650 3.5 2.33
1 650 3.5 1
1 650 3.5 0.428
1 650 5 2.33
1 650 5 1
1 650 5 0.428
B1 =
94.718
0.0010963
0.022593
-3.2882
m =
27
n =
4
B2 =
111.98
-0.070507
-0.51146
-1.6597
6.0444e-005
0.0015111
0.0046857
0.03037
-0.34654
-0.96485
ans =
90.27 87.965 2.305
93.68 93.186 0.49375
92.65 94.382 -1.7321
87.4 87.031 0.36943
91.71 92.943 -1.2331
93.94 94.436 -0.49629
86.49 86.233 0.25722
93.9 92.837 1.0633
93.6 94.627 -1.0272
82.4 87.187 -4.7867
92.27 91.473 0.79689
93.98 92.267 1.7131
87.58 86.592 0.98778
93.01 91.57 1.44
93.24 92.661 0.57889
82.96 86.134 -3.1744
92.61 91.804 0.80644
94.83 93.192 1.638
90.32 89.128 1.1917
92.6 92.48 0.12004
92.77 92.872 -0.10171
89.97 88.874 1.0961
90.31 92.917 -2.6069
93.47 93.606 -0.13593
90.51 88.756 1.7539
92.61 93.49 -0.88042
94.04 94.477 -0.43682
效果不是太好,用三次方可能效果好些,我没有时间了,你仿照二次方的自己写。
x2=[2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5 2 2 2 3.5 3.5 3.5 5 5 5];
x3=[2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428 2.33 1 0.428];
y=[90.27 93.68 92.65 87.4 91.71 93.94 86.49 93.9 93.6 82.4 92.27 93.98 87.58 93.01 93.24 82.96 92.61 94.83 90.32 92.6 92.77 89.97 90.31 93.47 90.51 92.61 94.04];
%每3个x为一组对应一个y,请问怎样编写matlab程序,进行最小二乘法拟合,得到回归方程……很迷茫,看书都不知道从哪里看起,还没有入门……
format short g
Y=y'
X11=[ones(1,length(y));x1;x2;x3]'
B1=regress(Y,X11)% 多元一次线性回归
[m,n]=size(X11)
X22=[];
for i=2:n
for j=2:n
if i<=j
X22=([X22,X11(:,i).*X11(:,j)]);
else
continue
end
end
end
X=[X11,X22];
B2=regress(Y,X)% 多元二次线性回归
[Y X*B2 Y-X*B2]
plot(Y,X11*B1,'o',Y,X*B2,'*')
hold on,line([min(y),max(y)],[min(y),max(y)])
axis([min(y) max(y) min(y) max(y)])
legend('一次线性回归','二次线性回归')
xlabel('实际值');ylabel('计算值')
运行结果:
X11 =
1 350 2 2.33
1 350 2 1
1 350 2 0.428
1 350 3.5 2.33
1 350 3.5 1
1 350 3.5 0.428
1 350 5 2.33
1 350 5 1
1 350 5 0.428
1 500 2 2.33
1 500 2 1
1 500 2 0.428
1 500 3.5 2.33
1 500 3.5 1
1 500 3.5 0.428
1 500 5 2.33
1 500 5 1
1 500 5 0.428
1 650 2 2.33
1 650 2 1
1 650 2 0.428
1 650 3.5 2.33
1 650 3.5 1
1 650 3.5 0.428
1 650 5 2.33
1 650 5 1
1 650 5 0.428
B1 =
94.718
0.0010963
0.022593
-3.2882
m =
27
n =
4
B2 =
111.98
-0.070507
-0.51146
-1.6597
6.0444e-005
0.0015111
0.0046857
0.03037
-0.34654
-0.96485
ans =
90.27 87.965 2.305
93.68 93.186 0.49375
92.65 94.382 -1.7321
87.4 87.031 0.36943
91.71 92.943 -1.2331
93.94 94.436 -0.49629
86.49 86.233 0.25722
93.9 92.837 1.0633
93.6 94.627 -1.0272
82.4 87.187 -4.7867
92.27 91.473 0.79689
93.98 92.267 1.7131
87.58 86.592 0.98778
93.01 91.57 1.44
93.24 92.661 0.57889
82.96 86.134 -3.1744
92.61 91.804 0.80644
94.83 93.192 1.638
90.32 89.128 1.1917
92.6 92.48 0.12004
92.77 92.872 -0.10171
89.97 88.874 1.0961
90.31 92.917 -2.6069
93.47 93.606 -0.13593
90.51 88.756 1.7539
92.61 93.49 -0.88042
94.04 94.477 -0.43682
效果不是太好,用三次方可能效果好些,我没有时间了,你仿照二次方的自己写。
展开全部
建议你看下:实用化工计算机模拟-MATLAB在化学工程中的应用
常用的三个拟合函数
csaps() 三次样条曲线
spap2() B样条曲线
spaps() B样条曲线
看你要生成对应去曲线只需调用对应函数,输入参数即可。
常用的三个拟合函数
csaps() 三次样条曲线
spap2() B样条曲线
spaps() B样条曲线
看你要生成对应去曲线只需调用对应函数,输入参数即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
命令窗口输入x=[0,0.5,1,1.5,2,2.5,3,3.5];y=[1,2.4,3.1,5.0,7,11,17,24];cftool
在新的图形界面中,点data,creat
data,x与y选择相应的创造data后,在fit里选择new
fit,在选择自己想要的函数(有很多函数选择,还可以自定义,不过我没自定义过),得到结果,
如果要看图形,那里有figure,画图即可
cftool是很强大的曲线拟合工具箱,也很容易操作,试试吧
在新的图形界面中,点data,creat
data,x与y选择相应的创造data后,在fit里选择new
fit,在选择自己想要的函数(有很多函数选择,还可以自定义,不过我没自定义过),得到结果,
如果要看图形,那里有figure,画图即可
cftool是很强大的曲线拟合工具箱,也很容易操作,试试吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询