Matlab gibt was Falsches aus < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 12:14 So 01.05.2011 | Autor: | Mija |
Aufgabe | Wir sollen zu folgender Aufgabe ein Matlab-Programm schreiben:
Für das Interpolationspolynom $p$ zu den Funktionswerten [mm] $y_j, [/mm] j = 0,...,n$ gilt die Darstellung
$p(x) = [mm] w(x)*\summe_{j=1}^{n} \bruch{A_j}{x-x_j}$ [/mm] mit [mm] $A_j [/mm] = [mm] \bruch{y_j}{w'(x_j)}, [/mm] j=0,...,n$ und $w(x) = [mm] (x-x_0)(x-x_1)*...*(x-x_n)$ [/mm] |
Wir haben nun folgendes Programm geschrieben:
function y = Lagrange(x,stuetz,fwerte)
if(length(stuetz)~= length(fwerte))
error('Die Vektoren "stuetz" und "fwerte" muessen die gleiche Dimension haben')
end
dim = length(stuetz)
%Berechnung von w(x) und w'(x)
wx = [1]
for i=[1:dim]
wx = conv(wx,[1,-stuetz(i)])
end
wxstrich = polyder(wx)
%Berechnung der Aj
A = zeros(dim,1)
y = polyval(wx,x)
for j=[1:dim]
try
A(j) = fwerte(j)/polyval(wxstrich,stuetz(j))
y = y * A(j)/(x-stuetz(j))
catch
error('In der Berechnung haette durch 0 geteilt werden müssen')
end
end
Ich habe das ganze mal mit Lagrange(3,[1;2],[1;2]) durchrechnen lassen und auch selbst auf dem Papier durchgerechnet.
Dieses Programm gibt nun leider als y = polyval(wx,x), welches unseren w(x) an der Stelle x entsprechen soll, den falschen y-Wert aus, nämlich im Vergleich zum auf dem Papier ausgerechneten Wert dann -y.
Dadurch kommt dann auch das falsche Ergebnis raus..
Wo ist unserer Fehler?
|
|
|
|
Hallo Mija,
> Wir sollen zu folgender Aufgabe ein Matlab-Programm
> schreiben:
>
> Für das Interpolationspolynom [mm]p[/mm] zu den Funktionswerten
> [mm]y_j, j = 0,...,n[/mm] gilt die Darstellung
>
> [mm]p(x) = w(x)*\summe_{j=1}^{n} \bruch{A_j}{x-x_j}[/mm] mit [mm]A_j = \bruch{y_j}{w'(x_j)}, j=0,...,n[/mm]
> und [mm]w(x) = (x-x_0)(x-x_1)*...*(x-x_n)[/mm]
> Wir haben nun
> folgendes Programm geschrieben:
>
>
> function y = Lagrange(x,stuetz,fwerte)
>
> if(length(stuetz)~= length(fwerte))
> error('Die Vektoren "stuetz" und "fwerte" muessen die
> gleiche Dimension haben')
> end
>
> dim = length(stuetz)
>
> %Berechnung von w(x) und w'(x)
> wx = [1]
>
> for i=[1:dim]
> wx = conv(wx,[1,-stuetz(i)])
> end
>
> wxstrich = polyder(wx)
>
> %Berechnung der Aj
> A = zeros(dim,1)
> y = polyval(wx,x)
>
> for j=[1:dim]
> try
> A(j) = fwerte(j)/polyval(wxstrich,stuetz(j))
> y = y * A(j)/(x-stuetz(j))
> catch
> error('In der Berechnung haette durch 0 geteilt werden
> müssen')
> end
> end
Hier mußt Du doch erst die Summe bilden:
s=0
for j=[1:dim]
try
A(j) = fwerte(j)/polyval(wxstrich,stuetz(j))
s = s+ A(j)/(x-stuetz(j))
catch
error('In der Berechnung haette durch 0 geteilt werden
müssen')
end
end
y=y*s
>
> Ich habe das ganze mal mit Lagrange(3,[1;2],[1;2])
> durchrechnen lassen und auch selbst auf dem Papier
> durchgerechnet.
> Dieses Programm gibt nun leider als y = polyval(wx,x),
> welches unseren w(x) an der Stelle x entsprechen soll, den
> falschen y-Wert aus, nämlich im Vergleich zum auf dem
> Papier ausgerechneten Wert dann -y.
> Dadurch kommt dann auch das falsche Ergebnis raus..
>
> Wo ist unserer Fehler?
Gruss
MathePower
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:15 So 01.05.2011 | Autor: | Mija |
Vielen Dank, jetzt kommt das Richtig raus! :)
|
|
|
|