Numerička obrada i simulacije (7. deo)

Autor: Stefan Nožinić

Kako se opisuju fizički sistemi

Svaki fizički sistem ima neki model koji ga opisuje ili aproksimira. Najjednostavniji primer je padanje loptice na pod. Mi znamo da na lopticu deluje gravitaciona sila i na osnovu toga primenjujemo drugi Njutnov zakon. Za datu lopticu imamo jednačinu koja nam opisuje koliko u datom trenutku iznosi ubrzanje loptice. Kako naša loptica ima isto ubrzanje u svakom trenutku – gravitaciona sila se ne menja, što znači da se njena brzina menja linearno (povećava se) a da se pređeni put može opisati kvadratnom funkcijom. Kako ovo znamo? Ubrzanje je promena brzine u jedinici vremena (izvod brzine), a brzina je promena pređenog puta u jedinici vremena, odnosno ubrzanje je drugi izvod pređenog puta. Kako naš model iskazuje koliko je ubrzanje loptice, mi moramo da to ubrzanje integralimo dva puta kako bismo dobili pređeni put. Jednačina koja opisuje kretanje loptice je diferencijalna jednačina.

Zapravo, svaki fizički sistem se može opisati kao diferencijalna jednačina.

Diferencijalne jednačine prvog reda

Ovaj tip je osnovni tip diferencijalne jednačine. Za datu funkciju x (koja može biti pozicija ili nešto drugo) diferencijalna jednačina je:

Sa leve strane nam se nalazi promena funkcije u zavisnosti od promene vremena, a sa desne strane nam se nalazi vrednost te promene.

Ojlerov metod za rešavanje diferencijalne jednačine prvog reda

Najjednostavniji način da rešimo gore opisani tip jednačine je sledeći:

Ako imamo vrednost naše funkcije u nekom trenutku i ona iznosi , mi želimo da odredimo narednu vrednost funkcije. Kako su računari diskretne mašine i ne možemo previše ići u detalje – ne možemo odrediti vrednost funkcije baš u svakom trenutku. Ono šta možemo uraditi jeste da izračunamo u približnom trenutku posle vremena odnosno da odredimo .

Ovo možemo uraditi baš zahvaljujući postavci naše jednačine jer je:

Kada ovo sredimo, imamo Ojlerov korak za naredni vremenski korak:

Diferencijalne jednačine drugog reda

Ovo su složenije jednačine, ali se vrlo lako prebacuju na jednačine prvog reda. One su oblika: odnosno, može se i lakše zapisati kao Ako bi nam bio pređeni put onda je brzina, a nam je ubrzanje.

Kako ovo rešavamo? Uvedemo smenu i onda imamo sledeću situaciju:

i

Prvo rešimo prvu jednačinu pomoću Ojlerovog metoda, a onda novu vrednost za brzinu ubacimo u drugu:

Primer – kosi hitac

Evo i primera kako bismo uradili simulaciju bacanja loptice ukoso.
import numpy as np
import matplotlib.pyplot as plt

# Prvo zadajemo pocetne vrednosti, imamo dve koordinate, radimo sa dve pozicije i dve brzine
# jedna za a druga za y koordinatu loptice

x = 0.0
y = 0.0

v_x = 10
v_y = 10

dt = 0.01 # vremenski pomeraj

def f_y(t, x, v):
return -9.81 # ubrzanje po y-osi na dole

def f_x(t, x, v):
return 0 # ubrzanje po x-osi

p_x = [x] # ovde čuvamo x vrednosti da plotujemo
p_y = [y] # ovde cuvamo y vrednosti da plotujemo

# uradimo nekoliko iteracija i dodajemo nove vrednosti u niz za plotovanje
for i in range(200):
t = i * dt
v_x = v_x + dt * f_x(t,x,v_x)
x = x + dt*v_x

v_y = v_y + dt * f_y(t,y,v_y)
y = y + dt * v_y
print(x)
print(y)
print()
p_x.append(x)
p_y.append(y)

plt.plot(p_x, p_y, "o")
plt.show()

numerics_7-1Potrebno je primetiti da ovde imamo dve pozicije, dve koordinate pošto radimo u dvodimenzionalnom sistemu. Kod možemo i kraće napisati ako definišemo poziciju i brzinu kao vektore.
import numpy as np
import matplotlib.pyplot as plt

# Prvo zadajemo pocetne vrednosti, imamo dve koordinate, radimo sa dve pozicije i dve brzine
# jedna za a druga za y koordinatu loptice

x = np.array([0,0])

v = np.array([10, 10])

dt = 0.01 # vremenski pomeraj

def f(t, x, v):
return np.array([0, -9.81]) # ubrzanje

p_x = [x[0]]
p_y = [x[1]]

# uradimo nekoliko iteracija i dodajemo nove vrednosti u niz za plotovanje
for i in range(200):
t = i * dt
v = v + dt * f(t,x,v)
x = x + dt * v

p_x.append(x[0])
p_y.append(x[1])

plt.plot(p_x, p_y, "o")
plt.show()

Dodatni metodi za numeričko rešavanje diferencijalnih jednačina

Često Ojlerov metod nije dovoljno stabilan ili tačan. Zbog ovoga postoje i druge metode kao što su Runga-Kuta i implicitni metodi. Predlažemo vam da pronađete na internetu kako se oni koriste kako ne biste dolazili do problema da vam Ojler ne rešava problem dovoljno stabilno ili tačno.

 

Ostavite odgovor

Vaša adresa e-pošte neće biti objavljena. Neophodna polja su označena *

Time limit is exhausted. Please reload CAPTCHA.