clear all; close all;
%te = 0.01; % 목표 오차 비율이 이하가 되게 하고 싶습니다.


%matsize = 200;
%err2 = 1;
matsize = 60;
n = matsize;
x = zeros(1,n);
%while err2 >= te
    %matsize = matsize + 5;
   
h = rand(n-1, 1) + 0.01;
h = h/sum(h);
% for i = 1:n-1
%     h(i) = 1/19
% end

for i = 1:n-1
    x(i+1) = x(i) + h(i);
end

A = zeros(matsize-2);

for i = 1:matsize-2
    for j = 1:matsize-2
        if i == j
            A(i,j) = 1/h(i)+1/h(i+1);
        elseif i == j+1 
            A(i,j) = -1/h(i);
        elseif i == j-1
            A(i,j) = -1/h(i+1);
        end
    end
end


S = zeros(1,matsize);
for i = 2:matsize-1
    S(i) =  h(i-1)*(0.5*sin(pi*x(i-1))) + 0.5*(h(i-1)+h(i))*sin(pi*x(i)) ...
        + h(i)*0.5*sin(pi*x(i+1));
end
%S(2) = S(2) +h(1) * (0.5*sin(x(1)));
%S(matsize-1) = S(matsize-1) + h(matsize-1) * (0.5*sin(pi*(matsize-1)));
S = pi^2*1/2*S;
SS = S(2:matsize-1);
sol = inv(A)*SS';
% weird = sin(pi*x(2:end-1))./sol';
sol_pdd = [0 sol' 0];
%newsol = sol_pdd * weird(1);

err = -sin(pi*x(2:end-1))+sol';
err2 = max(abs(err./sin(pi*x(2:end-1))));


%end
sprintf('분할수는 %d 이고\n최대오차율은 %.4f %% 입니다\n',matsize, (100*err2))
figure, plot(x, sin(pi*x), 'bo-', x, sol_pdd, 'r*-')
axis image
grid on