R. różniczkowe nieliniowe, niehomogeniczne, pierwszego rzędu

Równania różniczkowe i całkowe. Równania różnicowe. Transformata Laplace'a i Fouriera oraz ich zastosowanie w równaniach różniczkowych.
KaerbEmEvig
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 11 mar 2010, o 22:19
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz

R. różniczkowe nieliniowe, niehomogeniczne, pierwszego rzędu

Post autor: KaerbEmEvig »

Chciałbym się dowiedzieć, gdzie szukać metody, która pozwoli mi rozwiązać poniższe równanie różniczkowe, jeżeli takie rozwiązanie istnieje.

\(\displaystyle{ \begin{cases} \frac{1}{ a_{n+1} } \frac{dc_{n+1}\left(t\right) }{dt} = k_{n} \left[c_{n}\left(t\right) \right]^{ a_{n} }-k_{n+1} \left[c_{n+1}\left(t\right) \right]^{ a_{n+1} } \\ c_{1}\left(t\right)= c^{0} _{1} e^{-k _{1}t } \\ c_{n}\left(t=0\right)=c^{0} _{n} \\ a_{1}=1 \\ c^{0} _{1} \in \mathbb{R} > 0 \\ c^{0} _{n} \in \mathbb{R} \ge 0 \\ c_{n}\left(t\right) \in \mathbb{R} \ge 0 \\ a_{n} \in \mathbb{R} \ge 0 \\ k_{n} \in \mathbb{R} \ge 0 \\ n \in \mathbb{N} _{+} \\ t \in \mathbb{R} \ge 0 \end{cases}}\)

Znam rozwiązanie dla wersji liniowej (\(\displaystyle{ a_{n} =1}\)).

-- 28 maja 2013, o 13:41 --

Errata i rozwiązanie:

\(\displaystyle{ \begin{cases} \frac{1}{ a_{n+1} } \frac{dc_{n+1}\left(t\right) }{dt} = k_{n} \left[c_{n}\left(t\right) \right]^{ a_{n} }-k_{n+1} \left[c_{n+1}\left(t\right) \right]^{ a_{n+1} } \\ c_{1}\left(t\right)= \lim_{ b\to a _{1} }\left[ \left( c ^{0} _{1}\right) ^{1-b} - \left( 1-b\right)bk _{1} t \right] ^{ \frac{1}{1-b} } \\ c_{n}\left(t=0\right)=c^{0} _{n} \\ a_{1}=1 \\ c^{0} _{1} \in \mathbb{R} > 0 \\ c^{0} _{n} \in \mathbb{R} \ge 0 \\ c_{n}\left(t\right) \in \mathbb{R} \ge 0 \\ a_{n} \in \mathbb{R} \ge 0 \\ k_{n} \in \mathbb{R} \ge 0 \\ n \in \mathbb{N} _{+} \\ t \in \mathbb{R} \ge 0 \end{cases}}\)

Kod: Zaznacz cały

#import
import matplotlib.pyplot as plt
import numpy as np

#params
t_list = [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
t_start = 0
t_end = 25.0
t_diff = 0.0001

n = 10
p = []

k_list = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0]
a_list = [1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0]
c_0_list = [1.0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
c_list = []

for m in range(n):
	c_list.append([c_0_list[m]])

legendEntries = []
legendText = []

#body
for m in range(n):
	c = c_0_list[m]
	t = t_start
	c_list.append([])
	t_list.append([])
	step = 0
	while t < t_end:
		if m == 0:
			if a_list[m] == 1.0:
				c = c_0_list[m] * np.e**(-a_list[m]*k_list[m]*t)
				c_list[m].append(c)
				t_list[m].append(t)
				t += t_diff
			else:
				c = ((c_0_list[m])**(1 - a_list[m]) - (1 - a_list[m])*k_list[m]*a_list[m]*t)**(1/(1-a_list[m]))
				c_list[m].append(c)
				t_list[m].append(t)
				t += t_diff
		else:
			c_diff = t_diff * a_list[m] * (k_list[m-1]*(c_list[m-1][step]**a_list[m-1]) - k_list[m]*(c_list[m][step]**a_list[m]))
			c_list[m].append(c)
			t_list[m].append(t)
			t += t_diff
			c += c_diff
			step += 1

	plt.legend(loc="center right")
	p += plt.plot(t_list[m], c_list[m], label= "c_" + str(m) + "(t)")

#print

plt.show(p)
ODPOWIEDZ