www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "MathCad" - Programmierung DiffGl.Sys
Programmierung DiffGl.Sys < MathCad < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "MathCad"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Programmierung DiffGl.Sys: Einbinden von Diffgl.Sys.
Status: (Frage) beantwortet Status 
Datum: 18:07 Mo 24.05.2010
Autor: Hefepilz

Hallo liebe Matheraum-Mitglieder,

schön, dass ich dieses Forum gefunden habe, für MathCAD ist das nicht so einfach.

Habe folgendes Problem,  für das ich mir von hier Hilfe erhoffe. Vielleicht kann mir jemand weiterhelfen.

Und zwar habe ich ein Gleichungssystem mit zwei Differentialgleichungen mit rkfest gelöst. Das ist nicht weiter schwierig. Doch nun möchte ich es in einen Programmierteil einbinden, dort dann einen bestimmten Wert z.B. Z50 auswählen und mittels einer zweiten "normalen" Formel die Anfangswerte dieses Gleichungssystems neu berechnen. Und dies zyklisch z.B. 30x. Wenn ich das richtig verstehe, kann ich das mittels einer For-Schleife erreichen, doch wie setzte ich die Anfangswerte des Gleichungssystems immer wieder neu? Und wie lasse ich mir die Anfangswerte für jeden Zyklus in eine Tabelle ausgeben bzw. wie lasse ich mir die Anfangswerte in einem Diagramm in Abhängigkeit von der Zeit bzw. dem Zyklus darstellen (aus dem Programmierteil heraus)?

Besten Dank schon im Voraus für jegliche Hilfe.

mfg
Hefepilz


Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
Programmierung DiffGl.Sys: Antwort
Status: (Antwort) fertig Status 
Datum: 22:56 Di 25.05.2010
Autor: ullim

Hi,

ich benutze Mathcad in der Version 14. Damit ist es möglich eine Differentialgleichung parametrisiert zu lösen. Dazu definierst Du die rechte Seite der DGL als Funktionen die von einem Parameter abhängen, z.B. den Anfangsbedingungen. Danach löst Du die DGL, z.B. durch Gdglösen und stellst die Lösung in der Form [mm] z(\theta) [/mm] dar.

Diese parametrisierte Form der Lösung der DGL kannst Du in einem For Loop aufrufen mit immer neuen Parametern und dann lösen, in Deinem Fall die Anfangsbedingungen.

Ein Problem was bei mir aufgetreten ist, ist eine ziemlich hohe CPU Last. Falls Du da was findest, was diese reduziert kannst Du mir das posten.




Bezug
                
Bezug
Programmierung DiffGl.Sys: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 08:23 Mi 26.05.2010
Autor: Hefepilz

Hallo Ullim,

besten Dank für deine schnelle Antwort. Ich habe versucht es in Mathcad2000 (MathCAD 14 nutze ich zur Zeit als Testversion) zu lösen (da habe ich eine Vollversion) . Meine Lösung sieht wie in diesem Bild aus [a][Dateianhang Nr. 1 (fehlt/gelöscht)]. Allerdings bekomme ich hier immer nur den letzten Wert, wenn alle Zyklen durchlaufen sind f(10) bringt den gleichen Wert wie z.B. f(20) etc. Ich wäre allerdings daran interessiert die Konzentrationen "m" und "s" in Abhängigkeit von j, also nach jedem Zyklus tabellarisch sowie in einem Diagramm darzustellen. Dies ist mir bisher leider nicht gelungen. Ich bekomme einfach die Ergebnisse eines jeden Zyklusses nicht aus dem Programmteil heraus, sondern nur das Endergebnis.

Dies gilt auch für den Versuch die Endergebnisse (über alle Zyklen) von "m" und "s" in Abhängikeit von [mm] \Delta [/mm] t und [mm] \gamma [/mm] darzustellen. Hier auch wieder tabellarisch und in einem 3D-Diagramm. Mein Problem hierbei ist, dass ich mit mehreren for-Schleifen arbeite, aber ich die Daten wieder nicht aus dem Programmierteil herausbekomme. Meinen Versuch  habe ich hier[a][Dateianhang Nr. 2 (fehlt/gelöscht)] mit eingefügt.

Kannst Du mir sagen, was ich falsch mache, bzw. wie ich es richtig machen könnte?

Vielen lieben Dank.

Hefepilz

Bezug
                        
Bezug
Programmierung DiffGl.Sys: Antwort
Status: (Antwort) fertig Status 
Datum: 13:50 Mi 26.05.2010
Autor: ullim

Hi,

ich lege Dir mal mein geändertes Programm bei.  [a][Dateianhang Nr. 1 (fehlt/gelöscht)]

Folgende Änderungen habe ich gemacht.



1. Der Parameter j in Deinem Programm hat keine Wirkung, da Du ja j als Laufvariable im For Loop benutzt. Dadurch wird j immer neu definiert und überschrieben. Somit kannst Du den Parameter auch weglassen. Das gleiche gilt für [mm] \gamma [/mm] und d.

