Circulate Matrix to perform eigenvectors

1 vue (au cours des 30 derniers jours)
Brave A
Brave A le 28 Oct 2019
Commenté : Brave A le 29 Oct 2019
function [A] = circ (x)
% function [A] = circ(x)
%
if nargin ~= 1; error("Only one input argument !"); return; end
isVector = (( ismatrix(x)) && (( size(x ,1) == 1) || (size(x ,2) == 1)));
if ~ isVector ; error("x is not a vector !"); return; end
if size(x ,1) < size(x ,2); x=x ; end % make a column vector
len_x = max(size(x )); % length of the vector
A = zeros( len_x ); % init matrix A
for i = 0:( len_x -1)
ind = mod ((1: len_x )-i -1, len_x )+1; % index order
A(:,i +1)= x( ind ); % write the rows of x in the order of ind
end %for
tol =1e8;
% (a)
xind =(1:4);
x = xind .*( -1).^ xind ;
A = circ(x); % create circulant matrix A
% (b)
[W, lambda ] = eig(A);
dlambda = diag( lambda );
W = round(W* tol )/ tol;
% (c)
% these are equal
inv(W)
% (d)
y =[1:4];
round(A*y*tol)/ tol;
% (e)
round(W* lambda *W*y * tol)/ tol;
% (f)
xind = [1:100];
x = xind .*( -1).^ xind ;
B = circ (x); % create circulant matrix B
% (g)
% right
twelfth_smallest_ind =100 -12+1;
[RW , Rlambda ] = eig(B); % RW is right eigenvectors
RW=round(RW* tol )/ tol ;
dRlambda = diag( Rlambda );
dRlambda_abs = abs( dRlambda ); % magnitude of eigenvalues
[ dRlambda_abs_sort , dRlambda_abs_ind ] = sortrows ( dRlambda_abs );
dRlambda_abs_sort = flipud( dRlambda_abs_sort );
dRlambda_abs_ind = flipud( dRlambda_abs_ind );
[dRlambda_abs_sort ( twelfth_smallest_ind ), dRlambda_abs_ind ( twelfth_smallest_ind )] % 12th smallest eigenvalue
% 50.9016074095522
R12_ind = dRlambda_abs_ind (( dRlambda_abs_sort == dRlambda_abs_sort ( twelfth_smallest_ind ))); % indicies of 12th smallest eigenvalues
Revec_12 = RW (:, R12_ind );
% left
[LW , Llambda ] = eig(B); LW = conj(LW ); % LW is left eigenvectors
LW=round(LW* tol )/ tol ;
dLlambda = diag( Llambda );
dLlambda_abs = abs( dLlambda ); % magnitude of eigenvalues
[ dLlambda_abs_sort , dLlambda_abs_ind ] = sortrows ( dLlambda_abs );
dLlambda_abs_sort = flipud( dLlambda_abs_sort );
dLlambda_abs_ind = flipud( dLlambda_abs_ind );
[ dLlambda_abs_sort ( twelfth_smallest_ind ), dLlambda_abs_ind ( twelfth_smallest_ind )] % 12th smallest eigenvalue
% 50.9016074095521 86
L12_ind = dLlambda_abs_ind (find( dLlambda_abs_sort == dLlambda_abs_sort ( twelfth_smallest_ind ))); % indicies of 12th smallest eigenvalues
Levec_12 = LW (:, L12_ind );
% plots
subplot(4 ,2 ,1);plot(xind ,real( Levec_12 (: ,1))); title ("Real Left Eigenvector 1");
subplot(4 ,2 ,3);plot(xind ,imag( Levec_12 (: ,1))); title ("Imag Left Eigenvector 1");
subplot(4 ,2 ,5);plot(xind ,real( Levec_12 (: ,2))); title ("Real Left Eigenvector 2");
subplot(4 ,2 ,7);plot(xind ,imag( Levec_12 (: ,2))); title ("Imag Left Eigenvector 2");
subplot(4 ,2 ,2);plot(xind ,real( Revec_12 (: ,1))); title ("Real Right Eigenvector 1");
subplot(4 ,2 ,4);plot(xind ,imag( Revec_12 (: ,1))); title ("Imag Right Eigenvector 1");
subplot(4 ,2 ,6);plot(xind ,real( Revec_12 (: ,2))); title ("Real Right Eigenvector 2");
subplot(4 ,2 ,8);plot(xind ,imag( Revec_12 (: ,2))); title ("Imag Right Eigenvector 2");
plot_name = strcat ("gpcshw04 -3 indy . eps ");
print(gcf, "-depsc2 ", plot_name );
cl f ;plot(xind ,[real( Levec_12 (: ,1)) ,imag( Levec_12 (: ,1))] ,real( Levec_12 (: ,2)) ,imag( Levec_12 (: ,2)) ,real( Revec_12 (: ,1)) ,imag( Revec_12 (: ,1))); title ("All Eigenvectors ");
plot_name == strcat ;"gpcshw04 -3 all . eps ";
print(gcf, "-depsc2 ", plot_name );
I have this code and I need to generate these:
But somrthing in the code is not correct :(
could check my code please? Thanks in advance

Réponses (0)

Catégories

En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by