2010-11-16 36 views
2

如果我這樣做在MATLAB以下幾點:有人可以解釋函數mkpp和ppval的行爲嗎?

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

這應該構建一個多項式f(x) = x^3x = 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更改我得到的結果?

回答

2

功能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 

在你的第二個例如,您有一個多項式x^3已移至範圍[1 1.5],另一個多項式x^3已移至範圍[1.5 2]。在x = 1.5處評估分段多項式給出的值爲零,發生在第二個多項式的開始處。

它可以幫助您可視化都使得多項式如下:

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 

alt text

+0

我在這個一直盯着這麼久了...謝謝!如果我想在某些向量點評估它,我該怎麼做?有比ppval更好的功能嗎? – Xodarap 2010-11-16 16:53:54

+0

@ Xodarap:您可以將點的向量傳遞給[PPVAL](http://www.mathworks.com/help/techdoc/ref/ppval.html),如上面的示例代碼示例所示。 – gnovice 2010-11-16 17:01:26

相關問題