作业帮 > 综合 > 作业

以下是关于matlab中直线的最小二乘拟合,是矩阵除法的编程,(y=kx+b)

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 11:53:59
以下是关于matlab中直线的最小二乘拟合,是矩阵除法的编程,(y=kx+b)
function[k,b]=linefit(x,y)
n=length(x);
x=reshape(x,n,1);
y=reshape(y,n,1);
A=[x,ones(n,1)];
bb=y;
B=A'*A;
bb=A'*bb;
yy=B\bb;
k=yy(1);
b=yy(2);
最小二乘估计的一般公式:已知Y = Hx;其中Y是测量数据,H是观测矩阵,x是待定参数.H应该是一个行数多于列数的矩阵.则,
X = (H.'*H)\H.'*Y
是x的最小二乘估计.
现在,要估计的参数就是[k; b].每一次观测都可以表示为y = [x 1]*[k; b]. 将数据纵向排列起来,由此可以构造出Y和观测矩阵H.
再问: 最小二乘法求参数我理解,就是下面这些语句不是很理解,能帮忙解释一下吗? bb=y; B=A'*A; bb=A'*bb; yy=B\bb; k=yy(1); b=yy(2);
再答: 就是这个式子X = (H.'*H)\H.'*Y 只是变量名起的不一样 只要做等式代入就可以把上面几行代码变成这一句了。请问您具体那里看不懂? X向量的长度是2,从向量中取元素这个操作就是用()实现的。matlab中计数是从1开始的。
再问: B=A'*A; bb=A'*bb; 这两句是什么意思啊?谢谢!!
再答: 好吧。在矩阵为实数的情况下 共轭操作(')等价于转置(.')。 再说就没意思了吧。。。yy=B\bb;,yy就是最终结果了,对照一下X = (H.'*H)\H.'*Y,你应该能对应上吧?至于中间变量你根本就不要管 反正代入进来都是一样的。