file:   anal3_4het.m
author: Polcz Péter <ppolcz@gmail.com>
Created on 2016.09.30. Friday, 12:57:39

Contents

Brachistocrone - Euler Lagrange equations [TANULSAGOS]

Megj. Ctrl+Enterrel csak az adott %%-%% kozotti cellat futtatod

fprintf([...
    '\n\nBrachistocrone - Euler Lagrange equations\n'...
    'Igy lehet kiszamitani az Euler Lagrange egyenleteket (ha esetleg'...
    'nincs kedve kezzel kiszamitani az embernek)\n\n'])

% szimbolikus y(x) fuggveny deklaralasa
syms y(x)

% gravitacios gyorsulas
syms g positive

% Igy is lehetne bejelenteni, hogy g pozitiv szam
% assume(g,'positive')

disp 'F(x,y(x),y'(x)) = '
F = sqrt((1+diff(y)^2)/(2*g*y));
pretty(F)

disp([...
    'Kiszamitjuk az F-hez tartozo Euler-Lagrange egyenletek: '...
    '[Ez meg nagyon csunya lesz]'])
ELeq = functionalDerivative(F,y) == 0;
pretty(ELeq) % ez meg nagyon csunya lesz

disp 'E-L egyenletek egyszerusitett alakja (simplify fuggvennyel)'
ELeq = simplify(ELeq);
pretty(ELeq)

Brachistocrone - Euler Lagrange equations
Igy lehet kiszamitani az Euler Lagrange egyenleteket (ha esetlegnincs kedve kezzel kiszamitani az embernek)

F(x,y(x),y(x)) = 
    / /  d      \2     \
    | | -- y(x) |  + 1 |
    | \ dx      /      |
sqrt| ---------------- |
    \      2 y(x)      /
------------------------
         sqrt(g)

Kiszamitjuk az F-hez tartozo Euler-Lagrange egyenletek: [Ez meg nagyon csunya lesz]
                               2
       /  d      \2           d
       | -- y(x) |  + 2 y(x) --- y(x) + 1
       \ dx      /             2
                             dx
- -------------------------------------------- == 0
                  /          /  d      \2 \3/2
                  |          | -- y(x) |  |
                3 |    1     \ dx      /  |
  8 sqrt(g) y(x)  | ------ + ------------ |
                  \ 2 y(x)      2 y(x)    /

E-L egyenletek egyszerusitett alakja (simplify fuggvennyel)
                        2
/  d      \2           d
| -- y(x) |  + 2 y(x) --- y(x) == -1
\ dx      /             2
                      dx

Brachistochrone - szelsoertekfeltetelek numerikus kiszamitasa [TANULSAGOS]

EGYSZERU ESET: ha a v0 kezdeti sebesseg 0

Az integral kiszamitasat ez a script NEM tartalmazza, csak a mar altalanos alakban adott megoldas ismeretlen egyutthatoit szamolom ki. A problema reszletes levezetese megtalalhato a lenti scannelt jegyzetben. http://193.225.109.33/~polpe/files/targyak/anal3/Brachistochrone_variacioszamitas_levezetes.pdf

figure, hold on, axis equal tight

% kezdeti feltetelek
x0 = 0;
y0 = 1;
x1 = 5;
y1 = 0;

% a mar kezzel kiszamolt egyutthatok
theta1 = 0;

% kb minden egyutthatot ki tudtunk szamolni kezzel (lasd kidolgozott
% jegyzet), csak a theta2 parameter hianyzik
obj = @(theta2) theta2 - sin(theta2) - x1 / (y0 - y1) * (1 - cos(theta2));

theta2 = fsolve(obj, pi);
k = 2*x1 / (theta2 - sin(theta2));

theta = linspace(theta1,theta2,100);
x = k/2 * (theta - sin(theta));
y = y0 - k/2 * (1 - cos(theta));

plot([x0 x1], [y0 y1])
plot(x,y, 'r', x(end), y(end), 'ro')
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.



Brachistochrone - szelsoertekfeltetelek numerikus kiszamitasa [TANULSAGOS]

BONYOLULTABB ESET: kulonbozo kezdeti sebessegek mellett

figure, hold on, axis equal tight

g = 10; % gravitacios gyorsulas
m = 2;  % tomegpont tomege

% kezdeti feltetelek
x0 = 0;
y0 = 1;
x1 = 5;
y1 = 0;

