|
Autor |
Fehler bei Aufruf einer Funktion aus Skript |
|
Banacho
Ehemals Aktiv  Dabei seit: 09.06.2015 Mitteilungen: 39
 | Themenstart: 2016-04-28
|
Hallo,
zur Aufgabe habe ich, einen Algorithmus zur Lösung eines linearen Ausgleichsproblems zu implementieren.
Dazu soll ich eine Funktion ausgleich(A,b) , welche die beiden Funktionen vorwaerts(A,b) und rueckwaerts(A,b) verwendet, und ein Skript, das diese Funktion dann testet schreiben. Code s.u.
Mein Problem besteht nun darin, dass wenn immer ich das Skript laufen lassen möchte, Matlab mir folgende Fehlermeldung zurückgibt:
\sourceon Matlab
Error: File: ausgleich.m Line: 27 Column: 18
Function with duplicate name "ausgleich" cannot be defined.
Error in testAusgleich (line 13)
k = ausgleich(A,y);
\sourceoff
Meine Übungsleiterin wusste auch nicht woran es liegt. Skript und Funktion sind im selben Ordner gespeichert, ich habe bereits versucht die Funktion unter dem Namen "ausgleich", als auch unter einem anderen Namen abzuspeichern, aber immer mit dem selben Ergebnis.
Vielen Dank im Voraus
Banacho
\sourceon Matlab
Code der Funktion:
function [ x ] = ausgleich(A,b)
[Q,R] = qr(A);
%Die Matrix R hat genau p Zeilen ungleich 0, wenn p = rang(A)
p = 0;
for i = 1:size(R,1)
if abs(R(i,:)) > 0
p = p+1;
end
end
R_p = R(1:p,1:p);
S = R(1:p,p:n-p);
W = inv(R_p)*S;
L = chol(eye(p,n-p)+S'*S,'lower')*chol(eye(p,n-p)+S'*S,'lower')';
b_h = Q*b;
b_d = b_h(1:p,1);
b_d = inv(R)*b_d;
x_0 = rueckwaerts(L',vorwaerts(L,b));
x_d = b_d-W*x_0;
x = x_d;
end
function [ x ] = rueckwaerts( R,b )
n = size(R,1);
x = zeros(n,1);
x(n,1) = b(n,1)/R(n,n);
for k = n-1:-1:1
s = 0;
for j = k+1:n
s = s + R(k,j)*x(j,1);
end
x(k,1) = (1/R(k,k))*(b(k,1)-s);
end
end
function [ x ] = vorwaerts(L,b)
n = size(L,1);
x = zeros(n,1);
x(1,1) = b(1,1)/L(1,1);
for k = 2:n
s = 0;
for j = 1:k-1
s = s + L(k,j)*x(j,1);
end
x(k,1) = (1/L(k,k))*(b(k,1)-s);
end
end
\sourceoff
\sourceon Matlab
Code des Skripts
%Initialisieren der Vektoren
x = [0:5]';
y = [-0.021;1.5029;1.6686;-0.0478;-1.9936;-2.6];
g_1 = @(x) (x+1).^2;
g_2 = @(x) sin(x);
g_3 = @(x) (cos(x-pi/2)/4);
%Initialisieren der Matrix
A = zeros(6,3);
A(:,1) = g_1(x);
A(:,2) = g_2(x);
A(:,3) = g_3(x);
disp('Loesung des LAG')
k = ausgleich(A,y);
%Plotten der Funktion f
t = [0:0.01:5]';
f = @(t) k(1,1)*g_1(t)+k(2,1)*g_2(t)+k(3,1)*g_3(t);
hold on;
plot(t,f(t),'g')
plot(x,y)
\sourceoff
|
Profil
|
majoka
Senior  Dabei seit: 25.02.2014 Mitteilungen: 814
 | Beitrag No.1, eingetragen 2016-04-28
|
Matlab kennt bei mir in der Zeile
\sourceon Matlab
S = R(1:p,p:n-p);
\sourceoff
den Wert für n nicht. Bist Du sicher, dass Du den richtigen Code reinkopiert hast?
[Verschoben aus Forum 'Numerik & Optimierung' in Forum 'Matlab' von majoka]
|
Profil
|
Banacho
Ehemals Aktiv  Dabei seit: 09.06.2015 Mitteilungen: 39
 | Beitrag No.2, vom Themenstarter, eingetragen 2016-04-28
|
n ist in rueckwaerts und vorwaerts definiert worden, die ich eigentlich über ausgleich stehen hatte. Hab das dann getauscht, weil ich dachte, es könnte daran liegen, aber auch wenn ich n nochmal in ausgleich selbst definiere, erhalte ich den gleichen Fehler.
|
Profil
|
Krugman
Senior  Dabei seit: 23.05.2006 Mitteilungen: 355
Wohnort: Weil am Rhein
 | Beitrag No.3, eingetragen 2016-04-29
|
Hi,
zuerst bitte einen Code den man ausführen kann.
Das mit dem n geht bei mir auch nicht.
Ich würde dir auch empfehlen zu Beginn ein 'clear all' einzufügen (im Testscript). Nicht das du in deinem Workspace noch Reste rumliegen hast.
Gruß
Krugman
|
Profil
|
Kitaktus
Senior  Dabei seit: 11.09.2008 Mitteilungen: 7234
Wohnort: Niedersachsen
 | Beitrag No.4, eingetragen 2016-04-29
|
Kann es sein, dass Du inzwischen die Reihenfolge der Teilfunktionen geändert hast? Die Fehlermeldung klingt, als hättest Du in einem m-File mit dem Namen "ausgleich" eine Funktion mit dem Namen "ausgleich" definiert, aber nicht in der 1. Zeile des Files, sondern erst weiter unten.
|
Profil
|
Banacho hat die Antworten auf ihre/seine Frage gesehen. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|