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')
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...
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
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.
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?!
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.
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...
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.