2. Ich habe die Zwischenergebnisse von m und s für jeden Durchlauf in den Vektoren M und S abgespeichert und gebe den Vektor  [mm] \vektor{M \\ S} [/mm] am Ende des Programms zurück. Auf die Ergebnisse kannst Du dann mit f zugreifen. M ist der 0'te Eintrag im Vektor f und S ist der 1'te Eintrag im Vektor f.

Willst Du die Ergebnisse auch noch in Abhängigkeit von [mm] \gamma [/mm] und d speichern, geht das genauso, allerdings must Du Dir überlegen, wie die Ergebnisse in den Vektoren M und S angeordnet sind. Die ersten Z Ergebnisse entsprechen [mm] \gamma=0.1 [/mm] d=1, die zweiten Z Ergebnisse [mm] \gamma=0.1 [/mm] und d=2 usw.


Bezug
                        
Bezug
Programmierung DiffGl.Sys: Antwort
Status: (Antwort) fertig Status 
Datum: 13:56 Mi 26.05.2010
Autor: ullim

Hi,

Hat mit dem hochladen nicht geklappt, deshalb nochmal.

ich lege Dir mal mein geändertes Programm bei [a]Datei-Anhang. Folgende Änderungen habe ich gemacht.

1. Der Parameter j in Deinem Programm hat keine Wirkung, da Du ja j als Laufvariable im For Loop benutzt. Dadurch wird j immer neu definiert und überschrieben. Somit kannst Du den Parameter auch weglassen. Das gleiche gilt für [mm] \gamma [/mm] und d.

2. Ich habe die Zwischenergebnisse von m und s für jeden Durchlauf in den Vektoren M und S abgespeichert und gebe den Vektor  [mm] \vektor{M \\ S} [/mm] am Ende des Programms zurück. Auf die Ergebnisse kannst Du dann mit f zugreifen. M ist der 0'te Eintrag im Vektor f und S ist der 1'te Eintrag im Vektor f.

Willst Du die Ergebnisse auch noch in Abhängigkeit von [mm] \gamma [/mm] und d speichern, geht das genauso, allerdings must Du Dir überlegen, wie die Ergebnisse in den Vektoren M und S angeordnet sind. Die ersten Z Ergebnisse entsprechen [mm] \gamma=0.1 [/mm] d=1, die zweiten Z Ergebnisse [mm] \gamma=0.1 [/mm] und d=2 usw.



Dateianhänge:
Anhang Nr. 1 (Typ: rtf) [nicht öffentlich]
Bezug
                                
Bezug
Programmierung DiffGl.Sys: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 08:18 Mo 31.05.2010
Autor: Hefepilz

Hallo Ullim,

vielen lieben Dank, Du hast mir super weitergeholfen. Auch das mit in Abhängigkeit von gamma und delta t hat mit mehreren verschachtelten Schleifen geklappt. Allerdings beansprucht die Berechnung wirklich sehr viel Rechenleistung und dauert seine Zeit, wenn viele Punkte berechnet werden sollen.

Mindestens eine Frage hätte ich aber noch. Und zwar, wie bekomme ich (bei ersterem Programm) f0 und f1 in ein Diagramm mit j auf der x-Achse? Hier meldet mir Mathcad, dass f0 kein Skalar sei und zeigt mir deshalb die Werte nicht im Diagramm an. Was müsste ich hier tun?

Meine weiteren Überlegungen führen dahin, dass abhängig von delta t und gamma bzw. s_ein mehr oder weniger Zyklen j benötigt werden, damit sich m und s der darauf folgenden Zyklen nicht mehr ändern. Aber wie bekomme ich hier einen verlässlichen Wert, ohne mehrmals ausprobieren und die MathCAD immer wieder neu rechnen lassen zu müssen (nimmt zu viel Zeit in Anspruch).
Ich dachte hier an eine while-Schleife mit Toleranz. Aber ich kann für die Abweichung keinen festen Wert annehmen, sondern muss die Differenz vom (j-1)ten Zyklus minus dem Wert des j-ten Zyklus verwenden. Aber wie mache ich das MathCAD begreiflich?



Bezug
                                        
Bezug
Programmierung DiffGl.Sys: Antwort
Status: (Antwort) fertig Status 
Datum: 22:37 Di 01.06.2010
Autor: ullim

Hi,

> Hallo Ullim,
>  
> vielen lieben Dank, Du hast mir super weitergeholfen. Auch
> das mit in Abhängigkeit von gamma und delta t hat mit
> mehreren verschachtelten Schleifen geklappt. Allerdings
> beansprucht die Berechnung wirklich sehr viel
> Rechenleistung und dauert seine Zeit, wenn viele Punkte
> berechnet werden sollen.
>  

Bei dem Beispiel das ich gerechnet habe, habe ich ca. 18 [s] Rechenzeit gebraucht. Stimmt das etwa mit Deiner überein? Ich nutze einen X9000 Extrem Dual Core Prozessor. Die Zeit habe ich mit time() bei Start der Berechnung und time () Ende Berechnung und Differenzbildung ermittelt, s. Anhang.

