%%
%% Listing 5.5 w książce "Obliczenia inżynierskie i naukowe", PWN 2011
%% (C) Piotr Krzyżanowski, 2011
%%
%% Możesz używać tego kodu zgodnie z licencją Creative Commons BY-SA, 
%% zob. http://creativecommons.org/licenses/by-sa/3.0/pl/
%%

function [L, norma] = invlap1d(N,p)
% Funkcja invlap1d - generuje macierz odwrotną do 1-wym laplasjanu 
% z warunkami Dirichleta z lewego i Neumanna z prawego krańca odcinka
%
% Wywołanie: 
%		[L, norma] = invlap1d(N, p)
% Parametry:
% 		N - rozmiar macierzy 
% 		p - jaka norma macierzy (opcjonalnie, domyślnie: 2)
% Wyniki:
% 		L - macierz odwrotna laplasjanu
% 		norma - (p)-ta norma macierzy L (opcjonalnie)

% obsługa parametrów wejściowych - wartości domyślne
if (nargin < 2)	
	p = 2;
	if (nargin < 1)
		error('Za mała liczba argumentów');
	end
end

% właściwa treść funkcji
L = zeros(N,N);
for i=1:N
	L(i,i:N) = L(i:N,i) = i;
end

% normę liczymy tylko wtedy, gdy użytkownik jej zażąda
if (nargout > 1)
	norma = norm(L,p);
end
end
