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

5-Punkte-Formel Diskretisierung

 

DerStudent
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2014, 23:07     Titel: 5-Punkte-Formel Diskretisierung
  Antworten mit Zitat      
Hallo,
ich arbeite derzeit an einem Gruppenprojekt und habe die Aufgabe die Diskretisierung der 5 Punkte-Formel zu bestimmen. Da die Zeit läuft und ich nicht weiß, ob ich mit der Zeit und meinem mangelnden Wissen derzeit auskomme, suche ich parallel gerade im Auftragsforum nach Hilfe. Es sieht leider nicht so aus, als seie da viel los, kann mir wer sonst alternative Seiten im Internet nennen, wo ich professionelle Hilfe mit Matlab-Aufgaben gegen Entgeld finden kann? Wäre sehr dankbar dafür.

Falls das nicht geht oder keiner eine Alternative kennt (die vielleicht schneller ist als hier im Auftragsforum zu fragen) würde ich mich auch über generelle Hilfe bei meiner Aufgabe freuen, da ich im Bereich des Programmierens ein totaler Anfänger bin.

Also meine Aufgabe ist wie zuvor angekündigt die Diskretisierung der 5-Punkte Formel zu bestimmen. Dabei ist ein quadratisches Gitter mit Schrittweite 1/N mit N=4,8,16,32,64,128 zur exakten Approximation der Lösung gegeben. Der Rand wird als bekannt vorausgesetzt und darf ignoriert werden.

Ich habe mir erst einmal Gedanken dazu gemacht wie die Matrix aussehen soll und bin darauf gekommen, dass die Hauptdiagonale aus -4en besteht und auf den Nebendiagonalen 1en stehen. Erstes Problem als Programmierneuling: Wie kann ich eine solche Matrix programmieren?

Weiter im Text: Ich weiß auch, dass man zur Bestimmung der Diskretisierung die einzelnen Gitterpunkte durchläuft und diese bestimmt, was möglich ist aufgrund der Gegebenheit des Randes. Hier bräuchte ich jedoch eine Hilfestellung wie ich da konkret rangehen soll, sowohl mathematisch als auch beim programmieren dessen.

Und auch wenn das jetzt doof klingen mag zu guter letzt eine wichtige grundlegende Frage: Wie bestimmt man eigentlich eine Diskretisierung genau? Ich glaube ich habe das bis jetzt noch nicht richtig verstanden.

Also, schon einmal ein Danke an jeden, der mir in irgendeiner Form weiterhelfen kann. Aufgrund des Zeitmangels bin ich jedem dankbar, der mich an einen Profi weiterleiten kann, aber natürlich auch jedem, der versucht mir zu helfen das Problem alleine zu lösen.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.11.2014, 22:23     Titel:
  Antworten mit Zitat      
Hallo,

zum Erstellen der Matrix:

Code:
diag(ones(N-1,1),1) + diag(ones(N-1,1),-1) - 4*diag(ones(N,1),0)


Es ist gut möglich, dass verschiedene Leute unter "der" 5-Punkte-Formel verschiedene Dinge verstehen. Insofern wäre es von Vorteil, wenn du diese Formel referenzierst oder postest - und natürlich nicht zuletzt auch, welches konkrete Problem damit gelöst werden soll.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2014, 01:07     Titel:
  Antworten mit Zitat      
Hey,
erst einmal danke für deine Antwort. Ich habe mich die Tage etwas mehr mit der Aufgabe befasst und hab inzwischen vieles jetzt erst richtig verstehen können, daher kann ich jetzt auch etwas konkreter sein.
Also ich weiß jezt, dass meine Matrix A aus drei "Blöcken" besteht. Der Block auf der Diagonalen hat -4 auf der Diagonalen und 1 auf den Nebendiagonalen. Als "Nebenblöcke" hat die Matrix dann die Einheitsmatrix.
Die Matrix A sehe demnach ungefähr so aus:
(B I 0)
(I B I)
(0 I B)

Mit B:
(-4 1 0)
(1 -4 1)
(0 1 -4)

Das wäre der Fall für N=4. h=1/N die Schrittweit, also hat das Gitter (N-1)^2 Gitterpunkte und die Matrix A ist eine (N-1)^2 x (N-1)^2 Matrix.

