cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - Visit the PTCooler (the community lounge) to get to know your fellow community members and check out some of Dale's Friday Humor posts! X

Programmierungsproblem einer doppelten Schleife

pallgeier
1-Visitor

Programmierungsproblem einer doppelten Schleife

Hallo liebe Community,

ich versuche mich an  der Programmierung eines Tools für meine Masterarbeit.

Dabei ist die grobe Idee, einen Pfahl im Boden durch  dynamische Bodenschwingung anzuregen. Der Boden wird über eine gedämpfte harmonische Funktion in  Schwingung versetzt, es ergibt sich als Eingangsgröße ein Matrix(i-Knoten des Pfahls in der Tiefe, j-Zeitschritte).

Diese ist wiederum mit der Differentialgleichung des Balkens verknüpft.

Mein Ansatz ist eine differentielle Form.

Leider bin ich etwas überfordert mit der Syntax, da ich Mathcadfrischling bin.

Mein Hauptprogramm(Unterpunkt 6) schreibt mir immer wieder Fehler im Bereich der Zuweisung heraus, vll kann mich ja jemand mal unterstützen.

Gruß Peter

10 REPLIES 10
Werner_E
25-Diamond I
(To:pallgeier)

Das Problem liegt ganz am Beginn im ersten zugeklappten Bereich bei der Definition von z.

Du multiplizierst dazu die ersten 21 Werte der ersten Spalte mit L (der Zahl 10). Die erste Spalte enthält aber am Anfang auch Texte wie "z" oder ""[m]" und Texte können nicht mit Zahlen multipliziert werden. Darüber beschwert sich Mathcad mit der Fehlermeldung, dass diese Zahl ein Skalar oder eine Marix sein muss und z bleibt somit undefiniert.

Damit versagen natürlich auch alle späteren Berechnungen, die z verwenden.

P.S.: Du erreichst eine größere Anzahl an möglichen Helfern, wenn du deine Fragen hier in englischer Sprache stellst.

Danke für den Hinweis zwecks englischer Sprache.

