Script for Jacobi method
Another iterative method for solving a system of linear equations.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Title: Jacobi method %
% Author: Dhiman Roy, Dept. of ME (BUET) %
% Date: August 23, 2021 %
% Licensed under Creative Commons %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
global showSteps;
showSteps = false; %true shows calculation steps
A = input('Please Enter the Co-efficient Matrix, A:\n' );
b = input('Please Enter the Constants(Must be a column vector, b:\n');
solByJacobi = jacobi(A, b)
function [x] = jacobi(A, b)
global showSteps;
xIni = input("Enter initial guesses (Must be a column vector:\n");
eLimit = input("Enter tolerance:\n");
[m,n] = size(A);
for k = 1: n-1
for p = k+1:n
if abs(A(k,k) < A(p,k))
b([k p]) = b([p k]);
A([k p],:) = A([p k],:);
end
end
end
check = ones(n,1);
for i = 1:n
if 2*abs(A(i,i)) < sum(abs(A(i,:)))
check(i) = 0;
end
end
if all(check) ~= 1
error("Partial pivoting does not make the coefficient matrix a diagonally dominant matrix.")
else
disp("Partial pivoting makes the coefficient matrix a diagonally dominant matrix.")
end
xOld = xIni;
xNew = zeros(n,1);
for k = 1:100
err = 0;
for i = 1:n
xNew(i) = b(i)/A(i,i)-A(i,[1:i-1,i+1:n])*(xOld([1:i-1,i+1:n])/A(i,i));
err = err + abs((xNew(i)-xOld(i))/xNew(i));
end
if showSteps == 1
fprintf("Iteration %d\n",k);
disp(xNew);
abs((xNew-xOld)/xNew);
end
if err < eLimit
break;
end
xOld = xNew;
end
x = xNew;
end