Verfasst am: 22.04.2008, 17:21
Titel: ??? Error: "nLogLik" was previously used as a vari
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?
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.
Was ist hier falsch? Wie gebe ich die Varianz-Funktion korrekt ein?
Aus der Help-Dokumentation zur "function_handle (@)" werde ich irgendwie nicht schlauer...
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
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
, 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?
_________________
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.
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
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.