Hallo,
ich bin noch ein relativer Neuling mit Matlab und hoffe mir kann jemand hierbei helfen. Für meine Abschlussarbeit versuche ich eine Fit-Funktion mit fminsearch zu erstellen. Ich habe den unten stehenden Code bereits ohne Fit ausprobiert und dabei lief alles glatt. Nun habe ich die Fit-Funktion mit eingefügt und hab leider folgenden Fehler erhalten:
Assignment has more non-singleton rhs dimensions than non-singleton subscripts
Error in fminsearch (line 200)
fv(:,1) = funfcn(x,varargin{:});
Error in Fit_Simulation_Leitfaehigkeit2 (line 9)
Wert = fminsearch(Model, Start,options);
Wie ich bereits in anderen Beiträgen gelesen habe liegt der Fehler in einer nicht richig gewählten Dimension einer Matrix/Vektors. Ich habe dies bereits überprüft und kann dort leider keinen Fehler entdecken. Ich könnte mir jetzt vorstellen das für jede Iteration des Fittes eine Zeile in den Matrizen meiner Variablen beschrieben werden soll, so dass eine Art Memory zuverfügen steht, um den Verlauf des Fittes zu sehen. Dies wüsste ich zwar jetzt nicht, wie ich dies einrichten müsste bzw. war dies auch nicht meine Absicht.
Ich hoffe mir kann hier jemand weiterhelfen.
Hier mein Code:
Code:
function[Differenz] = Simulation_Leitfaehigkeit2(Para)
%Fit Parameter
Ef = Para(1); % Ferminiveau Graphen [eV]
N = Para(2); % Anzahl Schichten
a= Para(3);
%%Erweiterte Fit Parameter
%epsinfn= Para(3);
%Gammanlo=Para(4);
%Gammanto=Para(5);
tau = 20e-15; % Momentum Scattering Time [s]
Delta= 100e-3; %moegliche Bandluecke Graphens
phi = 35;
% Messparameter
T = 300; % Temperatur in [K]
phi = 35; % Einfallswinkel [°] load eg82p35.txt% Laden der Messdaten
xdata= eg82p35(:,1);
ydata= eg82p35(:,2);
%xdata=xdata.'; %Für .txtexport
%ydata=ydata.'; %Für .txtexport
nuquer = xdata ; % Wellenzahlintervall [cm^1] % Naturkonstanten
tau=15e-15; % Momentum Scattering Time [s]
hquer = 6.582e-16; % reduziertes Plancksches Wirkungsquantum [eVs]
kB = 8.617e-5; % Boltzmannkonstante in [eV/K]
e = 1.602e-19; % Elementarladung Gamma = 10e-3; % Verbreiterung des Interbanduebergangs [eV]
eps0 = 8.854e-12; % Permittivität [F/m] bzw [As/Vm]
mu0 = 12.56637e-7; % magnetische Feldkonstante [N/A^2]
c = 1/(sqrt(eps0*mu0)); % Lichtgeschwindigkeit [m/s]
%Variablen definition
omega = 2*pi*100*c*nuquer; % Umrechnung Wellenzahl in Freq [Hz]
nuquer = xdata ; % Wellenzahlintervall [cm^1]
omega = 2*pi*100*c*nuquer; % Umrechnung Wellenzahl in Freq [Hz]
E = hquer*omega; % Energieniveaus fuer Fermifunktion [eV] % Eigenschaften Graphen
%sig0 = e^2/(16*pi*eps0*hquer); % universelle Leitfaegigkeit für normierte
%Darstellung im Plot
für den Fall, dass die Zielfunktion nicht beim ersten, sondern einem späteren Durchlauf einen Fehler wirft.
Wenn du einen so länglichen Code postest, dann bitte auch ein reproduzierbares Beispiel. Dazu fehlt aber der fminsearch-Aufruf inkl. Startwerte.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
danke für deine Antwort.
Tatsächlich läuft genau eine Iteration meines Programms mit den Startwerten durch und stopt dann. Das erklärt warscheinlich auch warum es in einen Testlauf ohne die Fminsearch-Funktion nicht zu einen Fehler kommt.
Zitat:
Wie hast du das überprüft? Per Debugging?
Ich habe die Größen der Vektoren überprüft und dort keine Abweichungen festgestellt. Ausdiesem Grunde geh ich davon aus das ein bestehender Vektor jede Iteration erweitert werden soll. ich bin mir nicht sicher wie ich den Debugger aktiviere bevor ich das Programm starte, weil die Fehlermeldung sofort erscheint und man nicht genug Zeit hat, den Lauf zu pausieren.
Hier unten ist meine Funktion zum Aufruf meines vorher geposteten Models.
Wegen einen Minimalbeispiel bin ich mir nicht sicher, ob ich dieses tatsächlich soweit reduzieren kann, da es sich hier tatsächlich um eine einzige Formel handelt, und nur Teile der Formel zur Übersicht vorher berechnet werden. Ich könnte jetzt den Code etwas abstrakter gestalten, so dass man nur sich um bei den Berechnungen um einen Vektor oder ein Skalar handelt.
Code:
function[Wert, Model] = Fit_Simulation_Leitfaehigkeit2(xdata,ydata) % Startpunkt und Model für Optimierung festlegen
Start = [100e-320.1] ;
%Auswahl das zur Ermittlung verwendete Programms
Model =@Simulation_Leitfaehigkeit2;
%Definition der Tolaranzschwellen und der Anzahl der Iterationen
options =optimset('TolFun',1e-10,'TolX',1e-6,'MaxIter',5000,'MaxFunEvals', 5000);
Die Funktion nimmt xdata und ydata entgegen, gibt sie aber nicht weiter. Stattdessen scheinst du in der Funktion jedes Mal von neuem die .mat-Datei mit den Daten zu laden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Die Funktion nimmt xdata und ydata entgegen, gibt sie aber nicht weiter. Stattdessen scheinst du in der Funktion jedes Mal von neuem die .mat-Datei mit den Daten zu laden.
Da hast du recht. Bei xdata und ydata handelt es sich um meine Messdaten. Tatsächlich möchte ich ja erreichen, dass sich die Größe "REG" an die ydata angeleicht unter der Verwendung der xdata. Wie müsste ich diese Funktion dementsprechend umschreiben?
ich glaube, ich sehe jetzt das Problem.
Gibt deine Funktion etwa einen Vektor zurück?? Es muss für fminsearch ein Skalar sein, du musst also die Norm der Abweichungen berechnen.
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Ah natürlich!!!
Jetzt funktiert es auch vielen Dank
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.