# Kedvenc Fizikai Kísérleteim

## Mechanika

### Hosszúság, terület, térfogat

### Mozgás

### Kísérlet

load("ezunits")$

 gyalog:5`km/hour``m/s;

%,numer;

### Kísérlet

### Kísérlet

### Kísérlet

diff(5*t^2,t);

diff(c*t,t);

diff(%e^t,t);

diff(c*f(t),t);

diff(f(t)+g(t),t);

### Differenciálás

y(t):=c*x(t);

depend

diff(y(t),t);

remfunction(y);

z(t):=x(t)+y(t);

diff(z(t),t);

remfunction(z);

z(t):=x(t)*y(t);

diff(z(t),t);

remfunction(x,y,z);

depends(y,x,x,t);

diff(y,t);

diff(log(x),x);

diff(a^t,t);

diff(t^a,t);

diff(1/x(t),t);

diff(%e^(i*t),t);

diff(cos(t),t);

diff(sin(t),t);

### Kísérlet

### Integrálás

integrate(sin(x)^2,x);

integrate(log(x),x,1,2);

### Kísérlet

Megpróbáljuk megoldani a differenciálegyenletet

kill(all);

equ:'diff(v,t)=g-c*v^2;

ode2(equ,v,t);

assume(c*g>0);

ode2(equ,v,t);

Úgy látszik, ez a megoldás.  Meg kell határoznunk ez ismeretlen %c konstanst. Tudjuk, hogy ha t nulla, akkor v is nulla.

subst(0,t,%);

subst(0,v,%);

A konstans komplex, nem értjük a megoldást.

### Differenciálegyenletek megoldása

Az előző egyenlet szeparábilis.

kill(all);

assume(c*g>0);

integrate(1/(g-c*v^2),v);

subst(0,v,%);

Ugyanazt kapjuk, amit az előbb.  Ez a megoldás v=0-ra nincs értelmezve.  A program egy olyan megoldást talált meg, ami nagy v-re van értelmezve.  Aki tud integrálni, találkozott már vele, hogy a log-ban abszolút érték áll.  

logabs:true;

integrate(1/(g-c*v^2),v);

Megváltoztatjuk az előjelet.

sol:-log((sqrt(c*g)-c*v)/(sqrt(c*g)+c*v))
/2/sqrt(c*g)=t+%c;

subst(0,t,sol);

subst(0,v,%);

subst(0,%c,sol);

solve(%,v);

subst(0.004,c,%[1]);

subst(10,g,%);

vt:rhs(%);

vt:float(%), numer;

plot2d(vt,[t,0,15])$

### Differenciálegyenletek
numerikus megoldása

Mindent úgy írunk meg, hogy egyenletrendszerre is működjön.  Ezért v sormátrix.

v:matrix([0]);

g:10;

c:0.004;

Ez a függvény.  Kipróbáljuk.

f(t,v):=block([u],u:copymatrix(v),u[1]:g-c*v[1]^2,u);

v:f(0,v);

Az Euler-módszer egy lépése. A lépésköz h. A függvény is paraméter, így tetszőleges egyenletrendszerre működik. Ki is próbáljuk.

odeeuler(t,h,x,f):=x+h*f(t,x);

v:matrix([0]);

v:odeeuler(0,1,v,f);

v:odeeuler(1,1,v,f);

v:odeeuler(2,1,v,f);

v:odeeuler(3,1,v,f);

v:odeeuler(4,1,v,f);

 -->	odeeuler(t,h,x,f):=x+h*f(t,x);
(%o16)	odeeuler(t,h,x,f):=x+h*f(t,x)

v:odeeuler(5,1,v,f);

v:odeeuler(6,1,v,f);

v:odeeuler(7,1,v,f);

v:odeeuler(8,1,v,f);

v:odeeuler(9,1,v,f);

 -->	odeeuler(t,h,x,f):=x+h*f(t,x);
(%o16)	odeeuler(t,h,x,f):=x+h*f(t,x)

Megírjuk a Heun módszert és a trapézmódszert is. Mindig három iterációt végzünk az egyszerűség kedvéért.

odeheun(t,h,x,f):=block([k,kk],k:f(t,x),
  kk:f(t+h,x+h*k),x+h/2*(k+kk));

odetrapez(t,h,x,f):=block([xx,k,kk,d,dd],k:f(t,x),
  kk:f(t+h,x+h*k),xx:x+h/2*(k+kk),
  k(%i12)   v:matrixmap(ddt,r);
(v) [0,0,0]k:f(t+h,xx),xx:x+h/2*(k+kk),
  kk:f(t+h,xx),xx:x+h/2*(k+kk),
  kk:f(t+h,xx),xx:x+h/2*(k+kk),return(xx));

Fárasztó lenne minden lépést kírni. A keretprogram n lépést tesz. Paraméterként kapja az eljárást.

od(%i12)    v:matrixmap(ddt,r);
(v) [0,0,0]eiter(t,h,n,x,f,proc):=block([i,xx],m:copymatrix(x),xx:copymatrix(x),
  for i:1 thru n do (xx:proc(t,h,xx,f),m:addrow(m,xx)),return(m));

Számolások az Euler-módszerrel.

 -->	odeeuler(t,h,x,f):=x+h*f(t,x);
(%o16)	odeeuler(t,h,x,f):=x+h*f(t,x)

odeiter(0,1,10,matrix([0]),f,odeeuler);

 -->	odeeuler(t,h,x,f):=x+h*f(t,x);
((%i12) v:matrixmap(ddt,r);
(v) [0,0,0]%o16)	odeeuler(t,h,x,f):=x+h*f(t,x)

odeiter(0,1/2,20,matrix([0]),f,odeeuler);

odeiter(0,1/4,40,matrix([0]),f,odeeuler);

odeiter(0,1/8,80,matrix([0]),f,odeeuler);

Számolások a Heun-módszerrel.

odeiter(0,1,10,matrix([0]),f,odeheun);

odeiter(0,1/2,20,matrix([0]),f,odeheun);

Számolások a trapéz módszerrel.

odeiter(0,1,10,matrix([0]),f,odetrapez);

odeiter(0,1/2,20,matrix([0]),f,odetrapez);

odeiter(0,1/2,40,matrix([0]),f,odetrapez);

### Kísérlet

r(t):=matrix([cos(t),sin(t),0.25*t]);

plot3d([cos(t), sin(t), 0.25*t],[t,0,4*%pi],[x,0,1],
    [grid,200,200])$

### Kísérlet

r:[cos(t),sin(t),0.25*t];

Az alábbi függvény a változóját t szerint differenciálja. Alkalmazzuk egy vektor koordinátáira.

ddt:lambda([x],diff(x,t));

v:matrixmap(ddt,r);

a:matrixmap(ddt,v);

### Kísérlet

v_0:20;

g:10;

plot2d([[parametric,v_0*cos(%pi/12)*t,v_0*sin(%pi/12)*t-g/2*t^2,[t,0,3]],
    [parametric,v_0*cos(%pi/6)*t,v_0*sin(%pi/6)*t-g/2*t^2,[t,0,3]],
    [parametric,v_0*cos(%pi/4)*t,v_0*sin(%pi/4)*t-g/2*t^2,[t,0,3]],
    [parametric,v_0*cos(%pi/3)*t,v_0*sin(%pi/3)*t-g/2*t^2,[t,0,3]],
    [parametric,v_0*cos(5*%pi/12)*t,v_0*sin(5*%pi/12)*t-g/2*t^2,[t,0,3]]])$

### Kísérlet

kill(all);

r:[R*cos(φ),R*sin(φ),0];

ddt:lambda([x],diff(x,t));

depends(φ,t);

v:matrixmap(ddt,r);

r:matrix([R*cos(ω*t+φ_0),R*sin(ω*t+φ_0),0]);

v:matrixmap(ddt,r);

a:matrixmap(ddt,v);