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

Differentialgleichung Programmieren

 

berlin79
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 22.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2011, 13:19     Titel: Differentialgleichung Programmieren
  Antworten mit Zitat      
Hallo!

Ich habe hier eine Aufgabe vor mir, wo ich einfach nicht weiter weiß.

******************************

"Das exponentielle Zellwachstum C(t) wird durch die lineare, homogene DGL 1. Ordnung beschrieben:

C'(t)= µ * C(t) ; Nebenbedingung C(to)=Co

Zur Vereinfachung: µ ist konstant. Mit dem nachfolgenden Verfahren und der Schrittweite h=0.01 die numerische Lösung der DGL berechnen:

Ck+1=Ck + h * µ * Ck; tk+1=tk+h; k=0,1,2,...

Info:(k+1 und k und o sind alle tief gesetzt, kann es hier nur nicht so schreiben)

Die Anfangswerte to=0, Co=2 und µ=0.5 sind gegeben. Wie lange muss iteriert werden, um die numerische Lösung auf dem Intervall [0,1] zu erhalten? Speichern Sie die berechneten numerischen Lösungspunkte (tk,Ck),k>0 ab. Geben Sie die berechneten Lösungspunkte auf dem Bildschirm aus. Visualisieren Sie die Daten.


******************************


Code:
%Das ist mein Ansatz, bitte nicht lachen. Habe echt Schwierigkeiten und kann 0 programmieren.

clear all; clc;

Co=2;
to=0;
µ=0.5;
Ck+1=0;
tk+1=0;

for k=0:0.01:30

Ck+1=Ck + h * µ *Ck;
tk+1= tk + h;

end

 



Ist bestimmt total falsch, aber ich weiß einfach nicht mehr weiter Embarassed

Würde mich über Hilfe/Tipps sehr freuen!
Private Nachricht senden Benutzer-Profile anzeigen


Phate
Forum-Guru

Forum-Guru



Beiträge: 283
Anmeldedatum: 09.11.09
Wohnort: Stuttgart
Version: R2008b
     Beitrag Verfasst am: 22.02.2011, 14:08     Titel:
  Antworten mit Zitat      
HI,

Hab leider grade nicht viel Zeit es dir zu korrigieren, aber ein paar Sachen kann ich dir sagen die falsch sind.

1. µ wird er nicht kennen. Ersetz es einfach mit: mue
2. Ck+1 und tk+1 = 0 wird auch Probleme machen schreib dafür
Ck_0 = 0 und tk_0 = 0
3. in der schleife hast du quasi deine mit k deineSchrittweite festgelegt. Die Schleife wird jetzt von 0 bis 30 in 0.01 schritten durchlaufen. du verwendest aber niemals die varaible k.

Hoffe es hilft auf die schnelle

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
berlin79
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 22.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2011, 14:16     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort.

Zu 1.) und 2.): Ich würde es dann anpassen, wenn ich es in Matlab programmiere, habe es nur so geschrieben um es optisch zu vereinfachen.

3.) Hmm, ja. Ich weiß ja noch nichtmal ob ich da überhaupt eine Schleife brauche in der Aufgabe. Vermutlich muss es eine While Schleife sein. Stehe damit aber (leider) auf Kriegsfuß Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.02.2011, 15:00     Titel:
  Antworten mit Zitat      
Hallo,

zu 1. + 2.: gerade wenn du dich selbst als völligen Anfänger siehst, ist es wichtig, sich mit der Syntax von MATLAB vertraut zu machen. Für die Leute hier ist MATLAB-Code eher lesbarer als die Variante hier.

zu 3.: ich würde k über die Anzahl der Schritte laufen lassen, also
k = 1:2999. Man könnte natürlich auch mit CUMSUM arbeiten, aber versuchs doch erstmal mit FOR.

Wenn du das alles berücksichtigst, sollte es recht gut aussehen. Wenn dann noch Probleme bestehen, kannst du ja nochmal deinen modifizierten Code posten, und dann sehen wir weiter.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Balzer82

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2011, 15:18     Titel:
  Antworten mit Zitat      
Was dort gemacht werden soll, ist die mathematisch exakte Differentialgleichung durch numerische Integration zu berechnen. Dabei wird das exakte Differential mit unendlich kleinen Zeitdifferenzen durch den "Euler-Cauchy" Ansatz approximiert.

Also einfach mal C' als (Delta C)/(Delta T) hinschreiben. Dann wird es klarer, oder?

Ck+1 soll einfach "das nächste C" sein. Ck ist das "aktuelle C".

Probier mal ob das funktioniert:
Code:
clear all, clc, close all
% Lineare homogene Differentialgleichung numerisch Lösen
% aka Euler-Cauchy Ansatz

% Differentialgleichung
% C'(t) = µ * C(t)
C(1)=[2];
h = 0.01;
mue = 0.5;

for k=1:1:(1/h-1)
    DeltaC = mue * C(k) * h;
    C(k+1) = C(k) + DeltaC;
end
C = C';

plot(C)
grid on
title(['Exponentielles Zellwachstum mit \mu=' num2str(mue) ' und Anfangspopulation ' num2str(C(1))]);
 
berlin79
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 22.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2011, 17:36     Titel:
  Antworten mit Zitat      
Danke Harald für deinen Beitrag!

An Balzer82: Ich denke genau so soll es aussehen. Dann lag ich ja garnicht so extrem falsch. Das beruhigt mich etwas. Wink

Allerdings verstehe ich die Schleifenbedingung

Code:
for k=1:1:(1/h-1)
nicht so ganz.

Also wie kommst du auf (1/h-1)?

Und
Code:
bedeutet quasi nur, dass das eben berechnete C halt C' sein soll, richtig?

Herzlichen Dank für eure Hilfe. Bin so glücklich endlich Antworten auf meine Fragen zu erhalten Smile.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich wollte dir an sich helfen, selbst genau diesen Schritt zu machen Wink

Ich würde allgemein T/h-1 nehmen:
T ist die Endzeit, die Anzahl der benötigten Schritte ist dann T/h. balzer nimmt T=1 an. Das -1 würde ich weglassen; den Denkfehler hatte ich vorhin aber auch drin, als ich 2999 geschrieben habe.

Idealerweise sollte man C am Anfang noch vorbelegen:
Code:


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
berlin79
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 22.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2011, 18:07     Titel:
  Antworten mit Zitat      
Ah, ok. Dann verstehe ich es wieder. Das kann man ja frei variieren. Also k= 1 in 1er Schritten bis z.B. 1/h oder 30 oder oder...

Also das mit dem floor lasse ich lieber.

Der Grund: Ich brauche vorerst nur ein bestimmtes Basiswissen, und das auch nur für die mündliche Prüfung. Und in der Vorlesung hatten wir nur eine begrenzte Anzahl an Befehlen. Confused

Ihr habt mir aber wirklich sehr geholfen. Schlimmeres als das wird mich auch nicht erwarten.
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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.