Über folgendes Problem bin ich gestolpert: ich habe eine (nicht zu wilde) Funktion u (s.u.), von deren Ableitung ich eine Funktion der realwertigen Nullstellen bekommen möchte. Leider bekomme ich nur komplexwertige... Die Zeichnungen zeigen aber dass realwertige existieren.
Das Skript unten plottet die Funktionen u und die Ableitung dudr um so zu checken, dass alles richtig läuft und das Nullstellen tatsächlich existieren (tun sie). Die dudr-Funktion geht über einen sehr weiten Bereich mit "recht eng liegenden" Nullstellen, ist das ein Problöem für den Solver (sigma-Werte ~e-11, r-Werte ~e-6)?
die funktion siht mir irgendwie für x~=0 streng monoton fallend aus. ich wüsste nicht warum da die ableitung nullstellen haben sollte aber ich mag mich da auch irren. deine plots sind irgendwie auch sehr komisch.
_________________
Die Ableitung hat definitiv Nullstellen (evtl liegt für Matlab aber das Problem da, dass wenn in der Kurvenschar sigma --> 0 die Nullstellen unendlich weit an die Stelle r=0 ranrücken?).
Dass die Funktion dudr eine Nullstelle haben muss erkennt man an den Figures, oder auch mit folgender Überlegung (halten wir mal sigma fest):
u(r) >= 0 für alle r
u(r-->unendlich) --> 0
Dazu ist die Steigung von u an der Stelle r=0 größer als Null - als Beweis: Taylor-Entwicklung an der Stelle r=0: dudr(r=0) ~= 1/r * 2r/sigma = 1/sigma >0
Das heißt irgendwo muss die Steigung negativ werden, damit die Funktion für r --> unendlich "von oben" gegen Null laufen kann.
Du traust den Figures nicht - die sind definitv korrekt (hab es ohne sym-Box numerisch gegengecheckt). Vielleicht siehts weniger komisch aus wenn man die sigma-Auflösung etwa um den Faktor 50 zu erhöht, also: sigmai=3.5e-11:3.5e-11/50:280e-11
Dazu ist die Steigung von u an der Stelle r=0 größer als Null -
an der stelle ist die funktion nicht definiert. irgendwelche aussagen über ihre steigung an der stelle zu treffen halte ich für nicht sinnvoll.
_________________
Mehr kann man da auch nicht wirklich erwarten, da eine solche Gleichung allgemein keine explizite Lösung hat (und dann kann natürlich MATLAB auch keine finden).
Falls du eine ältere Version als R2015a nutzt, bitte dies bei der Frage angeben oder am besten im Profil eintragen.
Hallo nochmal und danke Harald das ist was ich wollte.
Aber ein kleines Problemchen besteht immer noch: die Loesungsfunktion zu dudr=0 ist ja ersteinmal komplexwertig, es sollen aber nur realwertige r zugelassen werden. Da die Lösungsfunktion ja auch die r-Lage der Extremwerte (und in diesem Fall die Maximalwerte) angibt, kann man sich an Hand des Plots überzeugen, dass es auch Nullstellen für realwertige r geben muss.
Unten habe ich noch mal das entschlackte Skript das ja eigentlich funktionieren sollte angefügt. Es wird neben der Kurvenschar u_sigma(r) auch die Lösungskurve u(rmax(sigma)) geplottet. Irgendwas stimmt aber mit der roten Lösungskurve immer noch nicht - sie liegt nicht auf den Maxima der blauen Kurvenschar sondern irgendwie verschoben (man beachte die ersten beiden +-markierten Punkte der roten Kurve) .... Ein Verwenden nur des abs()-Teils oder nur des real()-Teils verschiebt die Kurve aber auch nicht an die richtige Position
t2sigmaFac=4*0.95e-6;
tvec=1e-6:10e-6/10:200e-6; %Aus dem tvec wird der Scharparameter sigma gewonnen gemäß sigma:=tvec*t2sigmaFac
rvec=1e-7:2e-7:100e-6;
%Zeichne Kurvenschar u_sigma(r) figure;
for i=tvec
plot(rvec,feval(hfunc_u,rvec,i*t2sigmaFac));
hold on;
end;
%Ableitung nach r von u bilden um dann Maximal- (bzw Extrem) Werte zu bestimmen
dudr=diff(u,r)
hfunc_Deriv= matlabFunction(dudr);
Loesung=solve(dudr,r,'Real',true) %finde die realwertige Funktion der Nullstellen -> keine Lsg.
Loesung=solve(dudr,r)
Loesung=Loesung(1); %Nur oberer Ast der Lambert w Fkt (Bei mir liegt der obere Ast in Loesung(1) bei Matlab 2015 scheint der in Loesung(2) zu liegen?)
hfunc_Nullstellen=matlabFunction(Loesung); %function handle auf Nullstellenfunktion
rmax_sigma=feval(hfunc_Nullstellen,tvec*t2sigmaFac); %r-Werte zu den Nullstellen, also r_max(sigma)
u_rmax_sigma=feval(hfunc_u,(rmax_sigma),tvec*t2sigmaFac); %entsprechende Werte u(r_max(sigma)) plot((rmax_sigma),(u_rmax_sigma),'r');
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.