2

複数のデータセットから派生した区分多項式を追加する必要があります。補間せずに区分多項式を足し合わせる簡単な方法はありますか? つまり、PP1 と PP2 が与えられた場合、PP3 を生成する方法はありますか (PP3 は区分多項式のままです)。例えば..

    t1 = linspace(0,1,5);
    t2 = linspace(0,1,7);
    pp1 = spline(t1,sin(pi*t1));
    pp2 = spline(t2,t2.^2);
    close all
    hold on
    tnew = linspace(0,1,50);
    h(:,1) = plot(tnew,ppval(pp1,tnew));
    plot(t1,ppval(pp1,t1),'bs')
    h(:,2) = plot(tnew,ppval(pp2,tnew));
    plot(t2,ppval(pp2,t2),'rs')
    h(:,3) = plot(tnew,ppval(pp1,tnew)+ppval(pp2,tnew));
    legend(h,{'spline of sin(\pi t)','spline of t^2','sin(\pi t)+t^2'},...
                'location','northwest')
    xlabel('t')

tnewしかし、明示的に指定する代わりに、pp3効果的にpp1+である新しい区分多項式が必要ですpp2

問題例からの出力

4

2 に答える 2

3

これはおそらく取得する最も簡単な方法ですpp1+pp2質問のコードに追加します:

    pp12 = @(x) ppval(pp1,x)+ppval(pp2,x);

    breaks = unique([pp1.breaks,pp2.breaks]);
    pp3 = spline(breaks,pp12(breaks));

    plot(tnew,ppval(pp3,tnew),'k:');

黒い点線を与える:

区分多項式

pp3pp1 と pp2 のブレークポイントによってのみ定義されたセグメントを持つ区分多項式形式です。を実行すると、 のオーダーである がmax(abs(ppval(pp3,tnew) - pp12(tnew)))得られます。2.7756e-16eps

@LuisMendo と @TroyHaskin の提案に感謝します。

于 2015-06-23T19:33:01.400 に答える