WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fehler bei Newtonscher Interpolation berechnen

 

simosim
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 22.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2013, 03:30     Titel: Fehler bei Newtonscher Interpolation berechnen
  Antworten mit Zitat      
Hallo

Ich würde gerne den Maximalfehler der newtonschen Interpolation mit Hilfe einer Formel in Octave berechnen. Die Koeffizienten für das Polynom habe ich bereits berechnen. Die Knotenanzahl ist 12, also ist das ein Polynom des elften Grades. Ich habe einige Artikel dazu gelesen, weiß aber nicht, wie ich die Formeln in der Praxis einsetzen soll. Eine Formel sieht interessant aus:

Rn=f[xn+1, xn, xn-1, ....., x]*(x-x1)*(x-x2)*......*(x-xn)

Die Formel mit der Ableitung des n+1 Grades wird es wohl nicht tun, da das Polynom keine Ableitung diesen Grades hat.

Kann mir jemand bitte erklären, wie ich den Fehler berechne? Für den Moment bin ich ziemlich ratlos.
Private Nachricht senden Benutzer-Profile anzeigen


Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 23.06.2013, 17:04     Titel:
  Antworten mit Zitat      
Hallo,

das Stichwort hierzu sind die "dividierten Differenzen", welche in der Form f[x1,x2,...,xn] geschrieben werden.

Anbei ein Auszug aus der Numerik-Vorlesung Wink

Ich habe das ganze mal Programmiert, hab jedoch keine Zeit das genau zu erläutern. Ich berechne im Skript die dividierten Differenzen und (da ich keine einfachere Möglichkeit sehe) erstelle mir das Polynom als Anonymous-Funktion aus einem String, den ich automatisch generiere.

Code:

% Polynominterpolation mit Newton (Dividierte Differenzen)

% Stuetzstellen:
x = [0 1 2 3];
p = x.^3; % Beispielpolynom

fmat = zeros(length(x)); % Matrix, wo dividierte Differenzen eingetragen werden
fmat(:,1) = p'; % Erste Spalte sind die Stuetzstellen selbst

k = length(x); % Zeilen die Berechnet werden


for j = 2:length(x);% Die Spalten abarbeiten (erste Spalte existiert schon)
    % Die Zeilen abarbeiten (s. Dreiecksform der dividierten Differenten im Skript)
    % Die zu berechnenden Zeilen werden "nach rechts" immer um eins
    % reduziert
    for i = 1:k-1 % Zeilen abarbeiten
        % Dividierte Differenzen ausrechnen
        fmat(i,j) = (fmat(i+1,j-1)-fmat(i,j-1))/(x(j+(i-1))-x(i));
        % Anmerkung: Indizierung von x:
        % In der Tabelle im Skript (letzte Seite) fällt auf:
        % Der höchste Index des x-Wertes in f[...] ist immer
        % Spalte+(Zeile-1), der niedrigste Index der Zeilenindex
        % also f[x_k,...,x_l] mit k = i und l = j+(i-1)
    end%
    % k um eins Reduzieren (Im naechsten Schritt (naechste Spalte)
    % muss eine Zeile weniger berechnet werden        
    k = k-1;
end;


% Polynom erstellen:
polystr = '';
polystr = [polystr num2str(fmat(1,1)) ];% f[x1]
for i = 1:length(x)-1
    polystr = [polystr '+' num2str(fmat(1,i+1))];
    for j = 1:i % Schleife fuer (x-x1)*(x-x2)*...*(x-xi)
        polystr = [polystr  '.*(x-' num2str(xmat(1,j)) ')'];        
    end%
end%for
polystr % Ausgabe zur ueberpruefung

% Aus polystr eine Anonymous Funktion machen:
funcstr = ['p = @(x) ' polystr];
eval(funcstr)

xvec = 0:0.001:x(end);
plot(xvec,p(xvec))
 


Ich hoffe, es ist einigermaßen verstaendlich.

Frohes Labben!

Zur Fehleranalyse: Ich glaube ich habe da auch nen Eintrag auf Wikipedia unter Polynominterpolation gesehen. Der Fehler an den Stüzstellen muss immer Null sein, sonst wurde das Polynom falsch berechnet.

Newton_Polynominterpolation.pdf
 Beschreibung:

Download
 Dateiname:  Newton_Polynominterpolation.pdf
 Dateigröße:  41.68 KB
 Heruntergeladen:  1223 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
simosim
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 22.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2013, 18:28     Titel:
  Antworten mit Zitat      
Hallo

ich habe das mit den Fehlern schon hingekriegt, einfach war es aber nicht. Da die n+1 Ableitung meiner Funktion gleich Null ist (ein Koeffizient hat den Wert Null), konnte ich die Formel mit der Ableitung nicht verwenden. Daher musste ich das Knotenpolynom auswerten (erste Ableitung, xmax), dann für dieses xmax, p(x) (berechnetes Newtonplynom) auswerten, dann diese Werte in die x und y Tabelle einsetzen, dafür die dividierte Differenz berechnen. Diese dividierte Differenz mit dem Knotenpolynom für das gesuchte x multiplizieren, der Fehler ist berechnet. Für einen hohen Polynomgrad stimmt der Fehler einigermaßen, bei einem kleineren Grad wird zum Ende des Intervalls der theoretische Fehler sehr groß, so dass er nicht mehr mit den berechneten Werten übereinstimmt.

Danke für die Antwort, Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.