首页 文章

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

提问于
浏览
0

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

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

    p = {}; %initialize cell array, as the polynomials have different lengths
    for i=1:10
        [p{i},S] = polyfit(x,y,i);
        my_norm(i) = S.normr;
    end
    [~,k]=min(my_norm); %find the index of the minimum
    
    f = polyval(p{k},x);
    plot(x,y,'*',x,f,'-')
    axis([0  3  -2.5  12])
    title(['Order is: ',num2str(k),' norm is: ',num2str(my_norm(k))])
    

相关问题