Hauptinhalt

polyval

Polynomiale Auswertung

Beschreibung

y = polyval(p,x) wertet das Polynom p bei jedem Punkt von x aus. Das Argument p ist ein Vektor mit der Länge n+1, dessen Elemente die Koeffizienten (in absteigenden Potenzen) eines Polynoms des n. Grades sind:

p(x)=p1xn+p2xn1+...+pnx+pn+1.

Die polynomialen Koeffizienten in p können von Funktionen wie polyint, polyder und polyfit für verschiedene Zwecke berechnet werden, Sie könne jedoch beliebige Vektoren für die Koeffizienten angeben.

Um ein Polynom im Sinne einer Matrix auszuwerten, verwenden Sie stattdessen polyvalm.

Beispiel

[y,delta] = polyval(p,x,S) verwendet die optionale Ausgabestruktur S, die von polyfit erzeugt wird, um Fehlerschätzungen zu generieren. delta ist eine Schätzung des Standardfehlers bei der Prognose einer zukünftigen Beobachtung bei x von p(x).

Beispiel

y = polyval(p,x,[],mu) oder [y,delta] = polyval(p,x,S,mu) verwenden die von polyfit erzeugte optionale Ausgabe mu, um die Daten zu zentrieren und zu skalieren. mu(1) ist mean(x) und mu(2) ist std(x). polyval zentriert mithilfe dieser Werte x bei null und skaliert den Wert, um die Standardabweichung der Einheiten zu ermitteln,

x^=xx¯σx.

Diese Zentrierung und Skalierung verbessert die numerischen Eigenschaften des Polynoms.

Beispiel

Beispiele

alle reduzieren

Werten Sie das Polynom p(x)=3x2+2x+1 an den Punkten x=5,7,9 aus. Die polynomialen Koeffizienten können durch den Vektor [3 2 1] dargestellt werden.

p = [3 2 1];
x = [5 7 9];
y = polyval(p,x)
y = 1×3

    86   162   262

Auswerten des definiten Integrals

I=-13(3x4-4x2+10x-25)dx.

Erstellen Sie einen Vektor zur Darstellung des polynomialen Integranden 3x4-4x2+10x-25. Der Term x3 fehlt und hat dementsprechend einen Koeffizienten von 0.

p = [3 0 -4 10 -25];

Verwenden Sie polyint, um das Polynom mit einer Integrationskonstante gleich 0 zu integrieren.

q = polyint(p)
q = 1×6

    0.6000         0   -1.3333    5.0000  -25.0000         0

Finden Sie den Wert des Integrals, indem Sie q an den Grenzwerten der Integration auswerten.

a = -1;
b = 3;
I = diff(polyval(q,[a b]))
I = 
49.0667

Passen Sie ein lineares Modell an einen Satz von Datenpunkten an und plotten Sie die Ergebnisse. Berücksichtigen Sie dabei eine Schätzung eines 95%-Vorhersageintervalls.

Erstellen Sie einige Vektoren aus Stichprobendatenpunkten (x,y). Verwenden Sie polyfit, um ein Polynom ersten Grades an die Daten anzupassen. Geben Sie zwei Ausgaben an, um die Koeffizienten für die lineare Anpassung und die Fehlerschätzstruktur zurückzugeben.

x = 1:100; 
y = -0.3*x + 2*randn(1,100); 
[p,S] = polyfit(x,y,1)
p = 1×2

   -0.3142    0.9614

S = struct with fields:
           R: [2×2 double]
          df: 98
       normr: 22.7673
    rsquared: 0.9407

Werten Sie die Anpassung des Polynoms 1. Grades in p an den Punkten in x aus. Geben Sie die Fehlerschätzstruktur als dritte Eingabe an, sodass polyval eine Schätzung des Standardfehlers berechnet. Die Standardfehlerschätzung wird in delta zurückgegeben.

[y_fit,delta] = polyval(p,x,S);

Plotten Sie die Originaldaten, die lineare Anpassung und das 95%-Vorhersageintervall y±2Δ.

plot(x,y,'bo')
hold on
plot(x,y_fit,'r-')
plot(x,y_fit+2*delta,'m--',x,y_fit-2*delta,'m--')
title('Linear Fit of Data with 95% Prediction Interval')
legend('Data','Linear Fit','95% Prediction Interval')

Figure contains an axes object. The axes object with title Linear Fit of Data with 95% Prediction Interval contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Linear Fit, 95% Prediction Interval.

Erstellen Sie eine Tabelle mit Populationsdaten für die Jahre 1750 bis 2000 und plotten Sie die Datenpunkte.

year = (1750:25:2000)';
pop = 1e6*[791 856 978 1050 1262 1544 1650 2532 6122 8170 11560]';
T = table(year, pop)
T=11×2 table
    year       pop   
    ____    _________

    1750     7.91e+08
    1775     8.56e+08
    1800     9.78e+08
    1825     1.05e+09
    1850    1.262e+09
    1875    1.544e+09
    1900     1.65e+09
    1925    2.532e+09
    1950    6.122e+09
    1975     8.17e+09
    2000    1.156e+10

plot(year,pop,'o')

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

Verwenden Sie polyfit mit drei Ausgaben zur Anpassung eines Polynoms 5. Grades mithilfe von Zentrierung und Skalierung, wodurch sich die numerischen Eigenschaften des Problems verbessern. polyfit zentriert die Daten in year bei 0 und skaliert sie, sodass sich eine Standardabweichung von 1 ergibt. Auf diese Weise lässt sich eine falsch konditionierte Vandermonde-Matrix in der Anpassungsberechnung vermeiden.

[p,~,mu] = polyfit(T.year, T.pop, 5);

Verwenden Sie polyval mit vier Eingaben, um p mit den skalierten Jahren, (year-mu(1))/mu(2), auszuwerten. Plotten Sie die Ergebnisse in Abhängigkeit von den ursprünglichen Jahren.

f = polyval(p,year,[],mu);
hold on
plot(year,f)
hold off

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

Eingabeargumente

alle reduzieren

Polynomiale Koeffizienten, angegeben als Vektor. Beispielsweise stellt der Vektor [1 0 1] das Polynom x2+1 und der Vektor [3.13 -2.21 5.99] das Polynom 3.13x22.21x+5.99 dar.

Weitere Informationen finden Sie unter Erstellen und Auswerten von Polynomen.

Datentypen: single | double
Unterstützung komplexer Zahlen: Ja

Abfragepunkte, angegeben als Vektor. polyval wertet das Polynom p an den Punkten in x aus und gibt die entsprechenden Funktionswerte in y zurück.

Datentypen: single | double
Unterstützung komplexer Zahlen: Ja

Fehlerschätzstruktur. Diese Struktur ist das zweite Ergebnis in der Syntax [p,S] = polyfit(x,y,n). Geben Sie S als Eingabe für polyval an, um Fehlerschätzungen zu erhalten. S enthält die Felder in dieser Tabelle.

FeldBeschreibung
RDreiecksfaktor R (möglicherweise permutiert) aus einer QR-Zerlegung der Vandermonde-Matrix von x
dfFreiheitsgrade
normrNorm des Residuums
rsquaredBestimmtheitskoeffizient oder (nicht angepasstes) R-Quadrat

Wenn die Daten in y zufällig sind, ist eine Schätzung der Kovarianzmatrix von p gleich (Rinv*Rinv')*normr^2/df, wobei Rinv die Inverse von R ist.

Zentrierungs- und Skalierungswerte, angegeben als Vektor mit zwei Elementen. Dieser Vektor ist eine optionale Ausgabe von [p,S,mu] = polyfit(x,y,n) und wird verwendet, um die numerischen Eigenschaften der Anpassung und Auswertung des Polynoms p zu verbessern. Der Wert mu(1) ist mean(x) und mu(2) ist std(x). Diese Werte zentrieren die Abfragepunkte in x bei null mit einer Einheit-Standardabweichung.

Geben Sie mu an, um p bei den skalierten Punkten (x - mu(1))/mu(2) auszuwerten.

Ausgabeargumente

alle reduzieren

Funktionswerte, zurückgegeben als Vektor mit derselben Größe wie die Abfragepunkte x. Der Vektor enthält das Ergebnis einer Auswertung des Polynoms p bei jedem Punkt in x.

Standardfehler der Prognose, zurückgegeben als Vektor mit derselben Größe wie die Abfragepunkte x. Im Allgemeinen entspricht ein Intervall von y ± Δ etwa einem 68-prozentigen Prognoseintervall für zukünftige Beobachtungen großer Stichproben und y ± 2Δ einem 95-prozentigen Prognoseintervall.

Wenn es sich bei den Koeffizienten in p um Kleinste-Quadrat-Schätzungen handelt, die von polyfit berechnet wurden und die Fehler in der Dateneingabe für polyfit unabhängig, normal und konstantvariant sind, ist y ± Δ ein mindestens 50-prozentiges Prognoseintervall.

Erweiterte Fähigkeiten

alle erweitern

C/C++ Codegenerierung
Generieren Sie C und C++ Code mit MATLAB® Coder™.

Versionsverlauf

Eingeführt vor R2006a