在matlab中利用散乱点的大小对最佳拟合线进行加权

在matlab中利用散乱点的大小对最佳拟合线进行加权,matlab,Matlab,是否可以使用点的大小来“加重”最适合的线 x = [1 2 3 4 5]; y = [2 4 5 3 4]; s = [10 15 20 2 5]; scatter(x,y,s) hold on weight = s; p = polyfit(x,y,1); %how do I take into account the size of the points? f = polyval(p,x); plot(x,f,'-r') 根据Marcin的建议,您可以将lscov合并到polyfit中。如

是否可以使用点的大小来“加重”最适合的线

x = [1 2 3 4 5];
y = [2 4 5 3 4];
s = [10 15 20 2 5];
scatter(x,y,s)
hold on
weight = s;
p = polyfit(x,y,1); %how do I take into account the size of the points?
f = polyval(p,x);
plot(x,f,'-r')

根据Marcin的建议,您可以将
lscov
合并到
polyfit
中。如所述,多项式拟合是通过计算
x
V
,然后执行
p=V\y
来完成的。这是任何最小二乘法解决方案的标准形式,并通过MATLAB将其自身用于加权最小二乘法

使用
x
y
weight
向量,而不是调用
polyfit(x,y,n)
可以执行以下操作:

% Construct Vandermonde matrix. This code is taken from polyfit.m
V(:,n+1) = ones(length(x),1,class(x));
for j = n:-1:1
   V(:,j) = x.*V(:,j+1);
end
% Solve using weighted-least-squares
p = lscov(V,y,weight);

您甚至可以更进一步,修改polyfit.m本身以包含此功能,或者添加另一个函数polyfitw.m(如果您不想修改原始MATLAB函数)。然而,请注意,
polyfit
具有更多可选的结构输出,使用QR分解计算,如文档中所述。将这些输出推广到加权情况需要更多的工作。

您可以使用wieghted最小二乘拟合。关于matlab的更多信息和示例是。谢谢@Marcin-查看了这个文档,我不知道如何使用这个函数。我假设a=lscov(x,y,s)来获得坐标?任何帮助都将不胜感激。@user2861089我扩展了Marcin的建议。这对您有帮助吗?您应该解释您的答案欢迎使用堆栈溢出!虽然这个答案可能是正确和有用的,但如果您在答案中包含一些解释,以解释它如何帮助解决问题,则更可取。如果有一个变化(可能无关)导致它停止工作,并且用户需要了解它曾经是如何工作的,那么这在将来变得特别有用。我将尝试:lscov解决超定线性系统Ap=y+误差,其中w是每个x的权重向量。所以你要解p(1)x(1)+p(2)=y(1);p(1)x(2)+p(2)=y(2)…p(1)x(n)+p(2)=y(n)。在我进行以下更改之前,此代码对我不起作用-第4行:
V(:,j)=x'.*V(:,j+1);第7行:
p=lscov(V,y',重量)x = (1:10)';
y = (3 * x + 5) + rand(length(x),1)*5;
w =  ones(1,length(y));

A = [x ones(length(x),1)];
p = lscov(A,y,w);

plot(x,y,'.');
hold on
plot(x,p(1)*x + p(2),'-r');