Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Numerische Mathematik

Studierende:
Praktikant Toolentwicklung Matlab (m/w)
Branche: Beratung, Expertise, Fahrzeugtechnik, Fahrzeugteile, Technische Dienstleistungen
MBtech Group GmbH & Co. KGaA - Fellbach

Studentischer Nebenjob als MATLAB Programmierer
Branche: Werbung, Public Relations
Success Drivers GmbH - Köln

Praktikant (m/w) Erstellung virtueller Trajektorien
Branche: Luft-, Raumfahrttechnik, Wehrtechnik
MBDA Deutschland - Schrobenhausen

Automotive Software Entwicklung
Branche: Informationstechnologie
PikeTec GmbH - Berlin

Intern (m/f) System development for antenna measurement systems
Branche: Mess-, Regel-, Automatisierungstechnik, Telekommunikation, Nachrichtentechnik
ROHDE & SCHWARZ GmbH & Co. KG - München

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Berechnen von DGL mit zeitabhängigem Parameter

 

bjoern_r.
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 20.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2017, 15:00     Titel: Berechnen von DGL mit zeitabhängigem Parameter
  Antworten mit Zitat      
Ich bin neu hier (jedenfalls als Fragesteller - sonst habe ich hier fast immer eine gute Antwort gefunden ohne die Frage nochmal zu stellen. Diesmal leider nicht)

Ich muss eine DGL lösen die eine zeitabhängige Variable enthält. Hierzu habe ich zwei Ansätze probiert und somit zwei Fragen.

1. Ansatz: Interpolieren der zeitabhängigen Variable mit interp1 und lösen der DGL mit ode45
--> Frage: kann man das zeitlich noch verbessern?

2. Ansatz: inkrementelle Lösung über for-Schleift
--> Frage: Die Geschwindigkeit ist zwar schon gut, aber das Beispiel ist auch stark vereinfacht. Kann man diese for-Schleife irgendwie durch eine sinnvolle Vektor/ Matrix-Operation ersetzen um die Performance noch weiter zu steigern

Vielen Dank im Voraus!

Code:

t = 0:60*60*10;
y0 = 1;
a = 1 * 10^-5;

% Zeitabhängiger Parameter A
dt = 1/60/60;
A(1,:) = [0; 1; 1+dt; 2; 2+dt; 3; 3+dt; 4; 4+dt; 5; 5+dt; 6; 6+dt; 7; 7+dt; 8; 8+dt; 9; 9+dt; 10] *60*60; % Zeit
A(2,:) = [1; 1;   0;  0;  1;   1;  0;   0;  1;   1;  0;   0;  1;   1;  0;   0;  1 ;  1 ;0    ;0 ] + 0.1; % Werte

%% Ansatz 1: lösen der Differentialgleichung mit ODE45
tic
dydt =@(t, y) a * interp1(A(1,:), A(2,:), t, 'lienar') * y;
[tout,yout] = ode45(dydt, t, y0);
Rechenzeit = toc;

figure
plot(tout,yout, '.', 'DisplayName', ['ode45, Rechenzeit: ',num2str(Rechenzeit),'s'])
hold on


%% Ansatz 2: Inkrementelle Berechnung mittels for-Schleife
tic
dt = t(2) - t(1);
Ainterp = interp1(A(1,:), A(2,:), t, 'linear');

yout = ones(size(t));
tout = t;

for i=2:length(t)
   
    yout(i) = yout(i-1) + a * Ainterp(i) * yout(i-1) * dt;
   
end
Rechenzeit = toc;

plot(t,yout, '.', 'DisplayName', ['for-loop, Rechenzeit: ',num2str(Rechenzeit),'s'])
legend show
hold off
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 16.303
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2012a
     Beitrag Verfasst am: 20.04.2017, 19:55     Titel:
  Antworten mit Zitat      
Hallo,

der erste Ansatz ist sicher der genauere. Die Rechenzeit beträgt bei mir 0,4 Sekunden. Das sollte doch nicht wirklich ein Problem sein?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.