MSI Ex2 Matlab code
Ex2_question2.m
—
Objective-C source code,
2Kb
Dateiinhalt
%% Exercise 2 - Least Squares estimation
%%
close all
clear all
N = 20; % number of measurements
M = 1000; %number of experiments
R = 1; % true value of the resistance
E = 2; % true value of the voltage source
sigma = 0.2; % standard deviation used in the generation of the normal noise
%% Data generation - Case 1
i_min = 5; % minimum value of the input current
i_max = 10; % maximum value of the input current
n_u = randn(N,M)*sigma; % measurement noise
i = linspace(i_min,i_max,N)'; % input current
u = E+R*i*ones(1,M)+n_u; % voltage measurements
%% Least Squares estimator - Case 1
R_est1 = zeros(1,M);
E_est1 = zeros(1,M);
for ind = 1:M
K = [i, ones(N,1)]; % coefficient matrix
theta = (K'*K)\(K'*u(:,ind)); % solution of the LS problem
R_est1(ind) = theta(1); % estimated value of R
E_est1(ind) = theta(2); % estimated value of E
end
figure
hold on
plot(E_est1, R_est1, 'r+');
title('Resistance and voltage estimation')
xlabel('E');
ylabel('R');
%% Data generation - Case 2
i_min = -10; % minimum value of the input current
i_max = 10; % maximum value of the input current
n_u = randn(N,M)*sigma; % measurement noise
i = linspace(i_min,i_max,N)'; % input current
u = E+R*i*ones(1,M)+n_u; % voltage measurement
n_u = randn(N,M)*sigma; % measurement noise
i = linspace(i_min,i_max,N)'; % input current
u = E+R*i*ones(1,M)+n_u; % output voltage
%% Least Squares estimator - Case 2
R_est2 = zeros(1,M);
E_est2 = zeros(1,M);
for ind = 1:M
K = [i, ones(N,1)]; % coefficient matrix
theta = (K'*K)\(K'*u(:,ind)); % solution of the LS problem
R_est2(ind) = theta(1); % estimated value of R
E_est2(ind) = theta(2); % estimated value of E
end
plot(E_est2, R_est2, 'b+');
%% Covariance matrices computation and confidence ellipses
R_mean1 = mean(R_est1); % mean value of R for case 1
E_mean1 = mean(E_est1); % mean value of E for case 1
Sigma1 = cov([E_est1' R_est1']); % covariance matrix for case 1
[V1,D1] = eig(Sigma1); % eigenvalues and eigenvector computation
R_mean2 = mean(R_est2); % mean value of R for case 2
E_mean2 = mean(E_est2); % mean value of E for case 2
Sigma2 = cov([E_est2' R_est2']); % covariance matrix for case 2
[V2,D2] = eig(Sigma2); % eigenvalues and eigenvector computation
% generate the coordinates of 50 points on a unit circle
xy=[cos(linspace(0,2*pi,50)); sin(linspace(0,2*pi,50))];
% generate the points of the confidence ellipse
xy_ellipse1 = [E_mean1; R_mean1]*ones(1,50) + V1*sqrt(D1)*xy;
xy_ellipse2 = [E_mean2; R_mean2]*ones(1,50) + V2*sqrt(D2)*xy;
plot(xy_ellipse1(1,:), xy_ellipse1(2,:), 'k');
plot(xy_ellipse2(1,:), xy_ellipse2(2,:), 'g');
