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

Ladungsträgerdichten plotten

 

Huskypaw
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2008, 18:24     Titel: Ladungsträgerdichten plotten
  Antworten mit Zitat      
Hallo ich bin neu in Matlab.

Zuersteinmal:
Code:
>> x = [0:0.01:60];
>> if x < 30; y = 1; else y = 10; end
>> plot(x,y); grid


Wenn ich diese Zeilen plotte, bekomme ich immer nur y = 10 heraus, aber x startet bei 0. Wie kann das sein?

Ich will die Ladungsträgerdichte plotten, welche zwei Bereiche hat. Diese charakterisieren sich folgendermaßen:
Code:

>> y(x > W_C) = log(10^19) + 0;
>> y(x < W_C) = log(10^19) - W_C + x;


Dummerweise gibt mir die letzte Zeile eine Fehlermeldung aus, da x Bezeichner im Rumpf von y ist, also dem Ausdruck 'log(10^19) - W_C + x'. Gnade, kann mir jemand helfen und sagen wie ich sowas realisiere?

Hier noch eine Fehlermeldung einer kürzeren Version:
Code:

>> y(x > W_C) = x;
???  In an assignment  A(I) = B, the number of elements in B and
 I must be the same.


Alleine
Code:
gibt mir bereits einen Fehler aus.

Grüße!

Zuletzt bearbeitet von Huskypaw am 30.12.2008, 11:37, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


sirpaderick
Forum-Anfänger

Forum-Anfänger



Beiträge: 14
Anmeldedatum: 18.06.08
Wohnort: Ludwigshafen
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 20.12.2008, 20:31     Titel:
  Antworten mit Zitat      
Zu deiner 1.Frage hier mal eine Antwort
Code:

x = 0:0.01:60;
for i=1:length(x)
if x(i) < 30;
    y(i) = 1;
else y(i) = 10;
end
end
plot(x,y)
axis([0 60 0 11])
 


dein 2.Problem könntest du zb so lösen, wenn ich dich richtig verstanden habe
Code:

W_C=20;
if x(i)<W_C;
    b(i)=log(10^19) - W_C + x;
else b(i)=log(10^19) +0;
end
 

die lösung für die letzte Frage erklärt sich von selbst.
du sagst x= 0...0,5...0,6 usw
und willst von Matlab das es eine variable y...also
y(0) ...y(0,6) usw Matlab fängt aber eben immer bei 1 an zu zählen, daher musst du dein x erst in natürliche Zahlen umwandeln.
Naja, hoffe es konnte ein wenig helfen
Private Nachricht senden Benutzer-Profile anzeigen
 
Huskypaw
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2008, 11:05     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort!
Ich glaube, ich verstehe Matlab jetzt schon besser, nur habe ich immer noch das Problem, dass
Code:

W_C = 1.08/0.026;
x = [0:0.01:60];
for i = 1:length(x)
if x(i) < W_C;
b(i) = log(10^19) -W_C + x;
else b(i) = log(10^19) + 0;
end
end


mir folgenden Error wirft:
Zitat:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.


Das ist an sich eigentlich genau das gleiche Problem, was ich vorher hatte, glaube ich.

Weiß einer Rat?
Private Nachricht senden Benutzer-Profile anzeigen
 
sirpaderick
Forum-Anfänger

Forum-Anfänger



Beiträge: 14
Anmeldedatum: 18.06.08
Wohnort: Ludwigshafen
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 21.12.2008, 11:47     Titel:
  Antworten mit Zitat      
Ja code ist an sich fast richtig...war ein schnelligkeitsfehler von mir
Code:

W_C = 1.08/0.026;
x = [0:0.01:60];
for i = 1:length(x)
if x(i) < W_C;
b(i) = log(10^19) -W_C + x(i); %hier habe ich etwas eingefügt
else b(i) = log(10^19) + 0;
end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Huskypaw
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2008, 11:57     Titel:
  Antworten mit Zitat      
Great!

Danke für diese Hilfestellung! Das muss ich mir nämlich wirklich erst noch angewöhnen..

Code:

W_C = 1.08/0.026;
x = [0:0.01:60];
for i = 1:length(x)
if x(i) < W_C;
b(i) = log(10^19) -W_C + x(i);
else b(i) = log(10^19) + 0;
end
end
semilogy(x,exp(b)); grid


liefert mir gewünschten Verlauf. Die Knicke resultieren dabei aus der Approximierung der Fermi-Dirac-Verteilungsfunktion.



