﻿
% <- la percentuale come simbolo per commentare

%%
% doppia percentuale per creare sezioni di codice che possono essere
% eseguite indipendentemente


%%
clc
close all
clear

% OPERAZIONI DI BASE

%% SOMMA

A = 1;
B = 2;

% somma = 
somma = A + B;

%% DIFFERENZA
differenza = A - B;

%% MOLTIPLICAZIONE
% moltiplicazione = 

%% PRODOTTO
% prodotto = 

%% ALTRE



%radice -> sqrt
%potenza -> ^ exp
%logaritmo log
% sin
% cos
% etc..


%% PLOT
clc
close all
clear


% retta
m = 2;
q = -1;



% fare 1 vettore di dati per la X e per la Y della retta
x = -5 : 0.1 : 5;
y = m * x + q;

figure(100)
plot(x,y, '-*r')
grid on
xlabel('X[m], [rad]')
ylabel('Y[m]')
title('dati')
% axis equal

theta = ( -720 : 1 : 720 ) * pi / 180 ;

vals = sin( theta );

figure(100)
hold on
plot(theta, vals,'-b')
hold off
axis equal

legend('dati','sin')


%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++



%% SCRIPT



%% FUNZIONE




%% RICORSIONE
FF = myFactorial(5)


%% vettori logici

clc
close all
clear 

% trovare i numeri che sono multipli di 3

II = 1 : 100;
divisore = 3;

multiple_3 = [];
for jj = 1 : length(II)
    val = II(jj);
    if( mod(val,divisore ) == 0 )
       multiple_3(end+1) = val;  
    end
end


multiple_3_2 = II( mod(II,divisore ) == 0 );






%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++

%% CICLI

% while

% for


% inizializzazione vettori
% differenza tempi ciclo con vettore inizializzato o no

clear all

tic
A = [];
for ii = 1 : 100000
    A(end+1) = ii;
end
toc


tic
A = zeros(1,100000);
for ii = 1 : 100000
    A(ii) = ii;
end
toc




%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++



%% MATRICI

clear 
clc
close all





% costruzione di una matrice
% zeros

% Somma matrici
% prodotto matrici
% prodotto parametri e matrice .*

% matrice di rotazione

V = [ 1 0 ]';

for ii = 0 : 5 : 360
    
    alpha = ii * pi / 180;
    
    % fare la funzione RotMat
    V_r = RotMat(alpha) * V;
    
    figure(600)
    cla
    hold on
    quiver(0,0,V(1),V(2))
    quiver(0,0,V_r(1),V_r(2))
    hold off
    axis equal
    grid on
    
    pause(0.2)
end


%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++


%% SIMBOLIC



%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++

%% COVARIANZA

clear

% /////////////////////////////////////////////////////////////////////////////////////
% 1D
% data = randn(1, 1000);
% 
% figure
% hist(data);
% 
% figure
% [counts,centers] = hist(data); % NB, quando uso gli output non creo la grafica dell'istogramma!!!

% gaussiana >> 1 / (sigma*sqrt(2*pi))*exp(  -(x-m)^2/(2*sigma^2) );


% fitting gaussiana 1 D
x_test  = 1:100;
sigma   = 15; 
mu      = 40; 
A       = 3;
noise   = 0.03;

y_test  = A*exp(-(x_test-mu).^2/(2*sigma^2)) + randn(size(x_test))*noise;
figure(500)
plot(x_test,y_test,'.');
grid on







% devo togliere le Y vicine allo 0! se no introduco parti immaginarie
%-> for loop
%-> vettori logici

y_log = log(y_test);
x_log = x_test;

figure(501)
plot(x_log, y_log,'.b')
grid on


p = polyfit(x_log,y_log,2);

A2 = p(1);
A1 = p(2);
A0 = p(3);
sigma_fit = sqrt(-1/(2*A2));
mu_fit    = A1*sigma_fit^2;
A_fit     = exp(A0+mu_fit^2/(2*sigma_fit^2));

x_sample = 1:100;
y_sample = A_fit*exp(-(x_sample-mu_fit).^2/(2*sigma_fit^2));

figure(500)
hold on
plot(x_sample,y_sample,'or');
hold off



%%










% /////////////////////////////////////////////////////////////////////////////////////
clear

% 2D
confidenza = 0.95; %[%]

data = randn(2, 1000)';
data(:,1) = 3*data(:,1);

% calcolare la covarianza della distribuzione dei punti
% C = ???

sigma_1 = sqrt(C(1,1));
sigma_2 = sqrt(C(2,2));

doc princomp

[ w1, w2, alpha ] = Covariance2EllipseParameters( C, confidenza );

figure
hold on
plot(data(:,1), data(:,2),'.b')
[h, x_ell, y_ell] = myEllipse( w1,w2,alpha,0,0,'r','-');
hold off
axis equal
grid on

% ESERCIZIO: contare quanti punti sono dentro e quanti sono fuori dall'ellisse
% controntare le % di punti interni con quella definita all'inizio


%% OTTIMIZZAZIONE/FITTING
clc
clear
close all


load('data.mat')
V_alim      = 5.2;
thetaTOT    = 260;

theta = data(1,:);
Vout = data(3,:);


x_sim = 0:300;
y_sim = x_sim*1/50;

figure(800)
hold on
plot(x_sim,y_sim,'-r')
plot(theta,Vout,'-*b')
hold off
grid on
xlabel('theta [deg]')
ylabel('Volts [V]')
legend('modello ideale','dati')

K = 1;

options = optimset('Algorithm','levenberg-marquardt', 'Display','iter', 'TolFun', 1e-20 );
lb = 1e-10; %lower bound 
ub = 1;     % upper bound

K = lsqnonlin(@costFunction, K,lb,ub, [], thetaTOT, theta, Vout, V_alim );

y_check = 1 ./ ( thetaTOT./theta + K.*( 1 - theta./thetaTOT ) ) * V_alim;

figure(810)
hold on
plot(theta,Vout,'-*b')
plot(theta,y_check,'-r')
hold off
grid on



