% okrajova pro odr
% zakladni tvar
% ---------------
% -((p(x)y')' + q(x)y = f(x)
% --------------------------
% zadání p,q,f  
% například
p = @(x) x^2;
q = @(x) x+2;
f = @(x) -x;
% interval, okrajove podminky, krok
a = 1; b = 5; ya = 5; yb = -2;
h = 1;
% vnitrni body x
x = a+h : h : b-h;%je dobré ověřit, že x(end) se rovná b-h, případně upravit
%
pocet_rovnic = length(x);
% matice soustavy A, vektor prave strany B
A=zeros(pocet_rovnic, pocet_rovnic);%zbytecne,matice je 3 diagonalni,ale... 
% 1. rovnice: 
A(1,1) =  p(x(1)-h/2)+p(x(1)+h/2)+h^2*q(x(1)); 
A(1,2) = -p(x(1)+h/2);
% 2. rovnice
A(2,1)=-p(x(2)-h/2); 
A(2,2)= p(x(2)-h/2)+p(x(2)+h/2)+h^2*q(x(2)); 
A(2,3)=-p(x(2)+h/2);
% 3. rovnice
A(3,2)=-p(x(3)-h/2);
A(3,3)= p(x(3)-h/2)+p(x(3)+h/2)+h^2*q(x(3)); 
% prava strana
B(1) = h^2*f(x(1)) + p(x(1)-h/2)*ya;
B(2) = h^2*f(x(2));
B(3) = h^2*f(x(3)) + p(x(3)+h/2)*yb;
%----------------------------
fprintf("soustava 3 rovnic\n")
fprintf("x=%2.2f: (%4.4f) Y1 + (%4.4f) Y2 + (%4.4f) Y3 = (%4.4f)\n",x(1), A(1,1),A(1,2),A(1,3),B(1))
fprintf("x=%2.2f: (%4.4f) Y1 + (%4.4f) Y2 + (%4.4f) Y3 = (%4.4f)\n", x(2),A(2,1),A(2,2),A(2,3),B(2))
fprintf("x=%2.2f: (%4.4f) Y1 + (%4.4f) Y2 + (%4.4f) Y3 = (%4.4f)\n", x(3),A(3,1),A(3,2),A(3,3),B(3))

%% druha ... predposledni rovnice
% for i=2:pocet_rovnic-1
% A(i,i-1) = -p(x(i)-h/2); 
% A(i,i)   =  p(x(i)-h/2)+p(x(i)+h/2)+h^2*q(x(i)); 
% A(i,i+1) = -p(x(i)+h/2); 
% end
%% posledni rovnice
%i = pocet_rovnic;
% A(i,i-1)=-p(x(i)-h/2); 
% A(i,i)  = p(x(i)-h/2)+p(x(i)+h/2)+h^2*q(x(i)); 
%% prava strana
% for i=1:pocet_rovnic B(i)=h^2*f(x(i)); %pro konstantni funkci!
% B(1)  = b(1)   + p(x(1)-h/2)  *ya;
% B(end)= b(end) + p(x(end)+h/2)*yb;


