我正在尝试编写一个循环,通过可能的多项式插值拟合进行排序,然后绘制具有最小误差值s.norm值的插值。到目前为止,我有:
for i=1:10
[p,S] = polyfit(x,y,i);
f = polyval(p,x);
subplot(5,2,i)
plot(x,y,'*',x,f,'-')
axis([0 3 -2.5 12])
title(['Order is: ',num2str(i),' norm is: ',num2str(S.normr)])
end
目前这将绘制$ i = {1,2,...,10} $的ith degree多项式的所有可能拟合,并将使用图形打印s.normr值。但是,我想更改它,以便循环选择具有最小S.normr值的插值并绘制该插值。为此,到目前为止我有以下内容:
for i=1:10
[p,S] = polyfit(x,y,i);
f = polyval(p,x);
%fbest = polyval(p,x) if S.normr = min(S.normr) for i
%subplot(1,1,i)
%plot(x,y,'*',x,fbest,'-')
axis([0 3 -2.5 12])
title(['Order is: ',num2str(i),' norm is: ',num2str(S.normr)])
end
我已经注释掉了我改变的部分。我相信逻辑是正确的,但我不确定如何将其转换为Matlab代码。
棘手的部分是我不希望循环继续,直到它满足指定的标准。相反,我希望它继续通过所有n = 10次迭代,然后选择具有最小S.normr作为其输出的迭代,然后将该选择打印为绘图。
tl; dr:第一段代码适用于绘制所有可能的插值。问题是我想操纵代码,以便不是绘制所有插值,而是选择具有最小S.normr值的插值,然后绘制插值。
答案 0 :(得分:0)
我建议保存循环的所有中间结果,然后决定在 for循环之后绘制的哪一个。
for i in reversed([' '.join(map(str,i)) for i in izip_longest(l1, l2, l3, l4, fillvalue=' ')]):
print i