La fonction MKPP va changement polynôme de sorte que x = 0
commencera au début de la plage correspondante que vous lui donnez. Dans votre premier exemple, le x^3
polynôme est déplacé vers la plage [1 2]
, donc si vous voulez évaluer le polynôme à un non décalé gamme de [0 1]
, vous devez faire ce qui suit:
>> 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
Dans votre deuxième Par exemple, vous avez un polynôme x^3
décalé à la plage [1 1.5]
et un autre polynomial x^3
décalé à la plage de [1.5 2]
. L'évaluation du polynôme par morceaux à x = 1.5
vous donne une valeur de zéro, apparaissant au début du deuxième polynôme.
Il peut aider à visualiser les polynômes que vous faites comme suit:
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

J'ai regardais ça depuis si longtemps ... Merci! Si je veux l'évaluer à un vecteur de points, comment le ferais-je? Y at-il une meilleure fonction à utiliser que ppval? – Xodarap
@Xodarap: Vous pouvez passer un vecteur de points à [PPVAL] (http://www.mathworks.com/help/techdoc/ref/ppval.html) comme illustré dans mon exemple de code de traçage ci-dessus. – gnovice