1. Matrices and Gaussian Elimination:
Multiplication and transpose of matrix using Scilab.
Inverses of matrix in Scilab without using any inbuilt package.
Inverses of matrix in Scilab using any inbuilt package like numpy.
Linear equation with n unknowns using Gauss Elimination Method using Scilab.
// Define matrices A = [1 2; 3 4]; B = [5 6; 7 8]; // Matrix Multiplication C = A * B; // Transpose of Matrix A At = A'; disp(C, "Matrix Multiplication A * B:"); disp(At, "Transpose of Matrix A:");
// Define a 2x2 matrix A = [4 7; 2 6]; // Calculate Inverse manually (using formula for 2x2 matrix) detA = A(1,1)*A(2,2) - A(1,2)*A(2,1); invA = (1/detA) * [A(2,2) -A(1,2); -A(2,1) A(1,1)]; disp(invA, "Inverse of A:");
// Inbuilt function inv() for matrix inversion A = [4 7; 2 6]; invA = inv(A); disp(invA, "Inverse of A using inv():");
// Gaussian Elimination to solve Ax = b
A = [2 -1 1; 3 3 9; 3 3 5];
b = [8; -8; -12];
// Augmented matrix
Ab = [A b];
// Gaussian elimination
n = size(A, 1);
for i = 1:n-1
for j = i+1:n
factor = Ab(j,i)/Ab(i,i);
Ab(j,:) = Ab(j,:) - factor*Ab(i,:);
end
end
// Back substitution
x = zeros(n,1);
for i = n:-1:1
x(i) = (Ab(i,end) - Ab(i,1:n)*x)/Ab(i,i);
end
disp(x, "Solution of the system using Gaussian Elimination:");
2. Vector:
Addition, subtraction, multiplication anddivision of vector using Scilab.
Dot product & cross product of vector using Scilab
Visualising vector Linear Transformations using Scilab.
// Define vectors v1 = [2, 3, 5]; v2 = [4, 6, 8]; // Addition v_add = v1 + v2; // Subtraction v_sub = v1 - v2; // Multiplication (element-wise) v_mul = v1 .* v2; // Division (element-wise) v_div = v1 ./ v2; disp(v_add, "Vector Addition:"); disp(v_sub, "Vector Subtraction:"); disp(v_mul, "Element-wise Multiplication:"); disp(v_div, "Element-wise Division:");
// Dot Product dot_prod = v1 * v2'; // Cross Product cross_prod = cross(v1, v2); disp(dot_prod, "Dot Product:"); disp(cross_prod, "Cross Product:");
// Define vectors
v1 = [2; 3];
v2 = [1; 4];
// Define transformation matrix
T = [2 -1; 1 2];
// Apply transformation
v1_trans = T * v1;
v2_trans = T * v2;
// Plot original and transformed vectors
clf;
plot([0 v1(1)], [0 v1(2)], '-r', 'LineWidth', 2);
plot([0 v2(1)], [0 v2(2)], '-g', 'LineWidth', 2);
plot([0 v1_trans(1)], [0 v1_trans(2)], '--r', 'LineWidth', 2);
plot([0 v2_trans(1)], [0 v2_trans(2)], '--g', 'LineWidth', 2);
xgrid();
legend("v1", "v2", "T * v1", "T * v2");
3. Matrices Transformation
Computes the orthonormal vectors using the GS algorithm using Scilab.
Projections and Least Squares using Scilab.
Fast Fourier Transform using Scilab.
// Gram-Schmidt Process for Orthonormal Vectors
function Q = gram_schmidt(A)
[n, m] = size(A);
Q = zeros(n, m);
for i = 1:m
v = A(:, i);
for j = 1:i-1
v = v - (Q(:, j)' * A(:, i)) * Q(:, j);
end
Q(:, i) = v / norm(v); // Normalize
end
endfunction
// Example
A = [1 1; 1 0; 1 -1];
Q = gram_schmidt(A);
disp(Q, "Orthonormal Vectors using Gram-Schmidt:");
// Projections and Least Squares A = [1 1; 1 2; 1 3]; b = [1; 2; 2]; // Compute projection matrix P = A * inv(A' * A) * A'; // Project b onto the column space of A proj_b = P * b; // Solve using least squares x_ls = inv(A' * A) * A' * b; disp(proj_b, "Projection of b:"); disp(x_ls, "Least Squares Solution:");
// Fast Fourier Transform (FFT) x = [1, 2, 3, 4, 5, 6, 7, 8]; X = fft(x); disp(X, "FFT of x:");
4. Determonant of matrix:
Finding determinant of matrix in Scilab without using any inbuilt package.
Finding determinant of matrix in Scilab using any inbuilt package.
// Function to compute determinant without inbuilt function (using recursion)
function det_A = determinant(A)
[n, m] = size(A);
if n ~= m then
error("Matrix must be square.");
end
if n == 1 then
det_A = A(1, 1);
elseif n == 2 then
det_A = A(1, 1) * A(2, 2) - A(1, 2) * A(2, 1);
else
det_A = 0;
for j = 1:n
det_A = det_A + (-1)^(1+j) * A(1, j) * determinant(A(2:$, [1:j-1 j+1:$]));
end
end
endfunction
// Example
A = [3 2 1; 1 0 2; 4 5 6];
det_A = determinant(A);
disp(det_A, "Determinant without inbuilt function:");
// Finding determinant using inbuilt function A = [3 2 1; 1 0 2; 4 5 6]; det_A = det(A); // Inbuilt function 'det' disp(det_A, "Determinant using inbuilt function:");
5. Eigen Vectors & Vectors:
Compute the eigenvalues and right eigen vectors of a given square array using Scilab.
Program to test diagonalizable matrix using Scilab.
// Eigenvalues and Eigenvectors A = [4 2; 1 3]; // Compute eigenvalues and right eigenvectors [evectors, evalues] = spec(A); // 'spec' function returns both eigenvalues and eigenvectors disp(evalues, "Eigenvalues:"); disp(evectors, "Right Eigenvectors:");
// Check if matrix is diagonalizable
A = [4 2; 1 3];
// Compute eigenvalues and eigenvectors
[evectors, evalues] = spec(A);
// Check if the matrix of eigenvectors is invertible (determinant is non-zero)
det_P = det(evectors);
if det_P ~= 0 then
disp("Matrix is diagonalizable.");
else
disp("Matrix is not diagonalizable.");
end
6. 6. Testing of Matrices:
Tests for Positive Definitenes using Scilab.
Singular Value Decomposition using Scilab.
The Finite Element Method using Scilab. (Only Demonstration).
// Test for Positive Definiteness
function is_pos_def = test_positive_definite(A)
evalues = spec(A); // Get eigenvalues
if all(evalues > 0) then
is_pos_def = %T; // True, matrix is positive definite
else
is_pos_def = %F; // False, matrix is not positive definite
end
endfunction
// Example
A = [2 -1 0; -1 2 -1; 0 -1 2];
result = test_positive_definite(A);
if result then
disp("Matrix is Positive Definite.");
else
disp("Matrix is not Positive Definite.");
end
// Singular Value Decomposition (SVD) A = [3 1 1; -1 3 1]; // Perform SVD [U, S, V] = svd(A); // SVD decomposition disp(U, "U Matrix:"); disp(S, "S Matrix (Singular Values):"); disp(V, "V Matrix:");
// Finite Element Method (FEM) Demonstration for 1D problem
function fem_demo()
n = 4; // Number of elements
h = 1/n; // Element length
K = zeros(n+1, n+1); // Stiffness matrix
F = zeros(n+1, 1); // Load vector
// Assemble stiffness matrix and load vector
for i = 1:n
K(i:i+1, i:i+1) = K(i:i+1, i:i+1) + [1 -1; -1 1]/h;
F(i:i+1) = F(i:i+1) + [1; 1] * h / 2; // Assuming constant force f(x) = 1
end
% Boundary conditions (Dirichlet)
K(1, :) = 0;
K(1, 1) = 1;
F(1) = 0;
% Solve system
U = K\F; // Solution vector
// Display result
disp(U, "Solution U at nodes:");
endfunction
// Run demonstration
fem_demo();
7. Simplex Method:
Simplex Method using Scilab. (Only Demonstration).
// Simplex Method in Scilab
// Define objective function coefficients (maximize Z = 3x1 + 2x2)
c = [-3; -2]; // Use negative for maximization
// Define the inequality constraint matrix and RHS
A = [2 1; 2 3; 3 1];
b = [18; 42; 24];
// Simplex solution using Scilab's linprog function
[x, fval, info] = linprog(c, A, b, [], [], [0; 0], []);
// Display solution
disp("Optimal values of variables (x1, x2):");
disp(x);
disp("Maximum value of objective function Z:");
disp(-fval); // Remember to flip sign for maximization
8. Dual Problem Solving:
The Dual Problem using Scilab. (Only Demonstration)
// Dual Problem in Scilab
// Primal problem: Maximize Z = 4x1 + 3x2
// Dual problem: Minimize W = 8y1 + 5y2
// Coefficients for dual problem (minimization)
c = [8; 5]; // Objective function for dual
// Coefficient matrix and bounds for dual constraints
A = [-2 -2; -3 -1];
b = [-4; -3];
// Solve using Scilab's linprog for minimization
[y, fval, info] = linprog(c, A, b, [], [], [0; 0], []);
disp("Optimal values of dual variables (y1, y2):");
disp(y);
disp("Minimum value of dual objective function W:");
disp(fval);
9. Network Modelling:
Implementing Network Models using Scilab. (Only Demonstration)
// Network Modelling in Scilab (Dijkstra's Algorithm)
// Adjacency matrix for the graph (5 nodes)
G = [
0 10 20 0 0;
10 0 5 16 0;
20 5 0 10 0;
0 16 10 0 12;
0 0 0 12 0
];
// Dijkstra’s Algorithm
function dist = dijkstra(G, start)
n = size(G, 1);
visited = zeros(n, 1);
dist = ones(n, 1) * inf;
dist(start) = 0;
for i = 1:n
[minDist, u] = min(dist .* (~visited)); // Find the minimum unvisited node
if minDist == inf then break; end
visited(u) = 1;
for v = 1:n
if G(u, v) > 0 & visited(v) == 0 then
newDist = dist(u) + G(u, v);
if newDist < dist(v) then
dist(v) = newDist;
end
end
end
end
endfunction
// Example: Find shortest path from node 1
shortest_distances = dijkstra(G, 1);
disp("Shortest distances from node 1:");
disp(shortest_distances);
10. Application:
Implementing Game Theory using Scilab. (Only Demonstration)
// Game Theory in Scilab (Prisoner's Dilemma)
// Payoff matrix for both players
payoff_matrix = [
[(-1, -1), (-3, 0)];
[(0, -3), (-2, -2)]
];
// Strategy names: (Cooperate, Defect)
disp("Payoff Matrix:");
disp(payoff_matrix);
// Example: Player 1 chooses to Cooperate (1), Player 2 chooses to Defect (2)
player1_choice = 1; // 1 for Cooperate, 2 for Defect
player2_choice = 2;
result = payoff_matrix(player1_choice, player2_choice);
disp("Result (Player 1, Player 2):");
disp(result);