Nicht in der Lage zu finden, warum der Fehler "Nicht genügend input-Argumente", Matlab
Stieß ich auf ein problem beim Aufruf der Funktion definiert den code unten.. Nach Matlab habe ich nicht genug input-Argumente in der verschachtelten Funktion Chi, wenn ich verwenden Sie die Funktion, indem Sie in "Awesomefit(V,I,Ierr)". Aber ich kann mir nicht wirklich erklären warum, da alle den Eingang muss die Funktion sollte vorhanden sein.. V, I und Ierr sind Matrizen der 148x1 Doppel-und bekommen initialisiert ist, bevor der Aufruf der Funktion.
Hat jemand eine Idee, was fehlen könnte?
Matlab zeigt auch eine Fehlermeldung in der Zeile mit fminsearch. Ich weiß nicht, ob dies im Zusammenhang zu der anderen Fehlermeldung oder zu Unrecht mit der "fminsearch" - Befehl. Jetzt würde ich denken, es ist die letztere Möglichkeit. Aber das ist definitiv nicht mein Hauptproblem. Ich hoffe, ich kann verkraften, dass sobald ich das andere problem gelöst.
Bitte entschuldigen Sie meine unorthodoxen Programmierstil, aber ich bin ein Physiker versucht zu Programmieren :/ich bin noch gab mein bestes obwohl..
%% do stuff
function a = Awesomefit(V,I,Ierr)
% initialize starting values
A = 1;
Vbd = 25;
n = 1.2;
b = -0.01;
Var = [Vbd n b];
%do stuff
a = fminsearch(Chi,Var);
function Ifit = InotNorm(V,Vbd,n,b)
Ifit = zeros(size(V));
for i = 1:length(V)
if V(i) < Vbd,
Ifit(i) = 2*10^-12;
else
Ifit(i) = A * abs( (V(i)-Vbd) / (V(i)-Vbd+1/(n*b)) )^n;
end
end
end
function NM = NormMod(Vbd,n,b)
NM = sum(InotNorm(V,Vbd,n,b) ./ Ierr);
end
function ND = NormDat(I,Ierr)
ND = sum(I ./ Ierr);
end
function C = Chi(Vbd,n,b)
C = sum(( (InotNorm(V,Vbd,n,b) .* NormDat(I,Ierr) ./ NormMod(Vbd,n,b) - I) ./ Ierr ).^2);
end
end
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Probleme:
Die Funktion, die Sie versuchen zu minimieren
Chi
- die Eingabe dieser Funktion ist erforderlich, um eine single variable. Die Dokumentation hat insbesondere Folgendes sagen: http://www.mathworks.com/help/matlab/ref/fminsearch.html.Als solche, wenn Sie drei Variablen, die Sie versuchen zu minimieren, müssen Sie legen Sie Sie in einem einzigen Vektor... wie hast du mit
Var
. Als solche müssen Sie ändernChi
um dies zu reflektieren:Den ersten Eingang in
fminsearch
erforderlich ist, um eine function handle wenn Sie Lesen Sie die Dokumentation sorgfältig durch. Daher werden Sie einfach brauchen, um Ihrefminsearch
Aufruf dieser:Wenn Sie dies nicht vor:
MATLAB interpretiert
Chi
als variable, nicht eine Funktion.... das ist, warum Sie immer waren, dass Fehler. Sie brauchen, um passieren eine Griff der Funktion als ersten Eingabeparameterfminsearch
. Sie können denken, Griff wie ein "Zeiger", um die Funktion, die Sie versuchen zu minimieren. Lesen Sie mehr über Funktion verarbeitet hier: http://www.mathworks.com/help/matlab/matlab_prog/creating-a-function-handle.htmlTun, und die Einstellung
V = I = Ierr = 1
, bekomme ich diese: