【发布时间】:2013-11-26 03:47:58
【问题描述】:
我正在尝试找到最适合输入点集的多项式。
这是我目前的代码:
x=(1:length(meanValues));
y=meanValues(:);
A=fliplr(vander(x));
v=A \ y;
P(1: length(x))=0;
for i=1: length(x)
for j=1: length(v)
P(i)=P(i)+v(j)*x(i).^(j-1);
end
end
plot(x,y,'r*');
hold on;
plot(x, P);
- meanValues 是 [1x127] 向量,填充了 (0.0000-5.0000] 之间的双精度值
下面是绘制的平均值:
结果:
有人知道错误在哪里吗?
编辑 1:
所以这一次,我遍历了所有多项式阶并找到了最合适的阶。这是否更好?我可以优化这段代码吗?计算大约需要 1 秒,因此总共需要大约 30 秒。
tic
x=(1:length(meanValues));
y=meanValues(:)';
for i=1:length(meanValues)-1
[p,s,mu] = polyfit(x,y, i);
[f,delta] = polyval(p,x,s,mu);
if i==1
minf=f;
minmse = mean(delta.^2);
minp=p;
elseif minmse>mean(delta.^2)
minf=f;
minmse = mean(delta.^2);
minp=p;
end
end
toc
plot(x,y,'r*',x,minf,'-');
axis([0 length(meanValues) 0 max(meanValues)]);
【问题讨论】:
-
我的观点是,如果您需要研究一组点的凹度,正如您在下面的评论中所说,您应该使用样条曲线。两个具有相反符号斜率的相邻段将为您提供正确的凹度。