Programy w matlabie:



%aproksymacja (liniowa regresja dla funkcji y=Ax+B)
clear;
path(path,'c:\matlab\functions');
min=input('podaj minimalną wartość zmiennej niezależnej = ');
max=input('podaj maksymalną wartość zmiennej niezależnej = ');
n=input('ile ma być wygeneroeanych punktów = ');
x=linspace(real(min),real(max),n)';
[m n]=size(x);
for i=1:m,
   y(i,1)=rndm(1,1,1.5*i,2*i);
end
a=polyfit(x,y,1);
plot(x,y,'.',x,a(1)*x+a(2));

clear;
path(path,'c:\matlab\functions');
a=input('podaj w najmniejszą zminną niezależną = ');
b=input('podaj największą zmienną niezależną = ');
p=input('podaj ile punktów ma być wygenerowanycch = ');
x=linspace(real(a),real(b),real(p))';
[m,n]=size(x);
for i=1:m;
   y(i,1)=rndm(1,1,i*0.1,i*0.2);
end
a=x\y;
plot(x,y,'.',x,a*x);
title('aproksymacja funkcją liniową');

function linaprox(xmax,xmin,n); 
%funkkcja linaprox generuje punkty losowe a następnie dokonuje dlanich
%aproksymacji linią prostą
%linaprox(xmax,xmin,liczba_punktów)
path(path,'c:\matlab\functions');
x=linspace(xmax,xmin,n)';
[m n]=size(x);
for i=1:m,
   y(i,1)=rndm(1,1,0.1*i,0.2*i);
end
a=x\y;
plot(x,y,'.',x,a*x);

clear;
a=input('podaj współczunnik a wielomianu drugiego stopnia ax^2+bx+c = ');
b=input('b = ');
c=input('c = ');
w=[real(a) real(b) real(c)];
r=roots(w);
disp('pierwiastkmi tego wielomianu są :'),disp(r);

function r=pierwf(a,b,c)
%funkcja obliczjąca pierwiastki wielomianu drugiego stopnia : ax^2+bx+c=0
%usage pierwf(a,b,c)
w=[a b c];
r=roots(w);

o=menu('Iinterpolacja i aproxymacja','inerpolacja wielomianami trzeciego stopnia','interpolacja funkcją łamaną','interpolacja funkcjami sklejanym trzeciego stopnia','aproxymcja linią prostą');
path(path,'c:\matlab\functions');
if(o==1),
    min=input('podaj przedziały w których mająbyć generowne liczby losowe min = ');
   max=input('max = ');
   n=input('ile ma być takich punktów = ');
   i=input('ile ma być punktów interpolacji = ');
   xi=linspace(real(min),real(max),real(i));
   p=sortrows(rndm(real(n),2,real(min),real(max)))';
   yi=interp1(p(1,:),p(2,:),xi,'cubic');
   plot(p(1,:),p(2,:),'o',xi,yi);
   title('inerpolacja wielomianami trzeciego stopnia');
elseif(o==2),
   min=input('podaj przedziały w których mająbyć generowne liczby losowe min = ');
   max=input('max = ');
   n=input('ile ma być takich punktów = ');
   i=input('ile ma być punktów interpolacji = ');
   xi=linspace(real(min),real(max),real(i));
   p=sortrows(rndm(real(n),2,real(min),real(max)))';
   yi=interp1(p(1,:),p(2,:),xi,'linear');
   plot(p(1,:),p(2,:),'o',xi,yi);
   title('interpolacja linią łamaną');
elseif(o==3),
    min=input('podaj przedziały w których mająbyć generowne liczby losowe min = ');
   max=input('max = ');
   n=input('ile ma być takich punktów = ');
   i=input('ile ma być punktów interpolacji = ');
   xi=linspace(real(min),real(max),real(i));
   p=sortrows(rndm(real(n),2,real(min),real(max)))';
   yi=interp1(p(1,:),p(2,:),xi,'spline');
   plot(p(1,:),p(2,:),'o',xi,yi);
   title('interpolacja funkcjami sklejanym trzeciego stopnia');
elseif(o==4),
   clear;
a=input('podaj w najmniejszą zminną niezależną = ');
b=input('podaj największą zmienną niezależną = ');
p=input('podaj ile punktów ma być wygenerowanycch = ');
x=linspace(real(a),real(b),real(p))';
[m n]=size(x);
for i=1:m;
   y(i,1)=rndm(1,1,i*0.1,0.2*i);
end
a=x\y;
plot(x,y,'.',x,a*x);
title('aproksymacja funkcją liniową');
end

path(path,'c:\matlab\functions');
P=(sortrows(rndm(10,2,0,50)))';
xi=0:.2:50;
yi1=interp1(P(1,:),P(2,:),xi,'cubic');
yi2=interp1(P(1,:),P(2,:),xi,'linear');
yi3=interp1(P(1,:),P(2,:),xi,'spline');
subplot(2,2,1);
plot(P(1,:),P(2,:),'o',xi,yi1,'green');
title('interpolacja wielomianami trzeciego stopnia');
subplot(2,2,2);
plot(P(1,:),P(2,:),'o',xi,yi2,'green');
title('interpolacja funkcją łamaną');
subplot(2,2,3);
plot(P(1,:),P(2,:),'o',xi,yi3,'green');
title('interpolacja funkcjami sklejanymi trzeciego stopnia');
subplot(2,2,4);
title('punkty dla kturych rysowana jest krzywa interpolacji');
axis off;
format bank;
text(5,5,[num2str(P')]);
axis([0 15 0 15]);

function [Y]=quadfun(X)
Y=X;

function [X]=rndm(n,m,a,b)
%Zwraca macierz n x m liczb losowych o rozkładzie jednostajnym
%na przedziale <a,b>
if (b<a),
   error('b musi być większe niż a');
end
X=rand(n,m)*(b-a)+a;

function s=silnia(p)
%obliczania silnie z paramaetru p
s=1;
for i=1:p,
  s=s*i;
end

close all;
meshgrid((-2:.1:2)*pi);
z=cos(x)+sin(x-y);
mesh(x,y,z);