# Lab 4: Equilibrium Temperature on a rectangular plate
# In the LCB 115 session on Tuesday, we used maple2015, which has laylinalg available.
# It is not required to use laylinalg, for any part of Lab 4. Optionally, it may be
# used in Problem 1.
with(LinearAlgebra):
# Problem 1
C:=Matrix([[0, 1, 1, 0], [1, 0, 0, 1], [1, 0, 0, 1], [0, 1, 1, 0]]); # Copy-and-paste from the Lab 4 PDF.
b:=<40,30,30,20>;
A:=4*Matrix(4,4,shape=identity)-C; # Create matrix A=4I-C
E:=<A|b>; # Create the augmented matrix of A and b
ReducedRowEchelonForm(E); # The answer X for the temperatures x1,x2,x3,x4 is the last column
LinearSolve(A,b); # Alternate method to find answer X to AX=b
# Left to do: use laylinalg or definitions of swap, combo, mult to display the steps arriving at RREF(E)
# combo:=(a,s,t,m)->LinearAlgebra[RowOperation](a,[t,s],m);
# swap:=(a,s,t)->LinearAlgebra[RowOperation](a,[t,s]);
# mult:=(a,t,m)->LinearAlgebra[RowOperation](a,t,m);
# or the LayLinalg definitions
# replace:=(a,t,m,s)->LinearAlgebra[RowOperation](a,[t,s],m);
# swap:=(a,s,t)->LinearAlgebra[RowOperation](a,[t,s]);
# scale:=(a,t,m)->LinearAlgebra[RowOperation](a,t,m);
# Problem 1, row reduction steps
replace:=(a,t,m,s)->LinearAlgebra[RowOperation](a,[t,s],m):
swap:=(a,s,t)->LinearAlgebra[RowOperation](a,[t,s]):
scale:=(a,t,m)->LinearAlgebra[RowOperation](a,t,m):
E;
E1:=swap(E,1,2);
E2:=scale(E1,1,-1);
E3:=replace(E2,2,-4,1);
# Incomplete, please finish the row reduction steps
# Problem 2
Ainverse:=1/A; X:=Ainverse.b; # Solve AX=b by inverses
# Problem 3
b1:=<60,50,30,20>; # Examine the equations, change the numbers in vector b.
X1:=Ainverse.b1; # Find the solution X1 to AX1=b1
# Problem 4
# ?LUDecomposition
P,L,U:=LUDecomposition(A);
# Ignore permutation matrix P, because it is the identity (no variables swapped).
# Solve Ax=b by two equations: Ax=b is LU=b. Then solve Ly=b, then solve Ux=y. Result: x = answer to Ax=b
Y:=(1/L).b;X:=(1/U).Y;
# Problem 5
interface(rtablesize=30): # Make large matrices print normally
C2 := Matrix([ [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0] ] ); # Copy-and-paste from the Lab 4 PDF.
b2 := Vector( [40, 30, 30, 30, 30, 10, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 0, 0, 0, 0, 30, 20, 20, 20, 20] );
A2:=4*Matrix(25,25,shape=identity)-C2;
X2:=(1/A2).b2;
X3:=<X2[7],X2[9],X2[17],X2[19]>; # Extract matching grid point answers, for original X in problem 1.
X4 := Vector(4, {(1) = 35/2, (2) = 15, (3) = 15, (4) = 25/2}); # Answer from problem 1
evalf(norm(X3-X4)); # Compare answers to problem 1 and problem 5
TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQ2NzM0WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjMSIlIiUiIiEiIiJGJ0YmRidGJkYmRidGJ0YmRiZGJ0YmRidGJ0YmRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQ2ODU0WColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIiNTIiNJRiciIz9GJQ==TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQ3OTM0WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjMSIlIiUiIiUhIiJGJyIiIUYnRiZGKEYnRidGKEYmRidGKEYnRidGJkYlTTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQ4MDU0WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjNSIlIiYiIiUhIiJGJyIiIUYnRiZGKEYnRidGKEYmRidGKEYnRidGJiIjUyIjSUYqIiM/RiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQwNDc4WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjNSIlIiYiIiIiIiFGJ0YnRidGJkYnRidGJ0YnRiZGJ0YnRidGJ0YmIyIjTiIiIyIjOkYrIyIjREYqRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQxNDM4WColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIyIjTiIiIyIjOkYpIyIjREYoRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQxNTU4WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjNSIlIiYhIiIiIiVGJiIiIUYnRiZGKEYmRihGJkYnRiZGJkYoRiZGJyIjSSIjU0YpIiM/RiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQxOTE4WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjNSIlIiYiIiIiIiUhIiIiIiEhIiVGKEYpRihGKUYoRidGKEYmRilGKEYnISNJIiNTIiNJIiM/RiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjQyMTU4WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjNSIlIiYiIiIiIiEhIiJGJyEiJSIjOkYnRihGJ0YoIiIlRihGJkYpRihGKyEjSSIkZyIiI0kiIz9GJQ==TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM2NzQyWCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjMSIlIiUjIiIoIiNDIyIiIiIjN0YpI0YqRihGKUYmRixGKUYpRixGJkYpRixGKUYpRiZGJQ==TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM2OTgyWColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIyIjTiIiIyIjOkYpIyIjREYoRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM3MTAyWColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIiNnIiNdIiNJIiM/RiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM3MjIyWColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIiNEIyIjWCIiIyMiI05GKSIjOkYlTTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTc5NjEzMDU0WC8lKWFueXRoaW5nRzYiRiVbZ2wjIiEhISEjKyIlIiUlJSEiIyQlISEhISEhIiMkJSEhISEhISIiIiIhISEhISFGJQ==TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM3ODIyWCwlKWFueXRoaW5nRzYjJiUrdHJpYW5ndWxhckc2IyUmbG93ZXJHNiJbZ2whIikhISEjKyIlIiUiIiIjISIiIiIlRiwiIiFGKyNGLSIjOiMhIiVGMUYrIyEiIyIiKEYrRio=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM4MDYyWCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjMSIlIiUiIiUiIiFGJ0YnISIiIyIjOkYmRidGJ0YoI0YoRiYjIiNjRipGJ0YnRigjISM7RiojIiNDIiIoRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM5NzQyWColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIiNTRiYjIiRHIiIiJCMiJCskIiIoRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM0NDQ2WColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIyIjTiIiIyIjOkYpIyIjREYoRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM0NTY2WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjXGJtIjoiOiIiISIiIkYmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRidGJkYmRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRidGJkYnRiZGJkYmRidGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJ0YmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYmRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJkYmRiZGJkYnRiZGJkYmRidGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYnRiZGJ0YmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRidGJkYmRiZGJ0YmRidGJkYmRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJkYmRidGJkYnRiZGJkYmRidGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYnRiZGJkYmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRidGJkYmRiZGJkYmRidGJkYmRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJkYmRidGJkYnRiZGJkYmRidGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYnRiZGJ0YmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRidGJkYmRiZGJ0YmRidGJkYmRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJkYmRidGJkYmRiZGJkYmRidGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYmRiZGJ0YmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRidGJkYmRiZGJ0YmRidGJkYmRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJkYmRidGJkYnRiZGJkYmRidGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYnRiZGJ0YmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRidGJkYmRiZGJ0YmRiZGJkYmRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJkYmRiZGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYnRiZGJ0YmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRidGJkYmRiZGJ0YmRidGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYnRiZGJkYmRidGJkYnRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJkYmRiZGJ0YmRiZGJkYnRiZGJQ==TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM0Njg2WColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiOiI6IiNTIiNJRidGJ0YnIiM1IiIhRilGKUYpRihGKUYpRilGKUYoRilGKUYpRilGJyIjP0YqRipGKkYlTTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjM1NzY2WCwlKWFueXRoaW5nRzYiRiVbZ2whIiUhISEjXGJtIjoiOiIiJSEiIiIiIUYoRihGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGJkYnRihGKEYoRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYnRiZGJ0YoRihGKEYnRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YmRidGKEYoRihGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGJkYoRihGKEYoRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YoRihGKEYoRiZGJ0YoRihGKEYnRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGKEYoRihGJ0YmRidGKEYoRihGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYnRihGKEYoRidGJkYnRihGKEYoRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YoRihGKEYnRiZGJ0YoRihGKEYnRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGKEYoRihGJ0YmRihGKEYoRihGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYnRihGKEYoRihGJkYnRihGKEYoRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YoRihGKEYnRiZGJ0YoRihGKEYnRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGKEYoRihGJ0YmRidGKEYoRihGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYnRihGKEYoRidGJkYnRihGKEYoRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YoRihGKEYnRiZGKEYoRihGKEYnRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGKEYoRihGKEYmRidGKEYoRihGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYnRihGKEYoRidGJkYnRihGKEYoRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YoRihGKEYnRiZGJ0YoRihGKEYnRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGKEYoRihGJ0YmRidGKEYoRihGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYnRihGKEYoRidGJkYoRihGKEYoRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YoRihGKEYoRiZGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGKEYoRihGJ0YmRidGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYnRihGKEYoRidGJkYnRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGJ0YoRihGKEYnRiZGJ0YoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRihGKEYoRidGKEYoRihGJ0YmRiU=TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjMwNDcwWColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiOiI6IyIlPT4iIyoqIyImaHcmIiV1RCMiJmUiSCIlKEciIyImKj1gRisiIzojIiZeKVFGKyMiJCFlIiNMIyImKGZBRi5GMSMiJkpTI0YrIyImeXMiRi4jIiZGJz5GLkYxIyImOGciRi4jIiVfJSpGLiMiJnpWJEYrRjEjIiYkKSo9Ri4jIiQ1JUY2IyImZiY+RitGMSMiJlRHJUYrIyImSzgjRi4jIiZwJFFGKyMiJV81RihGJQ==TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjMwNTkwWColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIyIkIWUiI0wiIzpGKSMiJDUlRihGJQ==TTdSMApJQVJUQUJMRV9TQVZFLzE4NDQ2ODgzNzI0OTM4MjMwNzEwWColKWFueXRoaW5nRzYiRiVbZ2whIyUhISEiJSIlIyIjTiIiIyIjOkYpIyIjREYoRiU=