Interpolation mit MATLAB

Aufrufe: 245     Aktiv: 17.05.2023 um 22:38

0
hi zusammen, kann mir jemand einen Tipp geben, wie bzw. ob es überhaupt notwendig ist, die Punkte extra zu berechnen? Wie kann ich diese am besten angeben? Ich denke es ist sinnvoll, sich die Punkte berechnen zu lassen, damit ich im weiteren Verlauf immer wieder darauf zurückgreifen kann. Die Umsetzung der Aufgabe bereitet mir Kopfzerbrechen, weil das Programmieren nicht gerade einer meiner Stärken ist :/
 
Ich habe folgende Aufgabe gegeben:
Schreiben Sie ein MATLAB-Programm, welches die Güte der Polynominterpolation und der Splineeinterpolation auf folgende Weise vergleicht: Die zu interpolierenden Punkte seien (𝑥𝑗, 𝑓(𝑥𝑗)), wobei xj = −4 + 𝑗*(8/N)  (j=0,1,…,N) und 𝑓(𝑥) = x*cos(4x) . Erzeugen Sie für N= 4, 10, 16 jeweils ein Schaubild, in welches Sie in verschiedenen Farben im Bereich (-5 ≤ 𝑥 ≤ 5)
a) den „exakten Graphen" (x, f(x)) 
b) das Interpolationspolynom
c) die Splineinterpolation
plotten.
Diese Frage melden
gefragt

Student, Punkte: 28

 
Kommentar schreiben
1 Antwort
0
Erzeuge die x-Werte als Vektor, danach den y-Vektor (mit den Funktionswerten). Danach hast Du mit der Funktion nichts mehr zu tun.
Dann plotte. Für kleines N (N=4 geht) kannst Du direkt im Plotfenster unter "tools" den Punkt "basic fitting" aufrufen. Damit kannst Du alle möglichen Interpolationen direkt plotten (und die Gleichungen anzeigen lassen). Dann siehst Du schonmal was rauskommen muss. Das als Vorübung.
Allgemein kann man die gewünschten Polynome mit polyfit bzw. spline berechnen und plotten lassen. Kurven ausrechnen und plotten. Am Verlauf (oder Vergleich mit dem Ergebnis der Vorübung) sieht man ja, ob's klappt.
Mit dem Programmieren ist es wie mit Mathe-Aufgaben: Einfach mal anfangen und schauen, was passiert, ausprobieren, rumbasteln.
Diese Antwort melden
geantwortet

Lehrer/Professor, Punkte: 38.93K

 

Wie kann ich die x - und y-Werte erzeugen? Habe es nach meinem besten Wissen gemacht aber es stimmt nicht :/ Muss ich erst alle Werte für xj bestimmen (meine x-Werte) und diese dann in f(xj) einsetzen um meine y-Werte zu erhalten, verstehe ich das richtig?   ─   honeybees 17.05.2023 um 21:38

Das geht in MATLAB alles sehr einfach - hast Du überhaupt schonmal mit MATLAB gearbeitet? Weißt Du, wie man dort die "Hilfe" benutzt?
Wie lauten Deine Zeilen zur Bereitstellung des x- und y-Vektors?
  ─   mikn 17.05.2023 um 21:51

Es gibt diverse Befehle zur Erzeugung der x-Werte, z.B. linspace. Da wird ja mit Sicherheit irgendetwas behandelt worden sein, wenn das Ganze in MATLAB zu implementieren ist. Den Vektor mit den y-Werten bekommt man dann, indem man die Funktionsvorschrift auf den x-Vektor anwendet (komponentenweise). Falls du das nicht hinbekommst, solltest du dich dringend nochmal mit den Grundlagen von MATLAB befassen; die können wir hier nämlich nicht ohne größeren Aufwand vermitteln.   ─   cauchy 17.05.2023 um 21:52


%Berechnung der zu interpolierenden Punkte
N=4;
j=0:1:N;
xj = -4+j.*8./N; % berechnet x-werte
y = xj.*cos(4.*xj); %berechnet y-werte, wobei y = x*cos(4x)

xj = [-4, -2, 0, 2, 4] %x-Werte als Vektor
y = [3.8306, 0.2910, 0, -0.2910, 3.8306] %y-Werte als Vektor
xx = linspace(min(x), max(x),10);


%Polynom3 Grades
disp('Koeffizienten des Interpolynoms')
p = polyfit(x,y,3)
py =polyval(p,xx);
plot(x,y,'o', xx,py, 'r-', [min(x)], [0,0], 'w')

Koeffizienten des Polynoms:
p =

0.0121 0.2736 -0.1940 -0.6567

  ─   honeybees 17.05.2023 um 22:19

Und wo ist jetzt das Problem genau? Warum definierst Du xj, y zweimal? Die Zeile xx=... gibt natürlich eine Fehlermeldung.
Wenn Du die Funktion definierst,
f = @(x) x.*cos(4*x);
kannst Du den y-Vektor direkt als fxj=f(xj) definieren.
  ─   mikn 17.05.2023 um 22:27

okay danke für den Hinweis und warum gibt xx=.. ein Fehlermeldung?   ─   honeybees 17.05.2023 um 22:35

Das siehst Du, wenn Du es laufen lässt (und man sieht es auch direkt an der Zeile). Gibt es bei Dir keine Fehlermeldung?
  ─   mikn 17.05.2023 um 22:38

Kommentar schreiben