% ismeretlen egyutthatok
syms k b theta1 theta2

% a kezdeti sebesseget egyelore parameterkent kezelem
syms v0

% Kezdeti energia (belekalkulalva, hogy kezdeti sebessege is lehet)
E0 = m*v0^2/2 + m*g*y0;

% Objektiv fuggveny, ezt kell nullazunk, ez tartalmazza a kezdeti
% felteteleket nullara rendezve
obj_sym = [
    E0/(m*g) - k/2 * (1 - cos(theta1)) - y0 % y(theta1) - y0 = 0
    b + k/2 * (theta1 - sin(theta1)) - x0   % x(theta1) - x0 = 0
    E0/(m*g) - k/2 * (1 - cos(theta2)) - y1 % y(theta2) - y0 = 0
    b + k/2 * (theta2 - sin(theta2)) - x1   % x(theta2) - x0 = 0
    ];

obj = @(v0_var) matlabFunction(subs(obj_sym,v0,v0_var), 'vars', {[k ; b ; theta1 ; theta2]});

for v0_num = 1:2:8

    % Az fsolve-nak meg kell adni egy kezdeti pontot, ahonnan iteral,
    % egyaltalan nem biztos, hogy jo megoldast fog megtalalni, az sem
    % biztos, hogy ez a legertelmesebb kezdeti pont.
    sol = fsolve(obj(v0_num), [x1-x0 ; 0 ; 0 ; pi]);

    % Ez mar a megoldas!
    k = sol(1);
    b = sol(2);
    theta1 = sol(3);
    theta2 = sol(4);

    % Ez mar csak kirajzolas
    plot([x0 x1], [y0 y1])
    theta = linspace(theta1,theta2,100);
    x = b + k/2 * (theta - sin(theta));
    y = subs(E0,v0,v0_num)/(m*g) - k/2 * (1 - cos(theta));
    plot(x,y, 'r', x(end), y(end), 'ro')

end

title 'Brachistochrone - különböző kezdeti sebességek mellett'
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.




Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.




Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.




Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.



Euler Lagrange egyenletek kiszamitasa alapmuveletekkel [TUL VAN BONYOLITVA]

Ez nagyon el van bonyolitva, felejtsuk el!!

y0_num = 1;
C_num = 1;

L = @(F) diff(F,y)

syms x u v q0 C real
y = sym('y(x)', 'real');
dq = diff(y);

F = sqrt(1 + v^2) / sqrt(u - q0);

F_q = subs(F, [u,v], [y,dq]);
pretty(F_q)

disp 'EULER EGYENLET: '
Euler_eq_q = simplify( subs(diff(F,u), [u,v], [y,dq]) - diff( subs(diff(F,v), [u,v], [y,dq]) ) );
pretty(Euler_eq_q)

disp 'ALTERNATIVE: '
Euler_alt_q = simplify( F_q - dq * subs(diff(F,v), [u,v], [y,dq]) );
pretty(Euler_alt_q)

Euler_alt = subs(Euler_alt_q, [y,dq], [u,v]);

assume([q0 >= u , in(q0, 'real'), in(u, 'real')])
sol = solve(Euler_alt-1/C, v);

% Nincs implicit megoldasa
% dsolve(Euler_alt == C)
L = 

    @(F)diff(F,y)

    / /  d      \2     \
sqrt| | -- y(x) |  + 1 |
    \ \ dx      /      /
------------------------
     sqrt(y(x) - q0)

EULER EGYENLET: 
                        2                 2
  /  d      \2         d                 d
  | -- y(x) |  - 2 q0 --- y(x) + 2 y(x) --- y(x) + 1
  \ dx      /           2                 2
                      dx                dx
- --------------------------------------------------
                    3/2 / /  d      \2     \3/2
       2 (y(x) - q0)    | | -- y(x) |  + 1 |
                        \ \ dx      /      /

ALTERNATIVE: 
                    1
----------------------------------------
                    / /  d      \2     \
sqrt(y(x) - q0) sqrt| | -- y(x) |  + 1 |
                    \ \ dx      /      /

Warning: The solutions are valid under the following conditions: (q0
- u)*(q0 - u + C^2) <= 0; (q0 - u)*(q0 - u + C^2) <= 0. To include
parameters and conditions in the solution, specify the
'ReturnConditions' option.