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

??? Error: "nLogLik" was previously used as a vari

 

robert_12
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2008, 18:21     Titel: ??? Error: "nLogLik" was previously used as a vari
  Antworten mit Zitat      
Hi!

Ich habe eine Funktion "nLogLik" definiert und möchte diese bzgl. ihrer Parameter (sigma,kappa) minimieren. Wenn ich den Befehl eingebe: "[kappa sigma]=fminsearch(@nLogLik, [0 0])" kommt jedoch folgende Fehlermeldung:

"??? Error: "nLogLik" was previously used as a variable, conflicting with its use here as the name of a function or command."

„nLogLik“ habe ich im Workspace definiert, vorher aber nirgends verwendet. Die Details sind folgende:
nLogLik = @ (sigma,kappa) -sum(log(normpdf(X, Erwartungswert(kappa),Varianz(sigma,kappa))))
mit:
Erwartungswert = @ (kappa) Xt.*exp(-kappa*.tE);
Varianz = @ (sigma,kappa) (sigma^2/(2*kappa)).*(1-exp(-2*kappa.*tV));
Xt, tE, tV und X sind jeweils (821x1)-Vektoren.
und schließlich:
>> [kappa sigma]=fminsearch(@nLogLik, [0 1]);
??? Error: "nLogLik" was previously used as a variable, conflicting with its use here as the name of a function or command.

Wo liegt mein Fehler und wie kann ich ihn beheben?

Danke schonmal für Tipps. =)

MfG Robert.
Private Nachricht senden Benutzer-Profile anzeigen


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 23.04.2008, 10:31     Titel:
  Antworten mit Zitat      
Hallo Robert,

die Parameter (in Deinem Fall sigma und kappa) müssen als Vektor an die zu minimierende Funktion nLogLik übergeben werden, dann sollte es gehen:

Code:
nLogLik = @ (p) -sum(log(normpdf(X, Erwartungswert(p(2)),Varianz(p(1),p(2)))))


Zugegeben, die Matlab-Fehlermeldung ist hier wenig hilfreich...

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
robert_12
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2008, 12:25     Titel:
  Antworten mit Zitat      
Hey, danke, tompie.

habe es direkt probiert. aber wenn ich jetzt die Varianz-Funktion (die ich ja für nLogLik brauche) entsprechend neu definiere und probeweise zwei Werte einsetze, kommt folgende fehlermeldung:

Code:
Varianz2 = @(param)(param(2)^2/(2*param(1))).*(1-exp(-2*param(1).*tV));
Varianz2(1,1);
??? Error using ==> @(param)(param(2)^2/(2*param(1))).*(1-exp(-2*param(1).*tV))
Too many input arguments.


Bei der anderen Version klappte es:

Code:
Varianz = @(kappa,sigma) (sigma^2/(2*kappa)).*(1-exp(-2*kappa.*tV));
Varianz(1,1);
ans = [...]


Was ist hier falsch? Wie gebe ich die Varianz-Funktion korrekt ein?
Aus der Help-Dokumentation zur "function_handle (@)" werde ich irgendwie nicht schlauer...

Viele Grüße,
Robert.
Private Nachricht senden Benutzer-Profile anzeigen
 
tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 23.04.2008, 13:07     Titel:
  Antworten mit Zitat      
Hallo Robert,

ich denke Du brauchst nur die Funktion nLogLik neu definieren, so wie ich das geschrieben habe. Bei mir lief's durch.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
robert_12
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 14.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2008, 14:51     Titel:
  Antworten mit Zitat      
jetzt klappts. besten dank! =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Stutzi
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2008, 15:51     Titel: Gleiche Fehlermeldung
  Antworten mit Zitat      
Hi,
ich habe die gleiche Fehlermeldung.
Habe eine Funktion "Funktion1" definiert.
Code:

function BL_alpha=Funktion1(tau,V_cov,P,O,Pi_1,V)
load inputparameter tau V_cov P V
load implizite_Renditen Pi_1
O=[0.02,0,0,0,0;0,0.015,0,0,0;0,0,0.05,0,0;0,0,0,0.03,0;0,0,0,0,0.09]
tau=1
Funktion1=(((tau.*V_cov)^-1)+(P'*(O^-1)*P))^-1*(((tau.*V_cov)^-1)*Pi_1+(P'*(O^-1)*V))
save Funktion1.m
end
 

