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

DGL mit Euler-Verfahren

 

SarahSW1550

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2015, 17:01     Titel: DGL mit Euler-Verfahren
  Antworten mit Zitat      
Hallo alle,

ich hänge an einer Aufgabe fest und finde meinen Fehler nicht. Aufgabenstellung wie folgt:
Löse eine einfache DGL f'(x) = f(x) mit dem Euler-Verfahren. Betrachte verschiedene Funktionen (z.B. f(x) = -􀀀rx, f(x) = x ^a, f(x) = sin(x), f(x) =
x(1 􀀀- x), f(x) = x + t) und trage die Lösung graphisch auf. Auch für verschiedene Schrittweiten. Vergleiche mit der analytischen Lösung und mit Matlabroutine ode45.

ich habe jetzt folgendes geschrieben:

Code:

function numsimulation(t0, t_end, delta_t, x0, fun)

% erwartet die intervallgrenzen t0, t_end, die schrittweite
% delta_t, anfangswert x0 an der stelle t0 und eine anonyme funktion fun.
% t0 muss kleiner als t_end sein. zeichnet die iterationsschritte

figure()
while t0(end) < t_end
    t0 = [t0, t0(end) + delta_t];
    x0 = [x0, x0(end) + fun(x0(end))*delta_t];
end
plot(t0, x0, '-o', 'MarkerSize', 3); xlabel('t_i'); ylabel('Funktionswerte'); title(['Näherung einer Funktion mit dem Euler-Verfahren - Startwert ', num2str(x0(1))]);
   
end  

% und das hauptskript:
fun = cell(1,5);        % anonyme funktionen in einem cell array speichern, für die for schleife später
r = 3;
fun{1} = @(x) -r*x;
a = 2;
fun{2} = @(x) x.^a;
fun{3} = @(x) sin(x);
fun{4} = @(x) x.*(1-x);
t = -4;
fun{5} = @(x) x + t;
delta_t = [0.1, 0.5, 1.5];  % verschiedene schrittweiten speichern
for k = 1:3
    t = delta_t(k);
    for i = 1:5
    numsimulation(0, 3, t, 5, fun{i})
    hold on
    x = 0:0.1:3;
    if i == 1
        plot(x, (-3/2)*x.^2 + 5, 'r')         % plotte analytische lösung
        [T,Y] = ode45(@(t,y) -3*t, [0, 3], 5);       % verwende ode45 solver
        plot(T, Y, 'y')
    elseif i == 2
        plot(x, 1/3*x.^3 + 5, 'r')
        [T,Y] = ode45(@(t,y) t^2, [0, 3], 5);
        plot(T, Y, 'y')
    elseif i == 3
        plot(x, -cos(x) + 6, 'r')
        [T,Y] = ode45(@(t,y) sin(t), [0, 3], 5);
        plot(T, Y, 'y')
    elseif i == 4
        plot(x, (1/2*x.^2 - 1/3*x.^3 + 5), 'r')
        [T,Y] = ode45(@(t,y) t*(1-t), [0, 3], 5);
        plot(T, Y, 'y')
    else
        plot(x, (1/2*x.^2 -4*x + 5), 'r')
        [T,Y] = ode45(@(t,y) t - 4, [0, 3], 5);
        plot(T, Y, 'y')
    end
    hold off
    end
end

 


da die graphen des ode45 solvers mit denen meiner berechneten analytischen funktionen übereinstimmen (ist ja einfach nur das integral, oder?), gehe ich nicht davon aus, das da ein fehler ist. Die graphen, die durch das euler-verfahren entstehen, sehen aber seeeeehr anders aus.

Falls jemand Ideen hat - immer her damit! Smile


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2015, 17:19     Titel:
  Antworten mit Zitat      
Hallo,

Du musst die Funktion für t0(end) statt x0(end) auswerten.
Code:
x0 = [x0, x0(end) + fun(t0(end))*delta_t];


Statt einer while-Schleife würde ich eine for-Schleife mit Indizierung wählen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2015, 18:03     Titel:
  Antworten mit Zitat      
Himmel!! Ja, natürlich! Was ein bescheuerter Fehler... und jetzt saß ich hier ne stunde und hab gesucht... Vielen Dank!! Smile
 
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.