PS1: Ich habe jetzt die Elektronendichte und die Löcherdichte jeweils einzeln geplottet, wie aber bekomme ich beide auf einmal in ein Diagramm gezeichnet?
Update: Habe es soeben herausgefunden:
Code:


PS2: Wie kann ich erreichen, dass beim Plotten mit 'semilogy' meine Ordinate bloß von 0 bis 20 geht?

PS3:
Code:
liefert mir zwar den richtigen Kurvenverlauf, aber leider ist dieser nicht blau wie sonst, sondern regenbogenfarbig, so dass ich kaum etwas erkennen kann. Wie lässt sich das vermeiden?

Zuletzt bearbeitet von Huskypaw am 30.12.2008, 11:36, insgesamt 5-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Huskypaw
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2008, 00:31     Titel:
  Antworten mit Zitat      
Hier noch ein kleines Update meines ersten Matlabplots:
http://www.uni-saarland.de/mediadb/.....9/ElektronikIWS0809_7.pdf beinhaltet die Aufgabenstellung zu diesem: 2a.
http://www.uni-saarland.de/mediadb/.....lektronikIWS0809_7Lsg.pdf beinhaltet die Lösung zu Aufgabe 2a.

Code:
W_C = 1.08/0.026;
x = [-10:0.01:60];
for i = 1:length(x)
if x(i) < W_C;
n(i) = log(2.81*10^19) -W_C + x(i);
else n(i) = log(2.81*10^19) + 0;
end
end

for i = 1:length(x)
if x(i) > 0;
p(i) = log(1.83*10^19) - x(i);
else p(i) = log(1.83*10^19) + 0;
end
end

WD = 1.08 - 24.5*10^-3/0.026-log(2);
for i = 1:length(x)
if x(i) < WD;
ND(i) = log(5*10^18);
else
ND(i) = log(5*10^18) + 40 - x(i);
end
end

WA = 36.4*10^-3/0.026 + log(2);
for i = 1:length(x)
if x(i) > WA;
NA(i) = log(10^11);
else
NA(i) = log(10^11) - WA + x(i);
end
end

semilogy(x,exp(n),x,exp(p),x,exp(ND),x,exp(NA),x,exp(ND) + exp(p),x,exp(NA)+exp(n)); grid


Der Plot des Programms ist einen Post vor diesem von mir zu finden.

Die Knicke stammen daher, dass die Fermi-Dirac-Funktion approximiert wurde!

Eine letzte Frage bleibt mir jedoch noch immer: Wie kann ich erreichen, dass meine Ordinate bei 'semilogy' von a bis b geht?

Zuletzt bearbeitet von Huskypaw am 23.12.2008, 17:41, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin
Admin

Admin



Beiträge: 651
Anmeldedatum: 16.06.07
Wohnort: Bietigheim-Bissingen
Version: ---
     Beitrag Verfasst am: 23.12.2008, 10:16     Titel:
  Antworten mit Zitat      
Hallo Huskypaw,

zu deiner Frage...
Huskypaw hat Folgendes geschrieben:
[img]http://img399.imageshack.us/my.php?image=79105131on0.png[/img]

PS: Warum zeigt das Forum keine PNGs an, ist doch offizielles Format?

Da hast du vollkommen Recht, aber keine Verlinkung führt nicht auf ein Bild sondern auf eine Homepage wo das Bild integriert ist.

Wenn du auf diese Homepage gehst siehst du sogar links wie man es in Foren einbaut Smile

So, ich hoffe ich konnte dir weiterhelfen.

Viele Grüße und eine schöne Weihnachtszeit wünscht
Martin
_________________

Der kleine goMatlab.de-Knigge - Eine kleine Liste von wichtigen Regeln, die jeder beachten sollte
Private Nachricht senden Benutzer-Profile anzeigen
 
sirpaderick
Forum-Anfänger

Forum-Anfänger



Beiträge: 14
Anmeldedatum: 18.06.08
Wohnort: Ludwigshafen
Version: 7.5.0 (R2007b)
     Beitrag Verfasst am: 25.12.2008, 21:57     Titel:
  Antworten mit Zitat      
Hallo,

also falls du dass mit der achse noch nicht gelöst hast.
der befehl
Code:

axis([xmin xmax ymin ymax])
 

behebt dein problem.
so kannst du genau definieren von wo bis wo deine achse verlaufen soll
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.