> Mindestens eine Frage hätte ich aber noch. Und zwar, wie
> bekomme ich (bei ersterem Programm) f0 und f1 in ein
> Diagramm mit j auf der x-Achse? Hier meldet mir Mathcad,
> dass f0 kein Skalar sei und zeigt mir deshalb die Werte
> nicht im Diagramm an. Was müsste ich hier tun?
>  

Du kannst einfach per Array Index auf die Daten zugreifen wie Du aus meinem Beispiel siehst. Ich habe in meinem Code eine Grafik anzeigen lassen und die Werte der Grafik über diesen Mechanismus dargestellt. Ich habe Dein zweites Beispiel genommen und die Werte für m und s in den Arrays M und S abgespeichert. Immer die ersten Z Werte und dann die nächsten Z Werte direkt dahinter.

Frage: Gibt es bei Mathcad 2000 den Befehl spur oder trace, er ist mir sehr hilfreich gewesen.

> Meine weiteren Überlegungen führen dahin, dass abhängig
> von delta t und gamma bzw. s_ein mehr oder weniger Zyklen j
> benötigt werden, damit sich m und s der darauf folgenden
> Zyklen nicht mehr ändern. Aber wie bekomme ich hier einen
> verlässlichen Wert, ohne mehrmals ausprobieren und die
> MathCAD immer wieder neu rechnen lassen zu müssen (nimmt
> zu viel Zeit in Anspruch).
>  Ich dachte hier an eine while-Schleife mit Toleranz. Aber
> ich kann für die Abweichung keinen festen Wert annehmen,
> sondern muss die Differenz vom (j-1)ten Zyklus minus dem
> Wert des j-ten Zyklus verwenden. Aber wie mache ich das
> MathCAD begreiflich?
>  

Hier habe ich eine prinzipielle Frage. In dem Beispiel das Du gepostet hast war gamma ein Array Index. Das geht glaube ich nicht. Indizes sind immer Integer. Deshalb habe ich mein Beispiel entsprechend abgeändert.

Willst Du auch wirklich die Variable d so nutzen wie beschrieben? Also als nächsten Startwert den d'ten Wert der Lösung nehmen.

[a]rkfest-02



Dateianhänge:
Anhang Nr. 1 (Typ: rtf) [nicht öffentlich]
Bezug
                                                
Bezug
Programmierung DiffGl.Sys: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:28 Mi 02.06.2010
Autor: Hefepilz

naja, mit meinem Laptop und den 2,1GHz ist nicht viel möglich, da ich im Moment zu Hause an dem Projekt arbeite. Bei wenigen berechneten Punkten ist die Rechenzeit akzeptabel, aber wenn ich mir 10.000 Ergebnisse ausgeben lassen möchte, dann dauert das schon eine Weile.

Du hast also praktisch den Umweg über die Zeit gewählt, um die Ergebnisse grafisch darzustellen.
Gehe ich also richtig der Annahme, dass eine direkte Darstellung der Ergebnisse mit "j" auf der X-Achse und die Endergebnisse von "m" und "s" bzw. von f0 und f1 auf der y-Achse nicht möglich ist? Bei deinem Beispiel steht ja jetzt unten auf x-Achse i mit 1x10hoch 3 usw.

> Hier habe ich eine prinzipielle Frage. In dem Beispiel das
> Du gepostet hast war gamma ein Array Index. Das geht glaube
> ich nicht. Indizes sind immer Integer. Deshalb habe ich
> mein Beispiel entsprechend abgeändert.

Ja, das stimmt, MathCAD hat schon gemeckert. Der Wert für Gamma soll zwar nur von 0 bis 1 gehen, hab mir deshalb damit abgeholfen, dass ich jetzt ganzahlige gamma verwende, diese aber in der Formel im Programm wieder teile.  

> Willst Du auch wirklich die Variable d so nutzen wie
> beschrieben? Also als nächsten Startwert den d'ten Wert
> der Lösung nehmen.

Ja, das ist Sinn und Zweck der Übung. Brauche die Ergebnisse des Gleichungssystems um diese dann mit der Formel umzurechnen, um dann das Formelergebnis als Startwert für die neue Schleife zu verwenden.

> Frage: Gibt es bei Mathcad 2000 den Befehl spur oder trace, er ist mir sehr hilfreich gewesen.

Das Probiere ich gleich mal aus.




Bezug
                                        
Bezug
Programmierung DiffGl.Sys: Antwort
Status: (Antwort) fertig Status 
Datum: 22:26 Mi 02.06.2010
Autor: ullim

Hi,

man kann das abspeichern der Werte auch so organisieren [a]sieh mal hier.

Damit hast Du den Zugriff auf die Werte von mund s pro Schleife über j. Hilft das weiter?



Dateianhänge:
Anhang Nr. 1 (Typ: rtf) [nicht öffentlich]
Bezug
                                        
Bezug
Programmierung DiffGl.Sys: Antwort
Status: (Antwort) fertig Status 
Datum: 22:43 Do 03.06.2010
Autor: ullim

Hi,

hier nochmal eine Variante mit "while". Schau mal [a]hier



Dateianhänge:
Anhang Nr. 1 (Typ: rtf) [nicht öffentlich]
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "MathCad"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]