Programozási feladat

Adott egy fémlemez, amelyet minden oldaláról hűtünk 0 ℃, és az egyik oldal közepét melegítjük 100 ℃-ra. Mondjuk meg, hogy egy adott idő elteltével mekkora a fémlemez pontjainak hőmérséklete, ha a 0 időpillanatban a teljes fémlemez 0 ℃ hőmérsékletű!

A feladat megoldásához a következő parciális differenciálegyenletet kell megoldanunk:

A megoldást véges differencia módszerrel lehet előállítani. Ehhez a folytonos tér és időkoordináták helyett diszkrét pontokat vezetünk be, térben az egyszerűség kedvéért Δx oldalhosszú négyzetet, időben Δt időtartamot. Ekkor az egyenlet a következő képlettel oldható meg legegyszerűbben:

A képletben n az időpont, i és j a sík egy pontjának koordinátái, r pedig legyen 0.2.

Legyen egy 1024x1024-es mátrixunk, ami kezdetben csupa 0. A mátrix minden oldalára fel kell venni egy-egy sort illetve oszlopot, amelyek a peremfeltételeket tartalmazzák. Ezek legyenek 0-k, kivéve a (0, 512) pont legyen 100, ahol a 0 a peremfeltételt tartalmazó extra oszlop (tehát az eredeti mátrix 1-től 1024-ig van indexelve). Számítsuk ki az 512. iterációt. Írd ki az 500,500 indexű pontot.

Adj olyan párhuzamos megoldást, hogy a mátrixot gondolatban felbontod részekre, és az egyes részeket párhuzamosan számolod minden iterációban.

Jegyezzük meg, hogy a mátrixból nem kell minden iterációt megőrizni, csak az aktuálisat és a megelőzőt.