计算方法实验报告2
【课题名称】
最小二乘法拟合多项式程序实现
【目的和意义】
在一般情况下,不能要求近似曲线y=p(x)严格地通过所有数据点(xi,yi),亦即不能要求拟合函数在xi处的残差(亦称偏差)都严格地等于零。但是,为了使近似曲线能尽量反映所给数据点的变化趋势,要求残差的绝对值都较小还是需要的。达到这一目标的途径很多,如使残差平方和最小来选取拟合曲线y=p(x)的最小二乘法。
【计算
公式
小学单位换算公式大全免费下载公式下载行测公式大全下载excel公式下载逻辑回归公式下载
】
设拟合函数的形式为
为已知的线性无关函数,求系数
最小,则称相应的
为最小二乘拟合函数,特别地,若
,则称P(x)为m次最小二乘拟合多项式。
此时即取
,
,…,
,则由
知
,
故相应的法方程组为
解出此时的法方程即得多项式的系数。
【列主元高斯消去法程序流程图】
输入xi,yi(i=1,2,…m)及m,n
生成中间矩阵C
生成法方程的系数矩阵A=C’*C
生成法方程右端向量b=C’*Y
解法方程得ai,并求出均方误差以及最大偏差的值
输出ai,最大偏差,以及均方误差
【列主元高斯消去法Matlab主程序】
function f=zxec(x,y,z) %定义最小二乘法函数,其中x是自变量,y是因变量,为输入方便,x与y均定义为行向量,z为最小二乘法拟合多项式的最高次
n=length(x); %读取地区数据个数
c=ones(n,z+1);
for i=2:z+1 %构造中间矩阵C
for j=1:n
c(j,i)=x(j)^(i-1);
end
end
A=c'*c; %做出系数矩阵A
b=c'*y'; %做出矩阵b
a=inv(A)*b; %计算求a
det=0;
max=0;
for i=1:n
sum=a(1);
for j=2:z+1
sum=sum+ a(j)*(x(i)^(j-1));
end
temp1=abs(y(i)-sum);
if temp1>max
max=temp1; %比较
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
最大偏差
end
det=det+temp1^2; %累加求均方误差
end
m=length(a); %将a矩阵倒过来写,以配合函数输出函数poly2str
for k=1:floor(m/2)
temp2=a(k);
a(k)=a(m-k+1);
a(m-k+1)=temp2;
end
poly2str(a,'x') %以函数形式输出
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式
disp(['最大偏差=',num2str(max)]); %输出均方误差和最大偏差
det=sqrt(det);
disp(['均方误=',num2str(det)]);
【调用函数解题】
【编程疑难】
本次的最小二乘法的算法实现较为简单,过程比较清晰,只在调用poly2str函数直接输出表达式时碰到困难。由于开始得到的系数a矩阵的排列方式与poly2str函数输出表达式刚好相反,要通过将系数a矩阵倒过来写才能正确得出表达式。