Soviel weiß ich inzwischen. Die Sache ist, ich weiß nicht, wie ich die Matrix A für immer größer werdene N allgemein programmieren kann (N wird bis zu 128 gehen). Dein Tipp scheint mir meine Matrix B zu ergeben, doch ich weiß nicht, wie ich daraus meine Matrix A formen kann. Bzw. wie ich damit Matrix A programmieren kann.
Die Aufgabe, die damit zu lösen ist, ist dass A*u=f lösen soll, f sind verschiedene beispielfunktion (z.B. f(x,y)=-x*e^y)), u_i sind dabei die Gitterpunkte eines quadratischen Gitters falls ich das richtig verstanden habe. Das ließe sich dann zu A\f=u umformulieren, denn u gilt es zu bestimmen. Es gilt zudem: -(Laplace-Operator)u +c*u =f innerhalb des Gitters.

Schonmal danke für weitere Hilfen und es tut mir jetzt schon leid, dass ich nicht klar formulieren oder anschaulich Matrizen etc. darstellen kann, ich weiß nur leider noch nicht, wie ich es besser machen kann.

Grüße,
DerStudent
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.11.2014, 09:36     Titel:
  Antworten mit Zitat      
Hallo,

weitere interessante Befehle sind dann
Code:


Je nach Größe der Matrix wird es empfehlenswert sein, diese dünnbesetzt abzuspeichern.

Zitat:
doch ich weiß nicht, wie ich daraus meine Matrix A formen kann. Bzw. wie ich damit Matrix A programmieren kann.

Im Zweifelsfall in der Gesamtgröße definieren und dann in einer for-Schleife alles belegen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2014, 17:25     Titel:
  Antworten mit Zitat      
Okay danke, mit den Befehlen kann ich glaub was anfangen. Ich weiß jetzt auch wie ich die Matrix konstruieren können sollte. Mit ein paar If-else If schleifen sollte das kein Problem sein.
Das führt mich aber zum nächsten Problem. Ich muss danach die Gleichung A\f=u lösen. A die Diskretisierungsmatrix und f eine bekannte Fkt. (z.b f(x,y)=-x*e^y). Wie das zu lösen wäre, wäre erst einmal nicht schwer, wobei ich nicht sicher bin, wie man A und f auf die gleiche Dimension bringen kann, damit Matlab nicht einen Error ergibt.
Weiterhin habe ich das Problem, dass der Rand des Gitters ebenfalls eine Rolle spielt (der wäre bei unserem Gitter alle Punkte bei denen x,y Element {0,1}. Also entweder x oder y muss 0 oder 1 sein.
Im Beispiel wäre f= Au also A\f=u mit A wie zuvor, f=-x*e^y auf (0,1)^2, aber g=u auf {0,1}x{0,1} mit g=x*e^y. Mir wurde erklärt ich müsse dieses g noch irgendwie hinzuaddieren zum A\f, aber ich versteh nich ganz wie.
Und ich verstehe nicht wie bei der Formel:
-(Laplace-Operator) +c*u = f auf (0,1)^2 das "+c*u" hinzuaddiert wird. Ändert sich dabei dann was bei der Matrix? Oder meinem f? Ändert das irgendwas an meiner Formel?

Und noch einmal danke für die bisherige Hilfe Smile

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2014, 02:18     Titel:
  Antworten mit Zitat      
Okay, ich hab mich jetzt nochmal eine ganze Weile mit der Aufgabe befasst... Und ich kann mein Problem auf 3 Fragen reduzieren.
Um die Aufgabe etwas konkreter zu machen:
Wir haben die Helmholtzaufgabe mit
-(Laplace-Operator)*u +c*u = f auf (0,1)^2
u = g auf dem Rand davon (also x oder y = 0 oder 1)
Meine Diskretisierungsmatrix habe ich jetzt aufgestellt und ich weiß, dass A\f = u ist.
Als Beispiel habe ich f(x,y)= 1; g(x,y)=0 und c=0
Frage 1:
Ich verstehe jedoch nicht wie ich f(x,y) in einen Vektor umformen soll um A\f=u zu lösen. Irgendwelche Vorschläge?
Frage 2: Wenn g(x,y) nicht 0 ist, müsste man es so hinzuaddieren, dass A\(f+g) = u ist, wobei eine Fallunterscheidung gemacht werden muss. Wie macht man hier die Fallunterscheidung? Ich kann den Rand, der für g von relevanz ist ja nicht mal mit Worten beschreiben, geschweige denn Programmieren.
Frage 3: Wenn c=1, was ändert das? Also wo wird diese Konstante letztenendes hinzu addiert und was ändert das an der Aufgabe?

Hoffe jemand kann mir bei diesen 3 Fragen weiterhelfen, ich blick da nich so durch Sad

Grüße,
DerStudent
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 - 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.