

disp("Kolokwium gr 830 on06/07");
#Zad 1 gr 830
#########################################3

function [A,f]=mac(N)
#tworzy macierz o 4 na diagonali 1 na pod- naddiagonalach
#i 1 w prawym górnym rogu i lewym dolnym w sumie 
#N + 2(N-1) + 2 3 n NIEZEROWYCH ELEMENTOW

i=zeros(1,3*N);

s=j=i;

d=ones(1,N);

s=[4*d, -d(1:(N-1)), -d(1:(N-1)), 1,1]; 

i=[1:N , 2:N,    1:(N-1), 1, N];
j=[1:N,  1:(N-1), 2:N,    N, 1];

#tworzymy macierz rzadka
A=sparse(i,j,s,N,N,3*N);

#i wekotr - pierwszy wersor
f=zeros(N,1);
f(1)=1;

endfunction

N=50;
#rozwiazujemy ukl rownan liniowych
tic;
[A,f]=mac(N);
x=A\f;
cz=toc;
#i liczymy norme residuum
err=norm(A*x-f,2);
printf("Zad 1 gr 830:Czas=%g Blad res dla N=%d %g\n",cz,N,err);


#to samo dla N=1e4
N=1e4;
tic;
[A,f]=mac(N);
x=A\f;
cz=toc;
err=norm(A*x-f,2)
printf("Zad 1 gr 830:Czas=%g Blad res dla N=%d %g\n",cz,N,err);

#zad 2 gr 830
#########################################3
#dodajemy prawa strone tzn FF(x)=\int_0^x cos(y*y) dy - rhs
#przyda sie przy rozwiazaniu rownania FF(x)=0.1
function y=FF(x)
global rhs
y=quad("cos(x.*x)",0,x);
y=y-rhs;
endfunction

global rhs 
rhs=0;

xx=linspace(0,4,80);
yy=xx;
for k=1:length(xx),
 yy(k)=FF(xx(k));
endfor 

plot(xx,yy,";Wykres int cos(x*x) dx;");

rhs=0.1;
#rozwiazujemy rownanie 
x=fsolve("FF",0.4);
rhs=0;

printf("Zad 2 gr 830:Zero funkcji F(x)-0.1: %g a F(%g)=%g \n",x,x,FF(x));

#druga grupa
#####################################################
disp("Kolokwium gr 1015 on06/07");
#zad 1 gr 1015
#########################################################
N=50;
B=4*eye(2*N,N);
B(2:(2*N),1)=-ones(2*N - 1,1);
f=zeros(2*N,1);
f(2*N)=1;
tic;
sol=B\f;
cz=toc;
err=norm(B*sol-f,2);
printf("Zad 1 gr 1015: czas=%g blad res=%g\n",cz,err);
#Komentarz: LZNK w octavie rozwiazuje sie tylko dla macierzy pelnych (ale nawet
#gdyby byl dostepny solver dla rzadkich dla N=50 raczej nie warto go uzywac

#zad 2 gr 1015
#########################################
#rozwiazanie troszke b skomplikowane niz to bylo konieczne
#uzywamy nazwy jadra 

function z=kk(x,y)
#jadro  funkcja  2-argumentowa
 z=sin(pi*(x*x+y));
endfunction

function z=aker(x)
#Funkcja 1-argumentowa obliczajaca wartosc jadra (f 2-arg) 
#dla ustalonego y - taki format funkcji potrzebny dla quad() 
global yy
global kerr
 z=feval(kerr,x,yy);
endfunction



function z=FF(ker,y)
#Funkcja zadana przez calke
#z jadra tzn ker(x,y) czyli funkcji 2-argumentowej 
#scalkowanej po odcinku [0,1] po x
global yy
global kerr
 kerr=ker;
 yy=y;
 z=quad("aker",0,1);
endfunction


xx=linspace(0,1);
zz=xx;
for k=1:length(xx),
 zz(k)=FF("kk",xx(k));
endfor 

#Obliczamy min max oraz indeksy gdzis sa osiagane
[minF,minx]=min(zz);
[maxF,maxx]=max(zz);
printf("Zad 2 gr 1015: Mn=%g dla xmin=%g max=%g dla max=%g\n",minF,xx(minx),maxF,xx(maxx));

#3sek aby mozna bylo obejrzec spokojnie poprzedni wykres
pause(3)

plot(xx,zz,";int_0^1 sin(x^2+y);")
