2

MATLAB で次のようにすると:

ppval(mkpp(1:2, [1 0 0 0]),1.5)
ans =  0.12500

これは多項式を構築し、f(x) = x^3で評価する必要がありx = 1.5ます。では、なぜ結果が得られるの1.5^3 = .125でしょうか。ここで、最初の引数で定義されたドメインを に変更すると、次のようmkppになります。

> ppval(mkpp([1 1.5 2], [[1 0 0 0]; [1 0 0 0]]), 1.5)
ans = 0

関数を変更せずに、答えを変更します。素晴らしい。

ここで何が起こっているのか誰か説明できますか? 最初の引数を変更して得られる結果を変更するにはどうすればよいmkppですか?

4

1 に答える 1

3

関数MKPPは、多項式をシフトx = 0して、指定した対応する範囲の先頭から開始するようにします。最初の例では、多項式x^3は範囲 にシフトされるため、シフトされていない範囲 で[1 2]多項式を評価する場合は、次の手順[0 1]を実行する必要があります。

>> pp = mkpp(1:2,[1 0 0 0]);   %# Your polynomial
>> ppval(pp,1.5+pp.breaks(1))  %# Shift evaluation point by the range start

ans =

    3.3750                     %# The answer you expect

2 番目の例では、1 つの多項式x^3が の範囲にシフトされ、[1 1.5]別の多項式x^3が の範囲にシフトされます[1.5 2]。で区分的多項式を評価するx = 1.5と、2 番目の多項式の開始時に発生するゼロの値が得られます。

次のように、作成している多項式を視覚化すると役立つ場合があります。

x = linspace(0,3,100);                     %# A vector of x values
pp1 = mkpp([1 2],[1 0 0 0]);               %# Your first piecewise polynomial
pp2 = mkpp([1 1.5 2],[1 0 0 0; 1 0 0 0]);  %# Your second piecewise polynomial
subplot(1,2,1);                            %# Make a subplot
plot(x,ppval(pp1,x));                      %# Evaluate and plot pp1 at all x
title('First Example');                    %# Add a title
subplot(1,2,2);                            %# Make another subplot
plot(x,ppval(pp2,x));                      %# Evaluate and plot pp2 at all x
axis([0 3 -1 8])                           %# Adjust the axes ranges
title('Second Example');                   %# Add a title

代替テキスト

于 2010-11-16T16:46:58.710 に答える