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

zu wenige randbedingungen für DGL 2. ordnung

 

juuuwe
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2009, 15:44     Titel: zu wenige randbedingungen für DGL 2. ordnung
  Antworten mit Zitat      
heiho... hab im anhang mal die aufgabenstellung der programmierung angehangen. die sache, die für mich als "programmier-greenhorn" neu ist, is die, dass die DGL 2. ordnung von ner anderen DGL 1. ordnung abhängt. ich bin nun soweit, dass mir matlab die DGL 1. ordnung löst und müsste die dortige lösung jetzt ja an die DGL 2. ordnung übergeben... das is aber da kleinere problem. mich verwundert, dass bloß eine randbedingung für die DGL 2. ordnung gegeben ist, oder irre ich da und es ist irgendwo noch eine versteckt?
schönen dank schonmal für jegliche hinweise und tipps.

juuuwe

Scannen0021.jpg
 Beschreibung:

Download
 Dateiname:  Scannen0021.jpg
 Dateigröße:  102.19 KB
 Heruntergeladen:  606 mal
Scannen0020.jpg
 Beschreibung:

Download
 Dateiname:  Scannen0020.jpg
 Dateigröße:  413.36 KB
 Heruntergeladen:  652 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2009, 16:13     Titel:
  Antworten mit Zitat      
Hallo,

Ich sehe die einzige Möglichkeit darin, dass man die DGL als eine DGL in dx/dz und seiner Ableitung auffasst, womit es eine DGL 1. Ordnung ist und nur eine Anfangsbedingung benötigt wird. Natürlich bekommt man dann als Ergebnis dx/dz und nicht die Funktion x an sich.

Viele Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
juuuwe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2009, 17:00     Titel:
  Antworten mit Zitat      
man muss die DGL 2. Ordnung doch sowieso als system von DGLs 1. ordnung schreiben, ums numerisch mit matlab lösen zu können, oder? dann braucht man doch aber trotzdem 2 Anfangsbedingungen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2009, 17:19     Titel:
  Antworten mit Zitat      
Setze u = dx/dz, dann ist es eine DGL 1. Ordnung in u.
Private Nachricht senden Benutzer-Profile anzeigen
 
juuuwe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2009, 17:20     Titel:
  Antworten mit Zitat      
hab gleich noch ne frage: folgende funktion hab ich geschrieben, um die DGL 1. ordnung n(x) zu bestimmen:

function [ xwerte,nstrich ] = ableit(fhandle,a,b,N,n0,d)
a=0;
b=2*pi;
n0=1;
d=1;
N=100;
fhandle=@(x)n0/(cosh(pi*x/(2*d)));

if(N<2)
error('2 Punkte sollten es schon sein!');
else
xwerte=linspace(a,b,N);
for n=1:N-1
deltax=xwerte(n+1)-xwerte(n);
nstrich(n)=(fhandle(xwerte(n)+deltax)-fhandle(xwerte(n)-deltax))/(2*deltax);
end
end

plot(xwerte(1:N-1),nstrich(: ));


Wenn ich nun beginne den file für die DGL 2. ordnung zu schreiben, würde ich so anfangen:

function ystrich=DGLOrd2(z,y)
ystrich=zeros(2;1);
y1strich = y2;
y2strich = nstrich*(y2^2+1)/n;

Wie bekomm ich denn nun meine nstrich und n aus dem "ableit" file in diese funktion rein?
und wieder schonmal ein dankeschön im vorraus für alle kommentare!

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.07.2009, 18:06     Titel:
  Antworten mit Zitat      
Hallo,

der Sinn einer Funktion ist, dass die Eingabeargumente von außen übergeben werden.
Die Funktion sollte vektorisiert sein. Z.B.:

fhandle=@(x)n0./(cosh(pi*x/(2*d))); % der Punkt ist wichtig
nwerte = fhandle(xwerte);
n_strich = diff(nwerte)./diff(xwerte);

