» »

valavanje sferaste membrane -- > simulacija

valavanje sferaste membrane -- > simulacija

pro549 ::

Pozdravljeni,
mogoče bi mi vi lahko pomagali. Namreč sem se lotil simulirat valovanje na sferični membrani. Seveda prvo sem se lotil simulirati ravne membrane, kjer tudi deluje super s formulo:

U(i,j,k)=r*(U(i-1,j,k-1)+U(i+1,j,k-1)+U(i,j-1,k-1)+U(i,j+1,k-1))-U(i,j,k-2)+(2-4*r)*U(i,j,k-1);

pri čemer je i in j je točka na membrani, k pa je naslednjo stanje, r je hitrost širjenje valovanja, pa mora biti manjše kot 0.5.

recimo kos programa je tako če bo hotel kdo od vas programirat:

for k=3:M
U(end/2-2:end/2+2,2,2)=0.1*sin(2*pi*k/30);
for i=1:m
for j=1:n
if (D(i,j)==0)
U(i,j,3)=r*(U(i-1,j,2)+U(i+1,j,2)+U(i,j-1,2)+U(i,j+1,2))-U(i,j,1)+(2-4*r)*U(i,j,2);
end
end
end
end

OK vse lepo in prav, ampak jaz sem se lotil da bi naredil valovanje za sferično membrano (valovanje vode po sferi) pa sem prišel do take formule

U(i,j,k)=r/cos(theta(j))^2*(U(i-1,j,k-1)+U(i+1,j,k-1)+cos(theta(j))^2*(U(i,j-1,k-1)+U(i,j+1,k-1)))-U(i,j,k-2)+(2-2*r*(1/cos(theta(j))^2+1))*U(i,j,k-1);

i=phi, j=theta
delta phi = delta theta, tako da je prišla zgornja formula malo bolj poenostavljena in to pomeni da imamo 2 več i-jev kot j-jev

saj na začetku celo deluje ampak čez nekaj časa pa vse podvija (divergira). A bi znal kdo kaj pomagat, zakaj tako podivja?

Thomas ::

To je često pri fizikalnih simulacijah, da podivjajo. Stanje ki ga izračunaš, je malenkost narobe, potem se pa napaka amplificira ob vsakem izračunu.

Manši dt uporabljaš, kasneje podivja, pa več CPU rabiš.

OwcA ::

Poišči kje je napaka prevelika. Potem se pa lahko igraš s stvarmi kot je razvijanje vsega kar leze in gre v Taylorjevo vrsto (predvsem v upanju, da se kaj pokrajša in/ali izpostavi). Če tako ne gre, je, resda grda, rešitev, da strateško postaviš kak pogoj, ki vlovi očitno napačne rezultate. Pri tem si lahko pomagaš tudi s tem, da hraniš nekaj zadnjih rezultatov (ali pa kar vse in potem zaradi pridobljene hitrosti izvajanja uporabiš bolj fino delitev).
Otroška radovednost - gonilo napredka.

pro549 ::

dt -je že majhen (to je tisti r- ki vsebuje dt in hitrost valovajna istočasno),. Fora je v tem da ne amplificira linearno, saj so razmaki minimalni ampak iz enga delčka časa v drugi kr naenkrat podivja. Seveda sem poskrbel da na severu in jugu je ta membrana pripeta, tako da ne bi bilo nevarnostiza singularnost (1/cos(theta), theta je na severu pi/2 in na jugu -pi/2). saj če komu zanima mu pošljem celo kodo, ki je napisana v matlabu in bi se vi malo igrali. Celotno izpeljavo pa ne bi rad pisal pri čemer sem upošteval to formulo (d^2*u)/dt^2-c^2*(d^2*u/dx^2+....)=0.
Za (d^2*u)/dt^2 po teylorju (u(x,y,t-dt)-2u(x,y,t)+u(x,y,t+dt))/(deltat^2) ali pa (u(x,y,t-2*dt)-2u(x,y,t-dt)+u(x,y,t))/(deltat^2) kjer ssem iz tega izpeljal u(x,y,t) kjer sem imel pol shranjeno dva stanje pred tem.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Izdelava algoritma

Oddelek: Znanost in tehnologija
61469 (849) Klemen86
»

HP g62 in tipkovnica

Oddelek: Pomoč in nasveti
6668 (613) OmegaM
»

Python iskanje podvojenih vrednosti

Oddelek: Programiranje
181409 (1122) BlueRunner
»

Računanje vrednosti iz tabele

Oddelek: Programska oprema
101515 (1381) KoMit
»

[Turbo Pascal] Pomoč...

Oddelek: Programiranje
131390 (1292) Grey

Več podobnih tem