Study Work 3
Task 3.1
a)
Java Codes:
Main Class
public class MainNRM {
public static void main(String[] args){
Vector r0 = new Vector(0, 0.1);
Vector u0 = new Vector(0, 0);
double lamda=0;
double deltaLamda = 0.1;
double s=0.1;
double epsilon = 0.0001;
int controlStep = 2;
int maxIteration =500;
NewtonRaphson nrm= new NewtonRaphson(u0, r0, controlStep, maxIteration,
epsilon, lamda, deltaLamda);
nrm.operate();
//ArcControl acm= new ArcControl(u0, r0, controlStep, maxIteration,
epsilon, lamda, s);
//acm.operate();
}
}
u vector = "+u.get(0)+",
"+u.get(1));
InternalForceVector r = new
InternalForceVector(u.get(0),u.get(1));
Vector ri = new Vector(r.r1(),r.r2());
System.out.println("
internal force vector =
"+ri.get(0)+", "+ri.get(1));
Vector temp = (r0.multiply(lamda)).add(-1,ri);
System.out.println("
temp"+temp.get(0)+","+temp.get(1));
KMatrix k = new KMatrix(u.get(0), u.get(1));
Matrix tmat = k.getKmatrix();
tmat.print("K matrix");
Matrix kInverse = tmat.inverse2X2();
Vector deltaU = kInverse.multiply(1,temp);
deltaU.print("deltaU");
Vector newU = u.add(1,deltaU);
newU.print("newU");
Vector differenceU=newU.add(-1,this.u0);
error=deltaU.norm()/differenceU.norm();
System.out.println("
Error = " + error);
u.set(0, newU.get(0));
u.set(1, newU.get(1));
System.out.println("___________________________________________________");
}
if(error>epsilon){
System.out.println("Max. no. of iteration completed");
}else{
System.out.println("Converged");
}
System.out.println("Final u for n = "+ i + " and k = "+ n +" is
"+u.get(0)+", "+u.get(1));
this.u0.set(0,u.get(0));
this.u0.set(1,u.get(1));
}
System.out.println("***************************************************");
}
}
Vector Class
import java.util.Arrays;
public class Vector {
private double[] elements;
public Vector(double... x) {
this.elements = x;
}
public Vector(int n) {
this.elements = new double[n];
}
public int getN() {
return this.elements.length;
}
public void fill(double v) {
Arrays.fill(this.elements, v);
}
public void set(int idx, double v) {
if (idx >= 0 && idx < getN()) {
this.elements[idx] = v;
}
}
Matrix Class
public class Matrix {
private double[][] elements;
public Matrix(int m, int n) {
this.elements = new double[m][n];
}
public Matrix(int m, int n, double... values) {
this(m, n);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
this.set(i, j, values[i * n + j]);
}
}
}
public int getM() {
return this.elements.length;
}
public int getN() {
return this.elements[0].length;
}
public void set(int i, int j, double v) {
this.elements[i][j] = v;
}
public void setRow(int idx, double... values) {
for (int i = 0; i < this.getN(); i++) {
this.set(idx, i, values[i]);
}
}
public double get(int i, int j) {
return this.elements[i][j];
}
public void print(String l) {
int m = getM();
System.out.println(l + " = ");
for (int i = 0; i < m; i++) {
System.out.print("|");
for (int j = 0; j < getN(); j++) {
System.out.printf(" %.6f", get(i, j));
}
System.out.println(" |");
}
}
public Matrix transpose() {
int m = this.getM();
int n = this.getN();
double det=this.elements[0][0]*this.elements[1][1]this.elements[0][1]*this.elements[1][0];
r.set(0,0,this.elements[1][1]/det);
r.set(0,1,this.elements[1][0]/(-det));
r.set(1,0,this.elements[0][1]/(-det));
r.set(1,1,this.elements[0][0]/det);
return r;
}
}
1.5-b+b*b+3*a*a);
-a+2*a*b);
-a+2*a*b);
0.5+a*a-3*b+3*b*b);
}
public Matrix getKmatrix(){
return this.k;
}
}
Results
______________________LOAD CONTROL METHOD__________________________
*******************************************************************
n = 1
___________________________________________________________________
k = 0
u vector = 0.0, 0.0
internal force vector = 0.0, 0.0
temp0.0,0.010000000000000002
K matrix =
| 1.500000 0.000000 |
| 0.000000 0.500000 |
deltaU = ( 0.00000e+00, 0.020000)^T
newU = ( 0.00000e+00, 0.020000)^T
Error = 1.0
_______________________________________________________________
k = 1
u vector = 0.0, 0.020000000000000004
internal force vector = 0.0, 0.009408000000000001
temp0.0,5.920000000000005E-4
K matrix =
| 1.480400 0.000000 |
| 0.000000 0.441200 |
deltaU = ( 0.00000e+00, 0.001342)^T
newU = ( 0.00000e+00, 0.021342)^T
Error = 0.06287170773152086
_______________________________________________________________
k = 2
u vector = 0.0, 0.02134179510426111
internal force vector = 0.0, 0.00999740981948021
temp0.0,2.590180519792054E-6
K matrix =
| 1.479114 0.000000 |
| 0.000000 0.437341 |
deltaU = ( 0.00000e+00, 0.000006)^T
newU = ( 0.00000e+00, 0.021348)^T
Error = 2.7743315296950577E-4
_______________________________________________________________
k = 3
u vector = 0.0, 0.02134771766888269
internal force vector = 0.0, 0.009999999949630856
temp0.0,5.036914635381251E-11
K matrix =
| 1.479108 0.000000 |
| 0.000000 0.437324 |
deltaU = ( 0.00000e+00, 0.000000)^T
newU = ( 0.00000e+00, 0.021348)^T
Error = 5.395228019081785E-9
_______________________________________________________________
Converged
Final u for n = 1 and k = 3 is 0.0, 0.021347717784058497
______________________LOAD CONTROL METHOD__________________________
*******************************************************************
n = 2
___________________________________________________________________
k = 0
u vector = 0.0, 0.021347717784058497
internal force vector = 0.0, 0.010000000000000004
temp0.0,0.01
K matrix =
| 1.479108 0.000000 |
| 0.000000 0.437324 |
deltaU = ( 0.00000e+00, 0.022866)^T
newU = ( 0.00000e+00, 0.044214)^T
Error = 1.0
_______________________________________________________________
k = 1
u vector = 0.0, 0.04421405830332751
internal force vector = 0.0, 0.019261138032989126
temp0.0,7.38861967010878E-4
K matrix =
| 1.457741 0.000000 |
| 0.000000 0.373222 |
deltaU = ( 0.00000e+00, 0.001980)^T
newU = ( 0.00000e+00, 0.046194)^T
Error = 0.0796780400806182
_______________________________________________________________
k = 2
u vector = 0.0, 0.046193740714199225
internal force vector = 0.0, 0.019994648888563574
temp0.0,5.351111436430189E-6
K matrix =
| 1.455940 0.000000 |
| 0.000000 0.367820 |
deltaU = ( 0.00000e+00, 0.000015)^T
newU = ( 0.00000e+00, 0.046208)^T
Error = 5.851903093431454E-4
_______________________________________________________________
k = 3
u vector = 0.0, 0.04620828887948901
internal force vector = 0.0, 0.01999999971186001
temp0.0,2.8813999450316707E-10
K matrix =
| 1.455927 0.000000 |
| 0.000000 0.367781 |
deltaU = ( 0.00000e+00, 0.000000)^T
newU = ( 0.00000e+00, 0.046208)^T
Error = 3.151399293281078E-8
_______________________________________________________________
Converged
Final u for n = 2 and k = 3 is 0.0, 0.04620828966294489
******************************************************************
*****************************************
b)
Java Codes:
Vector Class, Matrix Class, Class for internal force vector and
stiffness matrix are same as for load controlled NRM
Main Class
public class MainNRM {
public static void main(String[] args){
Vector r0 = new Vector(0, 0.1);
Vector u0 = new Vector(0, 0);
double lamda=0;
double deltaLamda = 0.1;
double s=0.1;
double epsilon = 0.0001;
int controlStep = 2;
int maxIteration =500;
//NewtonRaphson nrm= new NewtonRaphson(u0, r0, controlStep,
maxIteration, epsilon, lamda, deltaLamda);
//nrm.operate();
ArcControl acm= new ArcControl(u0, r0, controlStep, maxIteration,
epsilon, lamda, s);
acm.operate();
}
}
this.u.set(0, u0.get(0));
this.u.set(1, u0.get(1));
this.r0=r0;
this.controlStep=controlStep+1;
this.maxIteration=maxIteration;
this.epsilon=epsilon;
this.lamda=lamda;
this.s=s;
}
public void operate(){
Vector newU;
//double lamda0=lamda;
//Vector A=new Vector(0,0);
//double B=0;
Vector C=new Vector(0,0);
for(int n=1;n<controlStep;n++){
System.out.println("______________________ARC CONTROL
METHOD__________________________");
System.out.println("**********************************************************
********");
System.out.println("
n = "+n);
System.out.println("__________________________________________________________
____");
int k = -1;
error = Double.MAX_VALUE;
while(error>epsilon && k<maxIteration){
//K step
k++;
System.out.println("
k = "+k);
System.out.println("
u vector = "+u.get(0)+",
"+u.get(1));
InternalForceVector r = new
InternalForceVector(u.get(0),u.get(1));
Vector ri = new Vector(r.r1(),r.r2());
System.out.println("
internal force vector =
"+ri.get(0)+", "+ri.get(1));
KMatrix kmat = new KMatrix(u.get(0), u.get(1));
Matrix tmat = kmat.getKmatrix();
tmat.print("K matrix");
Matrix kInverse = tmat.inverse2X2();
Vector delULamda =kInverse.multiply(1, r0);
delULamda.print("DelULamda vector");
double deltaLamda;
Vector delU;
if(k==0){
error=delU.norm()/differenceU.norm();
System.out.println("
System.out.println("_________________________________________________________"
);
}
if(error>epsilon){
System.out.println("Max. no. of iteration completed");
}else{
System.out.println("Converged");
}
this.u0.set(0,u.get(0));
this.u0.set(1,u.get(1));
//lamda0=lamda;
System.out.println("Final u for n = "+ n + " and k = "+ k +" is
"+u.get(0)+", "+u.get(1));
System.out.println("*********************************************************"
);
}
}
}
Results
______________________ARC CONTROL METHOD__________________________
******************************************************************
n = 1
______________________________________________________________
k = 0
u vector = 0.0, 0.0
internal force vector = 0.0, 0.0
K matrix =
| 1.500000 0.000000 |
| 0.000000 0.500000 |
DelULamda vector = ( 0.00000e+00, 0.200000)^T
s0 = 1.019803902718557
delU Vector = ( 0.00000e+00, 0.019612)^T
delta lamda = 0.09805806756909201
newU = ( 0.00000e+00, 0.019612)^T
new lamda = 0.09805806756909201
Error = 1.0
_________________________________________________________
k = 1
u vector = 0.0, 0.019611613513818404
internal force vector = 0.0, 0.00923642660826067
K matrix =
| 1.480773 0.000000 |
| 0.000000 0.442319 |
Converged
Final u for n = 1 and k = 3 is 0.0, 0.02084095954109111
*********************************************************
______________________ARC CONTROL METHOD__________________________
******************************************************************
n = 2
______________________________________________________________
k = 0
u vector = 0.0, 0.02084095954109111
internal force vector = 0.0, 0.00977801355761923
K matrix =
| 1.479593 0.000000 |
| 0.000000 0.438780 |
DelULamda vector = ( 0.00000e+00, 0.227905)^T
s0 = 1.0256415015149642
delU Vector = ( 0.00000e+00, 0.022221)^T
delta lamda = 0.0974999547622547
newU = ( 0.00000e+00, 0.043062)^T
new lamda = 0.195280090338447
Error = 1.0
_________________________________________________________
k = 1
u vector = 0.0, 0.0430616440795631
Converged
Final u for n = 2 and k = 3 is 0.0, 0.04480619617054905
*********************************************************