ppval and polyval giving different results

7 visualizzazioni (ultimi 30 giorni)
I created a piecewise polynomial using mkpp. But when I evaluate a set of points I get incorrect results using ppval, although polyval() gives correct result. Looks like I'm missing something. Any idea what that is?
Thanks!
>> ppm
ppm =
struct with fields:
form: 'pp'
breaks: [749.5 16747 32768 48771 64784]
coefs: [4×2 double]
pieces: 4
order: 2
dim: 1
K>> ppm.coefs
ans =
0.00031269 -10.246
0.00031268 -10.246
0.00031274 -10.247
0.00031265 -10.245
>> ppval(ppm,ppm.breaks(1))
ans =
-10.246
>> polyval(ppm.coefs(1,:),ppm.breaks(1))
ans =
-10.012
>> polyval(ppm.coefs(1,:),8750)
ans =
-7.51
>> ppval(ppm,8750)
ans =
-7.7444

Risposta accettata

Bruno Luong
Bruno Luong il 19 Apr 2022
Modificato: Bruno Luong il 19 Apr 2022
Here is a correct way to know how ppval works
pp=spline(cumsum(rand(1,10)),rand(1,10));
x=3;
ppval(pp,x)
ans = 2.1433
%
i=discretize(x,pp.breaks);
polyval(pp.coefs(i,:),x-pp.breaks(i))
ans = 2.1433
Your evaluation
polyval(ppm.coefs(1,:),8750)
is wrong unless pp.breaks(1) is 0.

Più risposte (1)

Torsten
Torsten il 19 Apr 2022
I think you fed "polyval" with the coefficients cut to a certain number of digits.
You must use the coefficients in full precision to get equal results from ppval and polyval.
  6 Commenti
Bruno Luong
Bruno Luong il 19 Apr 2022
"And I don't think you must recalculate them for the shifted polynomial."
You are wrong here is the doc of mkpp
"Polynomial coefficients, specified as an L-by-k matrix with the ith row coefs(i,:) containing the local coefficients of an order k polynomial on the ith interval, [breaks(i), breaks(i+1)]. In other words, the polynomial is coefs(i,1)*(X-breaks(i))^(k-1) + coefs(i,2)*(X-breaks(i))^(k-2) + ... + coefs(i,k-1)*(X-breaks(i)) + coefs(i,k)."
Torsten
Torsten il 19 Apr 2022
You are right. This also explains the deviations in the breakpoints themselves.

Accedi per commentare.

Categorie

Scopri di più su Interpolation in Help Center e File Exchange

Prodotti

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by