matlab 加权最小二乘法
答案:3 悬赏:10
解决时间 2021-02-13 11:38
- 提问者网友:我是我
- 2021-02-12 21:53
matlab 加权最小二乘法
最佳答案
- 二级知识专家网友:茫然不知崩溃
- 2021-02-12 22:27
参考代码%生成测试数据a0=1;a1=2;a2=3;x1=rand(10,10);x2=rand(10,10);Y=a0+a1*x1+a2*x2;%加入随机噪声Y=Y+0.1*randn(size(y));%拟合函数形式f=@(k,x)k(1)+k(2)*x(:,1)+k(3)*x(:,2);x=[x1(:)x2(:)];k=lsqcurvefit(f,[1111],x,Y(:))n=size(x,1);plot(1:n,Y(:),'bo',1:n,f(k,x),'r:.')运行结果k=1.03091.97822.9800分别对应a0~a2,可见与原始系数比较吻合。
全部回答
- 1楼网友:两不相欠
- 2021-02-12 23:22
“/”是矩阵右除的符号,对应的函数是mrdivide。矩阵右除是通过左除实现的,也就是说,a/b = (b'\a')'。
“\”是矩阵左除的符号,对应的函数是mldivide。
x=a\b是线性方程组ax=b的解,而x=b/a是线性方程组xa=b的解(如果方程组欠定或超定,则解为最小二乘意义上的)。
以你举的例子来说,相当于求3x=1,4x=2,5x=3这样一个方程组的解,显然这个方程组属于超定的情况,无解,但可以求出最小二乘解x=0.52。
使用最小二乘拟合函数可以求出相同的解来:
k=lsqcurvefit(inline('k*x','k','x'),0,[3 4 5],[1 2 3])
- 2楼网友:我的任性你不懂
- 2021-02-12 23:03
k=2;
b=1;
x=1:1:30;
y=k*x+b+unifrnd(-1,1,1,length(x))*0.1;
X=[ones(length(x),1),x'];
Y=y';
w=ones(length(x),1)/length(x);
w=w/sum(w);
W=diag(w);
B=(X'*W^(-1)*X)^(-1)*X'*W^(-1)*Y;
Y2=X*B;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