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

Polynominterpolation

 

Cyraxx
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2008, 13:47     Titel: Polynominterpolation
  Antworten mit Zitat      
hallo zusammen ich hab folgendes problem:

Aufgabe
schreibe eine funktion in matlab, die die koeffizienten des interpolationspolynoms in der newton-basis über den algorithmus der dividierenden differenzen bestimmt.
dabei sollen stützstellen xi=(xi(1)...xi(n)) und y=(y(1)...y(n)) vertoriell übergeben werden.



sooo ich bin bis jetzt so weit gekommen:

function d = divdiff(x,y)

% Dividierte Differenzen
% Eingabeparameter:
% x x-Koordinaten der Stuetzstellen
% y y-Koordinaten der Stuetzstellen
% Ausgabeparameter:
% d Polynomkoeffizienten
Ly=length(y);
k(1,: )=y;
for j=2:Ly
for i=j:Ly;
k(j,i-j+1)=(k(j-1,i-j+2)-k(j-1,i-j+1))/(x(i)-x(i-j+1));
end
end



um das polynom jetzt zu bestimmen, muss ich
k(1,1)+k(2,2)*(x-xi(1))+k(3,3)*(x-xi(1))*(x-xi(2))+k(4,4)*(x-xi(1))*(x-xi(2))*(x-xi(3))+k(5,5)...
berechen. das ergebnis ist dann ein zeilenvektor, der aus den koeffizienten des polynoms besteht.(wobei k(j,j) faktoren sind, die ich oben schon berechnet habe)
polynommultiplikation funktioniert in mtlab glaube ich mit conv(x,y)
mein problem ist jetzt die umsetzung dieser berechnung im matlab, weil das programm mir dann sagt, dass die dimensionen beim multiplizieren nicht passen:/

wäre suuper nett, wenn mir jemand helfen könnte

Zuletzt bearbeitet von Cyraxx am 06.05.2008, 14:31, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Cyraxx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2008, 14:29     Titel:
  Antworten mit Zitat      
bzw wie kann ich, wenn ich zwei vektoren f=(f(1), ... f(n)) xi=(xi(1),...,xi(n) habe
ein polynom berechnen, dass so aussieht:

f(1)+f(2)*(x-xi(1))+f(3)*(x-xi(1))*(x-xi(2))+f(4)*(x-xi(1))*(x-xi(2))*(x-xi(3))+...+f(n)*(x-xi(1)*...*(x-xi(n-1))

ich vermute, dass das mit einer for.schleife gemacht werden muss. am ende muss ein vektor herauskommen, der aus den koeffizienten des polynoms besteht
(in mathlab sieht das dann zb für n=2 so aus
polynom=f(1)+conv(f(2),[1 -xi(1)]
Private Nachricht senden Benutzer-Profile anzeigen
 
Cyraxx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2008, 17:24     Titel:
  Antworten mit Zitat      
hab jetzt etwas weiter gearbeitet:

Code:

function d = divdiff(x,y)

% Dividierte Differenzen
% Eingabeparameter:
%   x   x-Koordinaten der Stuetzstellen
%   y   y-Koordinaten der Stuetzstellen
% Ausgabeparameter:
%   d   Polynomkoeffizienten
Lx=length(x);
Ly=length(y);
k(1,:)=y;
for j=2:Ly
    for i=j:Ly;
        k(j,i-j+1)=(k(j-1,i-j+2)-k(j-1,i-j+1))/(x(i)-x(i-j+1));
    end
end
for l=1:Ly
    fak(l)=k(l,1);
end
fak
p(1,:)=fak(1)
for(l=2:Ly)
    p(l,:)=conv(p(l-1,:),[1 -x(i)])
 
end
 


leider bekomme ich, wenn ich zwei vektoren in die funktion reinstecke fogenden fehler:
??? Subscripted assignment dimension mismatch.

Error in ==> divdiff at 23
p(l,: )=conv(p(l-1,: ),[1 -x(i)])
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.05.2008, 08:00     Titel:
  Antworten mit Zitat      
Moin,

der Fehler steckt im Detail:
Code:
p(l,:)=conv(p(l-1,:),[1 -x(i)])
Den Index "l" kennt Matlab, aber den Index "i" bei x(i) nicht...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Cyraxx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2008, 13:17     Titel:
  Antworten mit Zitat      
ja richtig hier muss es

Code:
p(l,:)=conv(p(l-1,:),[1 -x(l)])

heißen. war ein kleiner tippfehler. hat sonst denn keiner eine idee?

edit: also in bekomm jetzt immer noch die fehlermeldung:

Code:

??? Subscripted assignment dimension mismatch.
Error in ==> divdiff at 23
    p(l,:)=conv(p(l-1,:),[1 -x(l)])
Private Nachricht senden Benutzer-Profile anzeigen
 
Cyraxx
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 06.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2008, 20:04     Titel:
  Antworten mit Zitat      
hat sich erledigt
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 - 2024 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.