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
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2009, 14:33     Titel:
  Antworten mit Zitat      
so sieht mein aktueller stand nun aus:
Code:
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 (n)=(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')


Code:
function xstrich=DGLOrd2(z,x)
fhandle=evalin('base','fhandle');
a=evalin('base','a');
b=evalin('base','b');
N=evalin('base','N');
n0=evalin('base','n0');
d=evalin('base','d');
g=evalin('base','g');
[xwerte,nwerte,nstrich]=ableit(fhandle,a,b,N,n0,d,g);
xstrich=zeros(2,1);
xstrich = [x(2);(nstrich*x(2).^2+nstrich)./nwerte];
end


Code:
zspan=[0 6];
x0=[0;0]; %Spaltenvektor mit Anfangswerten
[z,x]=ode45('DGLOrd2',zspan,x0);
figure(3),clf
plot(z,x)
xlabel('z')
ylabel('x,dx/dz')
 


Allerdings kommt immernoch die fehlermeldung, dass die matrixdimension in der zeile xstrich = [x(2);(nstrich*x(2).^2+nstrich)./nwerte]; nicht übereinstimmt. ich hab den punktoperator schon an alle mögliche stellen in der funktion gesetzt (hier sinds sogar mal zwei punkte), aber es will net richtig werten...

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: 31.07.2009, 16:16     Titel:
  Antworten mit Zitat      
Probiers mal mit , [nebeneinander schreiben] statt ; [untereinander].

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: 31.07.2009, 17:20     Titel:
  Antworten mit Zitat      
das m ist behoben. es hat sich herausgestellt, dass dn aus 99 werten und n werte aus 100 werten besteht...
ich habe den code also wie folgt verändert, damit die matrixdimension hinhaut:
Code:
function dx=DGLOrd2(z,x)
fhandle=evalin('base','fhandle');
a=evalin('base','a');
b=evalin('base','b');
N=evalin('base','N');
n0=evalin('base','n0');
d=evalin('base','d');
g=evalin('base','g');
[xwerte,nwerte,dn]=ableit(fhandle,a,b,N,n0,d,g);
for n=1:N-1
    dx(1,1)=x(2);
    dx(2,1)=(dn(n)*x(2)^2+dn(n))/nwerte(n);
    end
end


Problem ist nun, dass wenn ich den spaß ausführe ich in einer endlosschleife stecke, die andauernd figure 1 und 2 überschreibt...

gruß und abermals nen dickes dankeschön,
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: 31.07.2009, 17:46     Titel:
  Antworten mit Zitat      
Hallo,

Vermutlich keine Endlosschleife, sondern nur seeeeehr viele wiederholte Plot-Befehle, da ableit von ode45 sehr oft aufgerufen wird und bei jedem Aufruf eben diese Plot erzeugt werden.

Kommentier doch mal in ableit.m die Plot-Befehle aus, und schau, was dann passiert.

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: 31.07.2009, 18:09     Titel:
  Antworten mit Zitat      
ohne die plotbefehle kommt figure(3)... aber sieht leider net so aus, wie erwartet.
Außerdem kommt folgenden Meldung:
Zitat:
Warning: Failure at t=9.983457e-001. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.776357e-015) at time t.
> In ode45 at 371
In DglOrd2Loes at 3


Aber es muss doch auch die möglichkeit bestehen, dass die plots 1 und 2 nur einmal aufgerufen werden?!

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: 31.07.2009, 18:23     Titel:
  Antworten mit Zitat      
Die Plot-Befehle in den anderen Figures beeinflussen figure 3 nicht.

Die Warnung bedeutet, dass die Integration vorzeitig abgebrochen werden musste. Das kann am System liegen oder am Löser. Versuchs mal mit ode23s statt ode45.

Und natürlich besteht die Möglichkeit, dass das nur einmal aufgerufen wird: entweder über eine Abfrage oder indem man ableit ausserhalb des Lösens der DGL aufruft.

Schönes Wochenende,
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: 31.07.2009, 18:24     Titel:
  Antworten mit Zitat      
kurze anmerkung: plot 3 sieht doch wie gewollt aus... nur die achsen warn etwas blöd skaliert. wenn man also diese sache mit diesem ständigen, wiederholenden aufrufens der plots 1 und 2 in den griff bekäme, dann wär das super...
und diese angesprochene warnung taucht auch noch auf...

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.