Octave: numerické řešení ODR

 

#  obrazek k ilustraci kvalitativni analyzy
##	rovnice y'=2yx-2


## nazvi barvy...
modra="b";
ruda="r";

### vice obrazku najednou ...
hold("on");

## odkud kam se kresli...
xx=4;
yy=3;
xlim([-xx/2,xx]);
ylim([-yy/2,yy]); 


## vypni krabici kolem
axis("off");

### souradne osy: teckovane, cerne
dx=0.05;
t=-xx:dx:xx;
plot(t,0*t,".k");
plot(0*t,t,".k");

### mnozina y'=0, tj y=1/x
# (cervene)
x=linspace(0.1,xx,30);
plot(x,1./x,ruda);
plot(-x,-1./x,ruda);

### mnozina y''=0, tj y = x/(1+2x^2)
# (modre)
dd = @(x) x/(1+2*x*x);
x=linspace(-xx,xx,60);
plot(x,arrayfun(dd,x),modra);

### numericky vytvorene trajektorie
h=0.01;
## p.s. ODR
function ydot=f(y,x)
  ydot=2*y*x-2;
endfunction
## cyklus volby pocatecnich podminek
for ic = [1.75,2,0,-1,-2.2]
	## dopredna trajektorie (cerna)
	x=0:h:xx;
	y=lsode("f",ic,x);
	plot(x,y,"k");
	## zpetna trajektorie (cerna)
	x=0:-h:-xx;
	y=lsode("f",ic,x);
	plot(x,y,"k");
## konec cyklu
endfor

## vystup do souboru
print -djpg obr2.jpg