Write a function in Matlab that takes as input a size n and a tridiagonal matrix
ID: 3799482 • Letter: W
Question
Write a function in Matlab that takes as input a size n and a tridiagonal matrix given as three vectors: n × 1 vector v representing the main diagonal, (n 1) × 1 vector w representing the upper diagonal, and (n 1) × 1 vector z representing the lower diagonal. Have this function output the LU factorization with the U as two vectors and the L as one vector representing the diagonals. Also output the number of flops used. Use only basic programming.
(a) Write out or print out your function.
(b) Run the case with n = 10, v the vector of 2’s, w and z the vector of 1’s, and b the vector of 1’s. Write down your results for the diagonals of L and U.
(c) Run the case with n = 50 and n = 100 with v the vector of 2’s, w and z the vector of 1’s. Write down your results for the number of flops used
Explanation / Answer
Part a) The Matlab function Cholesky_factor.m
function[V,W,flp,sqt]= Cholesky_factor(n,v,w)
flp = 0;sqt = 0; % initially flp and sqt are zeros
V(1) = sqrt(v(1));% First element C11
sqt = 1; % found one sqrt above
for i = 2:n % for the computation of elements 2 to n-1
W(i-1) = w(i-1)/V(i-1); % one devision involved
flp = flp +1; % for the devision
V(i) = sqrt(v(i)-W(i-1)^2);
flp = flp+1; % one substraction
sqt = sqt+1; % one sqrt involved
end
end
Part b)
>> v =2*ones(10,1);
>> w = -ones(9,1);
>> n =10;
>> [V,W,flp,sqt]= Cholesky_factor(n,v,w)
V =
1.4142 1.2247 1.1547 1.1180 1.0954 1.0801 1.0690 1.0607 1.0541 1.0488
W =
-0.7071 -0.8165 -0.8660 -0.8944 -0.9129 -0.9258 -0.9354 -0.9428 -0.9487
flp = 18
sqt = 10
>> A=diag(V)+diag(W,-1);
>> A*A'
ans =
2.0000 -1.0000 0 0 0 0 0 0 0 0
-1.0000 2.0000 -1.0000 0 0 0 0 0 0 0
0 -1.0000 2.0000 -1.0000 0 0 0 0 0 0
0 0 -1.0000 2.0000 -1.0000 0 0 0 0 0
0 0 0 -1.0000 2.0000 -1.0000 0 0 0 0
0 0 0 0 -1.0000 2.0000 -1.0000 0 0 0
0 0 0 0 0 -1.0000 2.0000 -1.0000 0 0
0 0 0 0 0 0 -1.0000 2.0000 -1.0000 0
0 0 0 0 0 0 0 -1.0000 2.0000 -1.0000
0 0 0 0 0 0 0 0 -1.0000 2.0000
Part c)
>> v =2*ones(100,1);
>> w =-ones(99,1);
>> n =100;
>> [V,W,flp,sqt]= Cholesky_factor(n,v,w);
flp =
198
sqt =
100
198-18 = 180 flops are more
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.