You need to sign in or sign up before continuing.
Commit fa3460be authored by SINGH SOURABH BHAGWAN's avatar SINGH SOURABH BHAGWAN

Lab01 commit

parents
We have made equal contribution to this.
Sourabh,150050009 : 100%
Harshith Goka 150050069 : 100%
Uddeshya 15D110007 : 100%
We pledge on my honour that we have not given or received any unauthorised assistance on this assignment or any previous task.
Citations :
https://www.gnu.org/software/octave/doc/v4.0.0/Global-Variables.html
https://www.gnu.org/software/octave/doc/v4.0.1/Formatted-Output.html#XREFfprintf
https://www.gnu.org/software/octave/doc/v4.0.1/Defining-Functions.html
https://www.gnu.org/software/octave/doc/v4.0.0/Solvers.html
global v; % Global Variable
fileID=fopen('input_inlab_task_A1.txt','r');
v = fscanf(fileID,'%f'); % Input in "nx ny" format
fclose(fileID);
function result = solver(i) % F[x] Solution using Snell's law
global v;
a = v(1,1) * cos(i) + v(2,1) * sin(i);
result = sin(i/3) *(a) - sin(i);
return;
endfunction
x0 = [0.00001,pi/2]; % Expected Range
[ans] = fzero("solver",x0); % Root finding
fid = fopen("output_inlab_task_01.txt","w"); % Creating a output file as writable
fprintf(fid, "%f",ans); % printing into the file
fclose(fid); % closing the file
function result = final_state_3(mat,action) # It operates Matrix mat with action
for i = 1:3
for j = 1:3
if (action(i,j) == 1)
mat = press(mat,i,j); # Calls press
endif
endfor
endfor
result = mat;
return;
endfunction
# We will create 'lookup' function which will actually follow the algorithm to solve
# and a 'press' fucntion which will simulate the pressing of a particular button
function res = lookup_solve_3(mat)
result = zeros(3);
while(!(isequal(mat,zeros(3)))) # Until mat becomes null matrix
for (i=1:2)
for (j=1:3)
if(mat(i,j)==1),
result (i+1,j) = ! result(i + 1,j); #pressing the buttons which are below the on buttons
mat = press(mat,i+1,j);
endif
endfor
endfor
if(mat(3,:)==[0 0 1]), # Look up table implemented
result (1,2) = ! result(1,2);
result (1,3) = ! result(1,3);
mat = press(mat,1,2);mat = press(mat,1,3);
elseif(mat(3,:)==[0 1 0]),
result (1,1) = ! result(1,1);
result (1,2) = ! result(1,2);
result (1,3) = ! result(1,3);
mat = press(mat,1,1);mat = press(mat,1,2); mat=press(mat(1,3));
elseif(mat(3,:)==[0 1 1]),
result (1,1) = ! result(1,1);
mat=press(mat,1,1);
elseif(mat(3,:)==[1 0 0]),
result (1,1) = ! result(1,1);
result (1,2) = ! result(1,2);
mat=press(mat,1,1);mat=press(mat,1,2);
elseif(mat(3,:)==[1 0 1]),
result (1,1) = ! result(1,1);
result (1,3) = ! result(1,3);
mat=press(mat,1,1);mat=press(mat,1,3);
elseif(mat(3,:)==[1 1 0]),
result (1,3) = ! result(1,3);
mat=press(mat,1,3);
elseif(mat(3,:)==[1 1 1]),
result (1,2) = ! result(1,2);
mat=press(mat,1,2);
endif
endwhile
res=result;
return;
endfunction
function res1 = press(mat,n,m) # Simulates the pressing of button (n,m) on the mat
mat(n,m) = !(mat(n,m));
if(n+1<=3), # Checking boundary conditions and inverting the bulbs
mat(n+1,m) = !(mat(n+1,m));
endif
if(n-1>=1),
mat(n-1,m) = !(mat(n-1,m));
endif
if(m+1<=3),
mat(n,m+1) = !(mat(n,m+1));
endif
if(m-1>=1),
mat(n,m-1) = !(mat(n,m-1));
endif
res1=mat;
return;
endfunction
\ No newline at end of file
We are team 27 Audacity.
We have made equal contribution to this.
Sourabh,150050009 : 100%.
Harshith Goka 150050069 : 100%.
Uddeshya 15D110007 : 100%.
We pledge on our honour that we have not given or received any unauthorised assistance on this assignment or any previous task consciously or unconsciously.
What have we learnt:
We learnt to do some basic operation on matrices and revised our concepts of liner algebra.
We also learnt about control statements and functions in octave.
References:
https://www.gnu.org/software/octave (GNU Manual)
\ No newline at end of file
We have made equal contribution to this.
Sourabh,150050009 : 100%
Harshith Goka 150050069 : 100%
Uddeshya 15D110007 : 100%
We pledge on our honour that we have not given or received any unauthorised assistance on this assignment or any previous task.
Reference :
https://www.gnu.org/software/octave
Reflection Essay :
We learnt basic funtionality of octave in Linear Algebra like: inverses; transpose; determinant , finding roots of Equation, creating functions and accessing it from other files. Also learnt basic input output methods in octave.
\ No newline at end of file
function ret = backward_solve(mat)
n=size(mat)(1) ;
m = size(mat)(2);
b=reshape(mat',n*m,1); # makes it a column matrix
Q=generate(n,m); # generates the adjency matrix
R= - (Q\b) * det(Q); # Qx + b = 0 as written in the given webpage
x=mod(round(R),2); # rounding to mod 2
X=reshape(x,m,n);
ret = X';
return;
endfunction
clear;
function ret = backward_solve_3(mat)
n=length(mat);
b=reshape(mat,1,n*n);#reshaping matrix 3x3 to 1x9
Q=zeros(n*n);
for (i=1:n),#generating Q
for (j=1:n),
A=zeros(n);
A = press(A,i,j);#simulating pressing of button
Q(j + (i - 1)*n,:) = reshape(A,1,n*n);
endfor
endfor
R= Q\(b') * det(Q);# Solving eqn Qx+b=0
X=reshape(R,n,n)';
ret = mod(round(X),2);# Simplifying matrix by taking mod2
return;
endfunction
clear;
function result = final_state_3(mat,action) # It operates Matrix mat with action
for i = 1:3
for j = 1:3
if (action(i,j) == 1)
mat = press(mat,i,j); # Calls press
endif
endfor
endfor
result = mat;
return;
endfunction
function result = generate(n,m)#generates the adjency matrix
temp = zeros(n*m);
for i = 1:n
for j = 1:m
temp(:,j + (i - 1) * m) = reshape(((press(zeros(n,m),i,j)))',n*m,1);
endfor
endfor
result = temp;
return;
endfunction
180.0 100 0.05 5 3.5
\ No newline at end of file
76.63 27 0.027 0.0555 7 5 3.5 5
\ No newline at end of file
0.0 0.0 76.63 27 0.1 0.027 0.0555 7 10 3.5 5 3.0 0.0
\ No newline at end of file
global var = load('input_outlab_task_A1.txt')#reading values from input file
function ret = eqnset1(i)
global var;
x1 = var(1); #assigning of diiferent input variables
y1 = var(2);
d = var(3);
w = var(4);
u = var(5);
ret = ((y1-w)*tan(i))+(w*sin(i)/(sqrt(u^2-(sin(i))^2))) - x1; #equation to find root
return;
endfunction
x0=[0.000001,pi/2];#expected root to be present in this range
ret1 = fzero(@eqnset1,x0);#finding zero
ret1 = ret1*180/pi;#converting to degree
fid = fopen('output_outlab_task_A1.txt','w');
fprintf(fid,'%f',ret1);
fclose(fid);
clear;
global var = load('input_outlab_task_A2.txt');#reading from input file
global final_co=[0,0];#final co-ordinates X-wing
global final_co;
function ret = eqnset2(i)
global var;
global final_co;#intialising variables
x1 = var(1);
y1 = var(2);
v2 = var(3);
vls = var(4);
d = var(5);
w = var(6);
u = var(7);
t1 = var(8); # formula born from physics
t2 = (vls * cos(i) / ( vls * cos(i) - v2)) * (((y1 - (w )) /(vls * cos(i))) + (u * u * w /((sqrt(u^2 - sin(i)^2)) * vls )) + (v2 * t1 /(vls * cos(i))));
y1f = y1+v2*t1+v2*t2; #updated value of final y co-ordinates of X-wing
final_co=[x1,y1f];
ret = ((y1-w -d)*tan(i))+(w*sin(i)/(sqrt(u^2-(sin(i))^2))) + (y1f - y1 + d)*tan(i) - x1;#final func to solve
endfunction
x0= pi/4;
ret1 = fsolve(@eqnset2,x0);#finding root with x0 as intial value
ret1 = ret1*180/pi; #angle in radian
fid = fopen('output_outlab_task_A2.txt' ,'w');
fprintf(fid,'%f %f %f',ret1, final_co(1), final_co(2));
fclose(fid);
clear;
\ No newline at end of file
70.625633
\ No newline at end of file
41.070191 76.630000 91.838433
\ No newline at end of file
function res1 = press(mat,n,m) # Simulates the pressing of button (n,m) on the mat
mat(n,m) = !(mat(n,m));
if(n+1<=size(mat)(1)), # Checking boundary conditions and inverting the bulbs
mat(n+1,m) = !(mat(n+1,m));
endif
if(n-1>=1 ),
mat(n-1,m) = !(mat(n-1,m));
endif
if(m+1<=size(mat)(2)),
mat(n,m+1) = !(mat(n,m+1));
endif
if(m-1>=1),
mat(n,m-1) = !(mat(n,m-1));
endif
res1=mat;
return;
endfunction
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment