Matlab:绘制最优多项式插值的循环

时间:2015-12-05 16:45:23

标签: matlab loops interpolation matlab-figure

我正在尝试编写一个循环,通过可能的多项式插值拟合进行排序,然后绘制具有最小误差值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值的插值,然后绘制插值。

1 个答案:

答案 0 :(得分:0)

我建议保存循环的所有中间结果,然后决定在 for循环之后绘制的哪一个。

for i in reversed([' '.join(map(str,i)) for i in izip_longest(l1, l2, l3, l4, fillvalue=' ')]):
    print i