Die Tabelle (Excel ist eingebunden, und hier habe ich auch nur den Teil der Zahlen ausgewählt, bei mir ist dies als korrekt definiert.

Daran kann es also nicht liegen.

Ich denke eher, das es in der Definition des Programms von Kapitel 6 irgendwo liegt, den erst  dort werden ja auch die Fehler angezeigt.

Gruß Peter

Werner_E
25-Diamond I
(To:pallgeier)

Peter Allgeier wrote:

Danke für den Hinweis zwecks englischer Sprache.

Die Tabelle (Excel ist eingebunden, und hier habe ich auch nur den Teil der Zahlen ausgewählt, bei mir ist dies als korrekt definiert.

Daran kann es also nicht liegen.

Ich denke eher, das es in der Definition des Programms von Kapitel 6 irgendwo liegt, den erst  dort werden ja auch die Fehler angezeigt.

Gruß Peter

Ja, aber durch den eingestellten Pfad war die Tabelle bei mir nicht sichtbar und als ich sie (und bei F.M. war das vermutlich ähnlich) dann mit dem bei mir korrekten Pfad eingebunden hatte, waren offenbar die Informationen, welcher Bereich eingebunden weren soll, nicht mehr aktiv und so wurde die ganze Tabelle eingebunden.

ich habe in meiner Antwort weiter unten dann die tabelle entsprechend getrimmt und bin damit wohl letztlich von der gleichen Tabelle ausgegangen wie du.

Für die paar Werte ist die Excel Tabelle aber ohnedies nicht wirklich nötig. Die z-Werte lassen sich leicht automatisch erzeugen und die anderen Spaltenwerte sind ja ohnedies konstant.

Zum Iterationsprogramm hab ich da weiter unten noch ein paar Anmerkungen gemacht - da scheint es nicht nur an der Mathcad Sysntax zu scheitern.

Gruß

Werner

Hallo Werner,

Ich habe zu nachfolgendem Syntax eine Frage an dich.

Die Zeit t habe ich als Bereich definiert, für die Darstellung ist dies kein Problem.

Ich möchte jetzt aber ein c(t) als Vektor bestimmen.

Da schreibt er mir diese Fehlermeldung raus:

Bei dieser Berechnung ist keine Konvergenz gegen eine Lösung möglich.

Vll kannst du mir da ja weiter helfen.

Gruß Peter

Problem_Syntax.PNG

Werner_E
25-Diamond I
(To:pallgeier)

Ja, die Unterscheidung zwischen Bereichsvariabler und Vektor ist eine knifflige, aber wichtige Sache bei der Arbeit mit Mathcad. Stuart hat da vor längerer Zeit eine gute Abhandlung darüber geschrieben (die für Prime nach wie vor Gültigkeit hat) - ich häng sie mal hier dran.

Ich würde an deiner Stelle t in einen Vektor umwandeln. Am einfachsten geht das pfuschig mit einem undokumentierten Trick, indem du zB tcev:=t= schreibst. Die letzte inline evaluation mit = bringt den gewünschten Effekt.

Danach kannst du dann c(tvec) auswerten, sicherheitshalber würde ich den Funktionsaufruf noch vektorisieren.

Hallo Werner,

leider schreibt er mir mit dem pfuschigen Trick einen Fehler heraus.

Nicht genügend Arbeitsspeicher für diese Operation!

Was meinst du mit dem vektorisieren des Funktionsaufrufs?

Kannst du mir zudem noch die Abhandlung von Stuart anhängen, habe sie das letzte Mal nicht gefunden?

Gruß Peter

Werner_E
25-Diamond I
(To:pallgeier)

> leider schreibt er mir mit dem pfuschigen Trick einen Fehler heraus.

kann ich, ohne es zu sehen, nicht beurteilen. Vl ist dein delta t soo klein, dass der Vektor tatsächlich zu groß werden würde??

Vektorisieren ist die Funktion auf der Matrix-Palette f(M) mit dem Pfeil drüber. Da wird dann die Funktion für jedes Element des Argumentvektors aufgerufen und die Ergebnisse wieder in einem Vektor gesammelt. Hier ein einfaches Besipiel:

Sind Operationen (wie zum Beispiel das Quadrieren) grundsätzlich gar nicht für Vektorelemente definiert, so wendet Mathcad automatisch Vektorisierung an:

> Kannst du mir zudem noch die Abhandlung von Stuart anhängen, habe sie das letzte Mal nicht gefunden?

?? Also ich seh sie nach wie vor an meinem seinerzeitigen Post dran hängen:

Stellt sich das für dich anders dar?

-MFra-
21-Topaz II
(To:pallgeier)

Hi Peter, (Wir waren alle auf einmal Anfänger.)

Ich habe versucht, die Einheiten zu verwenden. Aber ich finde Schwierigkeiten mit der Messeinheit von C, C1, C2, C3, C4. Du sollst ein wenig alles überprüfen. Siehe das Arbeitsblatt angebracht.

EQWEAP.jpg

Werner_E
25-Diamond I
(To:pallgeier)

Ich denke, dass der wahre Datenbereich jener von Reihe 4 bis Reihe 24 (in Excel 5 bis 25) ist und so habe ich die Tabelle entsprechend getrimmt. Die einzigen Wert, die sich ändern, sind ja jene in der z-Spalte, alle anderern bleiben offenbar konstant.

Ich habe auch vermutet, dass es sich bei A nicht um einen Vektor von Werten, sondern um einen Skalar handeln soll und das entsprechend berücksichtigt.

Schau dir die beigefügte Datei an, ob sie dir weiter hilft.

Was diese letzte Funktion E anlangt, so ist dort einiges schief gelaufen. Siehe dazu meine Anmerkungen in der Datei.

Es soll sich da wohl um eine iterative Lösung der Differenzengleichung handeln, d,h, dein u_p soll gar keine Funktion sein, als die du es schreibst, sondern ein Feld, eine Matrix. Allerdings haut das mit den Iterationsschritten nicht hin, da du immer wieder auf Feldelemente zugreifst, die es gar nicht gibt. Das Bedarf wohl einer gründlicheren theoretischen Überarbeitung, danach können wir uns um die Syntax kümmern. Letztlich wird es auf eine Syntax der Form

hinauslaufen. Nur dass eben genau diese Zeile nicht funktionieren kann, das es, wenn j=0 ist, den Index j-1 nicht gibt und wenn i=n-1 oder n wird, dann gibts wohl auch den ersten Index i+2 nicht (es sei denn, man macht das Feld um zwei Zeilen höher als n).

Und falls es dich interessiert, warum Mathcad di in der derzeitigen Fassung einen Fehler liefert: du hast eine lokale Zuweisung, in der u_p links wie ein Skalar behandelt wird (u_p <--) und rechts aber wie eine Funktion (u_p(...)). Das kann natürlich nicht funktiionieren und Mathcad beklagt sich auf der rechten Seite, dass u_p keine Funktion sei, aber als Funktionsaufruf geschrieben wird.

Vielen Dank euch für die wertvollen Tipps, bin erst jetzt nach den Weihnachtsferien dazu gekommen.

Ich habe meine Syntax dementsprechend angepasst und nun läuft mein einfaches Dummy-Programm.

Werde diese die kommenden Wochen nun um einige Parameter und Inputdaten ergänzen.

Und gegebenenfalls nochmals euren

Gruß Peter

Announcements

Top Tags