trying to find main diagonal of a matrix for cholesky method

2 Ansichten (letzte 30 Tage)
my goal is to find the main diagonal of a matrix G, through the cholesky method. For this I'm using a summation, however there is no success follow the code so far and the sum of interest.
clear;
clc;
%cholesky
n= input ("dimension of system:"); %dimension of system for the matrix
A= input("enter matrix A "); %initial matrix A for the cholesky method
disp (A);
i=1;
j=1;
for i=j
if i==1
g(1,1)=sqrt (A(1,1));
fprintf ("first element: \n"); %first element of the diagonal g(1,1)
disp (g(1,1))
end
%diagonal
k=1;
for i=2:n
for i=i-1
g(i,i)= g(i,i) + sqrt(A(i,i) - g(i,k)^2); % summation for the remaining diagonals dependent on the dimension of the system
end
end
end
disp(g(i,i))
the sum of interest below:
the entries are respectively:
3 -> dimension of system
[ 1 1 0; 1 2 -1; 0 -1 3] -> matrix A
the error is:

Akzeptierte Antwort

Dyuman Joshi
Dyuman Joshi am 3 Sep. 2023
%Random data
n = 5; %input ("dimensão do sistema:"); %dimension of system for the matrix
A = magic(5); %input("entre com a matriz "); %initial matrix A for the cholesky method
disp(A);
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
%Pre-allocate g array
g = zeros(n);
for i=1:n
if i==1
g(i,i) = sqrt(A(i,i));
fprintf("primeiro elemento: %f\n", g(1,1)); %first element of the diagonal g(1,1)
else
k=1:i-1;
%summation for the remaining diagonals dependent on the dimension of the system
g(i,i) = sqrt(A(i,i) - sum(g(i,k).^2));
end
end
primeiro elemento: 4.123106
disp(g)
4.1231 0 0 0 0 0 2.2361 0 0 0 0 0 3.6056 0 0 0 0 0 4.5826 0 0 0 0 0 3.0000
  2 Kommentare
Gabriel
Gabriel am 3 Sep. 2023
maybe I got it wrong somewhere, but the results don't match the table test, you could test with n = 3 and A = [ 1 1 0; 1 2 -1; 0 -1 3] please?
Dyuman Joshi
Dyuman Joshi am 3 Sep. 2023
FYI, You can make a function and test for any inputs -
n = 3;
A = [1 1 0; 1 2 -1; 0 -1 3];
disp(A);
1 1 0 1 2 -1 0 -1 3
g = choleskymethod(A,n)
primeiro elemento: 1.000000
g = 3×3
1.0000 0 0 0 1.4142 0 0 0 1.7321
function g = choleskymethod(A,n)
%Pre-allocate g array
g = zeros(n);
for i=1:n
if i==1
g(i,i) = sqrt(A(i,i));
fprintf("primeiro elemento: %f\n", g(1,1)); %first element of the diagonal g(1,1)
else
k=1:i-1;
%summation for the remaining diagonals dependent on the dimension of the system
g(i,i) = sqrt(A(i,i) - sum(g(i,k).^2));
end
end
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help Center und File Exchange

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by