.. _stap_inverzni: Jednodimenzioni inverzni problem =================================== Postavka inverznog problema je potpuno ista kao i u prethodnom poglavlju :ref:`stap`, tj. opisana je :numref:`fdheat`, jednačinom :math:numref:`eq:toplota1` i graničnim uslovima :math:numref:`eq:granicni1`. Međutim, ovoga puta nam parametar problema :math:`\alpha` na početku nije poznat i pokušaćemo da ga dobijemo uz pomoć metoda obučavanja propagacijom unazad. Naravno, čim smo uveli novu nepoznatu, moramo da uvedemo i novi granični uslov. Recimo, možemo da postavimo da je u jednoj tački u nekom vremenskom trenutku, temperatura :math:`u` odgovarala nekoj numeričkoj vrednosti koja se poklapa sa analitičkim rešenjem :math:numref:`eq:analiticko1`. Recimo, postavimo temperaturu na sredini štapa u :math:`x=0,5` u trenutku :math:`t=0,05` na: .. math:: u(x=0,5, t=0,05) = 0,8623931, i pokušajmo da rešimo problem postavljajući granične uslove na sledeći način: .. code-block:: python :caption: Pronalaženje nepoznatog parametra :math:`\alpha` :linenos: x = sn.Variable('x') t = sn.Variable('t') u = sn.Functional('u', [x,t], 3*[20], 'tanh') alpha = sn.Parameter(0.5, inputs=[x,t], name="alpha") L1 = diff(u, t) - alpha * diff(u, x, order=2) TOL = 0.011 TOLT= 0.0011 C1 = (1-sign(t - TOLT)) * (u - sin(pi*x)) C2 = (1-sign(x - (0+TOL))) * (u) C3 = (1+sign(x - (1-TOL))) * (u) C4 = (1 + sign(t-0.049)) * (1 - sign(t-0.051)) * (1 + sign(x-0.49)) * (1 - sign(x-0.51)) * (u-0.8623931) m = sn.SciModel([x, t], [L1, C1, C2, C3, C4], 'mse', 'Adam') x_data, t_data = np.meshgrid( np.linspace(0, 1, 101), np.linspace(0, 0.1, 101) ) h = m.train([x_data, t_data], 5*['zero'], learning_rate=0.002, batch_size=512, epochs=1200, adaptive_weights={'method':'NTK', 'freq':100}) # Test nx, nt = 20, 10 x_test, t_test = np.meshgrid( np.linspace(0.01, 0.99, nx+1), np.linspace(0.01, 0.1, nt+1) ) u_pred = u.eval(m, [x_test, t_test]) print(alpha.value) Očigledno je da je kod gotovo isti kao prethodni u kome se rešava direktni problem, jer je i metodologija za rešavanje direktnih i inverznih problema kod NMPFZ identična. Jedina razlika je u postavci. Linija 4 postavlja :math:`\alpha` kao nepoznati parametar i daje mu početnu vrednost. U liniji 13 se postavlja dodatni granični uslov u tački ``u(x=0.4,t=0.05)``, koji će postati još jedna komponenta kompozitne funkcije gubitka koja se formira u liniji 15. Vrednost nepoznatog parametra se štampa u poslednjoj liniji i u našem testu iznosi oko 0,308, što je dovoljno blisko realnoj vrednosti od 0,3. Potvrda zadovoljavajućeg rešenja inverznog problema prikazana je i grafički na :numref:`heat-inv1`. .. _heat-inv1: .. figure:: heat-inv.png :width: 80% Polje temperature duž štapa u trenutku :math:`t=0,1` dobijeno rešavanjem inverznog problema