So, Funktion selbst ist für die weitere Betrachtung egal.
Aber ich möchte diese Funktion nun nutzen und hinsichtlich des Faktors "tau" eine Sensitivitätsanalyse durchführen.
Das heißt in einer Schleife (for) möchte ich die Variable "tau" von 0 bis 1 in 0.1 Schritten laufen lassen. Die Schleife ist klar. Doch der Funktionsaufruf nicht.

Code:

for i=0:0.1:1
Sensi_tau=Funktion1(@tau)
xlswrite('filename.xls',Funktion1,'Tabelle1','B2:B32')
end
 

Vielleicht könnt ihr mir weiterhelfen.
Gruß Stutzi
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.08.2008, 16:41     Titel:
  Antworten mit Zitat      
Hi,

ein Paar Sachen, die mir aufgefallen sind:
Du definierst die Funktion Funktion1 so, dass sie 6 Parameter entgegen nehmen soll, willst aber nur eine übergeben:Funktion1(@tau) (und wie Du das machst ist auch falsch).
Ausserdem werden bei jedem Funktionsaufruf einige Daten geladen, das ist überflüssig, einmal Laden sollte reichen (bei entsprechendem Design)
Warum machst Du mit save Funktion1.m
Aha, Du weist BL_alpha nicht den Rückgabewert zu, deshalb save?
Schließlich
Code:
xlswrite('filename.xls',Funktion1,'Tabelle1','B2:B32')
, damit überschreibst Du bei jedem Schleifendurchlauf den Bereich in der Tabelle, so dass Du nur die Daten aus dem letzten Durchlauf behalten wirst.

Wie ist Dein Kenntnisstand in Sachen Matlab?
Hier gibts einige Einführungen.
Möglicherweise besteht das Problem aber auch in einem größeren Zusammenhang, den ich nicht sehe.
Kannst Du ein lauffähiges Beispiel posten?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Stutzi
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2008, 16:57     Titel:
  Antworten mit Zitat      
Hi nschlange,
mein Kenntnisstand in Matlab ist noch ganz am Anfang, jedoch habe ich für eine tiefer gehenden Einblick wegen der Abgabe meiner Arbeit nicht so viel Zeit.
Mein Ziel mit der Analyse ist glaube ich relativ simpel. Ob es einfach zu implementieren ist, weiß ich nicht.
Also Ausgang ist die Funktion "Funktion1".
Der Parameter tau soll verändert werden von 0 bis 1 in 0.1 Schritten und der Ergebnisvektor BL_alpha soll in der Exceldatei gespeichert werden. Dabei war eigentlich mein Gedanke, dass ich auch die Speicherung mit einer Schleife versehe, so dass in einem Datenblatt in den verschiedenen Spalten die unterschiedlichen Ergebnisse sind.
Danke für die Links. Ich werde mich mal durchkämpfen. Wenn du jedoch vorher einen Tipp für den Funktionsaufruf hast, wäre ich dir sehr verbunden.
Noch kann ich dir keine lauffähige Version schicken, werde das aber nachholen, wenn ich soweit bin.

Viele Grüße,
Stutzi
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2008, 13:32     Titel:
  Antworten mit Zitat      
Hallo,

ich wollte nur was kurz zur Fehlermeldung was sagen:
Die kommt daher dass du eine Variable gleich nennst wie die Funktion
Code:
Funktion1=(((tau.*V_cov)^-1)+(P'*(O^-1)*P))^-1*(((tau.*V_cov)^-1)*Pi_1+(P'*(O^-1)*V))
Da sollte wohl eher BL_alpha auf der linken Seite stehen!

Ausserdem speicherst du den Workspace als .m Datei ab. Normalerweise werden in Matlab Daten als .mat und Funktionen und Skripte als .m Dateien abgespeichert. Du hast also einen doppelten Namenskonflikt.

MfG
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 - 2024 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.