Verfasst am: 28.04.2016, 15:04
Titel: Problem bei Aufruf einer Funktion aus Skript
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:
Code:
Error: File: ausgleich.mLine: 27 Column: 18 Function with duplicate name "ausgleich" cannot be defined.
Error in testAusgleich (line13)
k = ausgleich(A,y);
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
Code:
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) ifabs(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
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)
ich kann das Problem nicht nachvollziehen. Ich bekomme die Fehlermeldung
Undefined function or variable 'n'.
Error in ausgleich (line 11)
S = R(1:p,p:n-p);
die bei näherem Hinsehen nicht überraschend ist, denn n wird ja auch zuvor nicht definiert.
Verfasst am: 28.04.2016, 17:33
Titel: Re: Problem bei Aufruf einer Funktion aus Skript
Hallo Banacho,
Zitat:
Error: File: ausgleich.m Line: 27 Column: 18
Function with duplicate name "ausgleich" cannot be defined.
Die wichtige Information steckt in "Line: 27". Offenbar beginnt das File nicht mit der Zeile "function [ x ] = ausgleich(A,b)", sondern mit 26 anderen Zeilen. Aber was steht da drin?
Ich rate mal, dass dies wiederum eine Funktion ist, deren Namen der gleiche ist wie der des Files, nämlich "ausgleich". Und damit hättest Du 2 Funktionen mit dem gleichen Namen definiert.
Das ist allerdings nur geraten.
Gruß, Jan
Einstellungen und Berechtigungen
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
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.