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

Problem bei Aufruf einer Funktion aus Skript

 

Banacho

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2016, 15:04     Titel: Problem bei Aufruf einer Funktion aus Skript
  Antworten mit Zitat      
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.m Line: 27 Column: 18
Function with duplicate name "ausgleich" cannot be defined.

Error in testAusgleich (line 13)
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)
    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
 

Code:

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)


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.04.2016, 17:29     Titel:
  Antworten mit Zitat      
Hallo,

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.

Gib mal
Code:

ein. Vielleicht wird eine andere Datei aufgerufen als du denkst?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.04.2016, 17:33     Titel: Re: Problem bei Aufruf einer Funktion aus Skript
  Antworten mit Zitat      
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
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 - 2025 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.