Die Funktion ableit in der von dir geschriebenen Form würde so aufgerufen:
[ xwerte,nstrich ] = ableit(fhandle,a,b,N,n0,d)

dabei stehen in Klammern die Eingabeargumente, werden also wie gesagt NICHT innerhalb der Funktion belegt. Zurück kommen dann die xwerte und nstrich, ich würde mir aber auch die nwerte zurückgeben lassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
juuuwe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2009, 19:54     Titel:
  Antworten mit Zitat      
hab grad bedenken, dass wir vielleicht aneinander vorbei reden würden. kann ich, so, wie du das geschrieben hast, also "[ xwerte,nstrich ] = ableit(fhandle,a,b,N,n0,d) ", diese funktion auch in anderen function files aufrufen? dass man die im workspace so aufruft is mir bekannt. nur da diese DGL 2.ordnung aus der aufgabe auch von n und dn/dx abhängt, müsste ich diese größen ja auch in dem file aufrufen können, der diese DGL löst. vielleicht meinst du das aber auch schon, ich hab nur heut abend leider keine zeit mehr es auszuprobieren...
danke nochmals,

juuuwe
Private Nachricht senden Benutzer-Profile anzeigen
 
juuuwe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 11:18     Titel:
  Antworten mit Zitat      
heiho... so sieht nun mein aktueller stand aus:

function [ xwerte,nwerte,nstrich ] = ableit(fhandle,a,b,N,n0,d,g)
%a=0;
%b=2*pi;
%n0=1;
%d=1; (für Brechzahlverlauf 2 benötigt)
%g=1; (für Brechzahlverlauf 1 benötigt)
%N=100;
%fhandle=@(x)n0./(cosh(pi*x/(2*d)); (Brechzahlverlauf 1)
%fhandle=@(x)g*x.^2+n0; (Brechzahlverlauf 2)

if(N<2)
error('2 Punkte sollten es schon sein!');
else
xwerte=linspace(a,b,N);
nwerte=fhandle(xwerte);
for n=1:N-1
deltax=xwerte(n+1)-xwerte(n);
nstrich=(fhandle(xwerte(n)+deltax)-fhandle(xwerte(n)-deltax))/(2*deltax);
end
end
figure(1),clf
plot(xwerte,nwerte)
xlabel('x')
ylabel('n(x)')
figure(2),clf
plot(xwerte(1:N-1),nstrich(: ));
xlabel('x')
ylabel('dn/dx')

Diese function file ermöglicht mir nun n(x) abzuleiten.
Weiterhin hab ich folgende zwei programmteile geschrieben:

function xstrich=DGLOrd2(z,x)
nstrich=
nwerte=
xstrich=zeros(2,1);
xstrich = [x(2);nstrich*(x(2)^2+1)/nwerte];

und

z0=0;
zende=6;
x01=0; %(Anfangswert)
x02=0; %(Anfangswert)
[z,x]=ode45('DGLOrd2',[z0,zende],[x01,x02]);
plot(z,x)
xlabel('z')
ylabel('x,dx/dz')

Wie unschwer zu erkennen ist, hab ich ein problem damit nstrich und nwerte aus der function ableit in die function DGLOrd2 zu überführen...
Hat da jemand mal nen hilfreichen Tipp für mich?
Danke im Voraus,
juuuwe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.07.2009, 11:22     Titel:
  Antworten mit Zitat      
Code:
function xstrich=DGLOrd2(z,x)
% natürlich müssen an dieser Stelle noch die Parameter definiert werden, oder von außen an DGLOrd2 übergeben werden.
[ xwerte,nwerte,nstrich ] = ableit(fhandle,a,b,N,n0,d,g)
xstrich=zeros(2,1);
xstrich = [x(2);nstrich*(x(2)^2+1)/nwerte];


Und die Antwort auf die vorherige Frage ist: Ja!

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
juuuwe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 16:13     Titel:
  Antworten mit Zitat      
danke schonema, aber ich komm immer noch nicht auf nen grünen zweig...
welche parameter meinst du denn, die noch bestimmt werden müssten? fhandle,a,b,N,n0,d,g sind ja schon definiert... fehlen da dann noch x und z, oder lieg ich da falsch?
Außerdem gibts in der zeile "xstrich = [x(2);nstrich*(x(2)^2+1)/nwerte];" ne fehlermeldung, von wegen "matrix dimension must agree". aber da darf ich doch eigentlich nix ändern, weil das doch die ableitungen sind.

gruß,
juuuwe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.07.2009, 16:24     Titel:
  Antworten mit Zitat      
Zitat:
welche parameter meinst du denn, die noch bestimmt werden müssten? fhandle,a,b,N,n0,d,g sind ja schon definiert... fehlen da dann noch x und z, oder lieg ich da falsch?


Es muss sichergestellt werden, dass die Parameter im aufrufenden Workspace aufrufst. Wenn man was vom Command Prompt aus aufruft, ist das der Base Workspace, ansonsten der Workspace der aufrufenden Funktion.

Code:
Außerdem gibts in der zeile "xstrich = [x(2);nstrich*(x(2)^2+1)/nwerte];" ne fehlermeldung


Ich vermute (weil ich gerade nicht genau weiss, was du machst), du musst komponentenweise Operationen, z.B. ./ [der Punkt ist das entscheidende] anwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
juuuwe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 16:44     Titel:
  Antworten mit Zitat      
"Es muss sichergestellt werden, dass die Parameter im aufrufenden Workspace aufrufst. Wenn man was vom Command Prompt aus aufruft, ist das der Base Workspace, ansonsten der Workspace der aufrufenden Funktion."

Sorry, aber hier versteh ich nur bahnhof. ich weis weder was der command prompt, noch was der unterschied zwischen dem base workspace und dem workspace is...

"xstrich = [x(2);nstrich*(x(2)^2+1)/nwerte];" das ist einfach die zerlegung der DGL 2. ordnung in ein system von DGLs 1. Ordnung. ob das mit den punkten funktioniert kann ich aber erst ausprobieren, wenn der teil mit den parametern geklärt ist. aber das mit dem punktoperator wird schon stimmen.

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.07.2009, 17:35     Titel:
  Antworten mit Zitat      
Vielleicht würde es nicht schaden, sich wirklich mal von Grund auf mit MATLAB zu beschäftigen, etwa mit Hilfe eines Buches oder eines Kurses.

Zu den Fragen:
Command Prompt: das blinkende Etwas im Command Window ( >> )
Base Workspace: der zum Command Window gehörige Workspace, d.h. dort sind die Variablen abgelegt, die im Command Window angelegt werden.
Im Gegensatz dazu: der Function Workspace - dort sind die Variablen abgelegt, die von der aufrufenden Funktion übergeben wurden oder die innerhalb einer Funktion angelegt wurden.
Jede Funktion hat einen solchen Arbeitsbereich, und Variablen sind grundsätzlich nur in ihrem Arbeitsbereich sichtbar, mit den Ausnahmen will ich jetzt nicht ankommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
juuuwe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2009, 17:57     Titel:
  Antworten mit Zitat      
hab in meinem studium bloß dieses semester mit matlab zu tun und muss mich da eben durchringen. heißt das also, dass ich alle Variablen (bis auf xwerte, nwerte und nstrich, die ich ja über die ableit function aufrufe) nochmal für meine function DglOrd2 definieren muss?
und nochmals danke für deine bemühungen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.07.2009, 18:17     Titel:
  Antworten mit Zitat      
Nicht *für*, sondern *in* der Funktion. Oder als Eingabeargumente übergeben.
Du solltest da auch nicht nur von Semester zu Semester denken, da solide MATLAB-Kenntnisse sicher auch bei der späteren Jobsuche hilfreich sein können.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.