Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Fehler bei Aufruf einer Funktion aus Skript
Autor
Universität/Hochschule Fehler bei Aufruf einer Funktion aus Skript
Banacho
Ehemals Aktiv Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: vor mehr als 3 Monaten
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 Letzter Besuch: in der letzten Woche
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.

Wechsel in ein anderes Forum:
 Suchen    
 
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]