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

non-singleton rhs dimensions

 

Baumy_
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 05.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2018, 17:00     Titel: non-singleton rhs dimensions
  Antworten mit Zitat      
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 .txt export
%ydata=ydata.';                %Für .txt export
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

% Eigenschaften Luft
eps1 = 1;                       % Luft
n1 = 1.00028;                   % Brechungsindex Luft
% Eigenschaften SiC
epsinf = 6.55;                  % dielekt. Konstante pos. Ionenhintergrund
n2 = 2.55;                      % Brechungsindex SiC
%Gamma1 = 60;                    % Verbreiterung Phononenresonanz [cm^-1]
%Gamma2 = 10;                    % Verbreiterung Phononenresonanz [cm^-1]
omegato = 797.7;                % transversal optische Phononenfrequenz [cm^-1]
omegalo = 964;               % longitudinal optische Phononenfrequenz [cm^-1
Gammato = 2.33;                  % damping rate to
Gammalo = 5.6;                  % damping rate lo
omegap = 103;                   % Plasmafreq
Gammap = 90;                    % Daempfung freier LT
%Erweiterte Eigenschaften SiC(Dotierung,Verunreinigung, Adsorbate)
epsinfn= 5;                     % dielekt. Konstante pos. Ionenhintergrund
omeganlo=1495;                  %longitudinal optische Phononenfrequenz [cm^-1
omeganto=1479;                  %transversal optische Phononenfrequenz [cm^-1]
Gammanlo=2;                     %Damping Rate lo
Gammanto=5;                     %Damping Rate to
% Vereinfachungen Reflexionsformel
alpha =abs(sqrt(1-((n1/n2)*sin(phi))^2)/(cos(phi)));
D = eps1*eps0;
%% Berechnungsvorschriften der Leitfaehigkeit bzw. Reflexion
% Leitfaehigkeit ergibt sich aus Intraband- und Interbandbeitrag
% Vordefinition der zu berechnenden Graphen fuer schnelleren Programmablauf
sigintra=zeros(1,length(omega));
siginter=zeros(1,length(omega));
sigma=zeros(1,length(omega));
eps2=zeros(1,length(omega));
eps3=zeros(1,length(omega));
A=zeros(1,length(omega));
B=zeros(1,length(omega));
%R=zeros(1,length(omega));
REG=zeros(1,length(omega));
%RSiC=zeros(1,length(omega));

% Berechnung der Leitfaehigkeit
siginter = (((1i*e^2)/(4*pi*eps0*pi)).*omega).*integral(@(E) ((1+((Delta^2)./(E.^2)))./((2*E).^2)-(hquer.*omega+1i.*Gamma).^2).*(((1./(1+exp((E-Ef)./(kB*T))))-(1./(1+exp((-E-Ef)./(kB*T)))))), Delta, 4.6,'ArrayValued',true,'RelTol',0,'AbsTol',1e-12);
sigintra=(1i*e^2./((4*pi*eps0*pi*hquer^2).*(omega+1i/tau))).*integral(@(E) ((1+Delta^2./E.^2)).*(Fermi(E,Ef,T)+Fermi(E,-Ef,T)), Delta, 4.6,'ArrayValued',true,'RelTol',0,'AbsTol',1e-12);
sigma = siginter+ sigintra;

% Berechnung des Reflexionsgrades
eps2 = epsinf.*((omegalo^2-nuquer.^2-1i.*Gammalo.*nuquer)./(omegato^2-nuquer.^2-1i.*Gammato.*nuquer)-((omegap^2)./(nuquer.*(nuquer+1i*Gammap))));
eps3 = epsinfn.*((omeganlo^2-nuquer.^2-1i.*Gammanlo.*nuquer)./(omeganto^2-nuquer.^2-1i.*Gammanto.*nuquer)-((omegap^2)./(nuquer.*(nuquer+1i*Gammap))));
A = (((sqrt(eps1.*eps2).*eps0))./alpha)+a.*(((sqrt(eps1.*eps3).*eps0))./alpha);
B = (sqrt(eps1)*N*sigma*cos(phi))./(4*pi*eps0*c);
REG = (abs(A+B-D).^2)./(abs(A+B+D).^2);
%RSiC = (abs(A-D).^2)./(abs(A+D).^2);
%R = REG./RSiC;
Differenz = ydata-REG;


[EDITED, Jan, Bitte Code-Formattierung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.425
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2018, 22:09     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich habe dies bereits überprüft und kann dort leider keinen Fehler entdecken.

Wie hast du das überprüft? Per Debugging?
Hilfreich ist auch
Code:

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Baumy_
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 05.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2018, 09:11     Titel:
  Antworten mit Zitat      
Hallo Harald,

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-3  2 0.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);

Wert = fminsearch(Model, Start,options);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.425
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2018, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich bin mir nicht sicher wie ich den Debugger aktiviere bevor ich das Programm starte

Habe ich dir doch geschrieben:
Code:


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Baumy_
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 05.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2018, 10:58     Titel:
  Antworten mit Zitat      
Zitat:
Habe ich dir doch geschrieben:

Dies habe ich nun mal ausprobiert. Matlab öffnet mir hier die fminsearch funktion an der angegeben Stelle aus der Fehlermeldung
Code:
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);


Zitat:
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.425
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2018, 11:07     Titel:
  Antworten mit Zitat      
Hallo,

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.
Code:
Differenz = norm(ydata-REG);


Steht auch so in der Doku:
Zitat:
fun is a function that accepts a vector or array x and returns a real scalar f (the objective function evaluated at x).


Vielleicht kannst du dich an diesem Beispiel orientieren:
https://www.mathworks.com/help/matl.....ing-via-optimization.html

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Baumy_
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 05.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2018, 11:28     Titel:
  Antworten mit Zitat      
Ah natürlich!!!
Jetzt funktiert es auch vielen Dank Very Happy
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.