Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Can some help finish the code? It is a two ball system. The two balls moving in

ID: 3581953 • Letter: C

Question

Can some help finish the code? It is a two ball system.

The two balls moving in reespons to gravity. m1 is directly under m2. The finished code is suppose to have m1 hit the floor and then m1 and m2 hitting each other. NOTE: A Chaotic Mechanical System.

This is what I have so far. It does not run but again not finished. First error is line 113 if copied and pasted.

# include <iostream>
# include <fstream>
# include <math.h>
# include <iomanip>

using namespace std;

int main(){

ofstream outputfile1("ProjectileMotion_Euler_wArrays_output.dat");

double Pi = acos(-1.);
double Deg2Rad = Pi/180.0;
double littleG = 9.8;

const int Ndim = 2;
const int Npoints = 20;
const int Narray = 21;

double tMin = 0.;
double tMax = 40.;
double tStep = (tMax - tMin)/Npoints;

double Mass1 = 80.;
double Mass2 = 40.;

double V1zero = 100.;
double Y1zero = 0.;
double V2zero = 70.;
double Y2zero = 0.;

double angle = 90. * Deg2Rad;
double Vzero1 = V1zero * cos(angle);
double Vzero2 = V2zero * sin(angle);
double Yzero1 = 0.;
double Yzero2 = 0.;

double Fgravity1 = Mass1 * littleG;
double Fgravity2 = Mass2 * littleG;

double eulerT[Narray];
double eulerF1[Narray];
double eulerF2[Narray];
double A1[Narray];
double A2[Narray];
double V1[Narray];
double V2[Narray];

double Y1[Narray];
double Y2[Narray];

double KE1[Narray];
double KE2[Narray];
double PE1[Narray];
double PE2[Narray];
double ME1[Narray];
double ME2[Narray];

    eulerF1[0] = - Fgravity1;
eulerF2[0] = - Fgravity2;

A1[0] = eulerF1[0]/Mass1;
A2[0] = eulerF2[0]/Mass2;
V1[0] = Vzero1;
V2[0] = Vzero2;

Y1[0] = Yzero1;
Y2[0] = Yzero2;

KE1[0] = (1./2.) * Mass1 * V1[0]*V1[0];
KE2[0] = (1./2.) * Mass2 * V2[0]*V2[0];
PE1[0] = Mass1*littleG*Y1[0];
PE2[0] = Mass2*littleG*Y2[0];
ME1[0] = PE1[0] + KE1[0];
ME2[0] = PE2[0] + KE2[0];
eulerT[0] = tMin;

for(int n = 1; n<=Npoints; n+=1){
  
   eulerT[n] = tMin +(n)*tStep;
   
   eulerF1[n] = - Fgravity1;
   eulerF2[n] = - Fgravity2;
   
   A1[n] = eulerF1[n]/Mass1;
   A2[n] = eulerF2[n]/Mass2;
   
   V1[n] = V1[n-1] + A1[n] *tStep;
   V2[n] = V2[n-1] + A2[n] *tStep;
   
//  X[n] = X[n-1] + Vx[n] *tStep;
   
   Y1[n] = Y1[n-1] + V1[n] *tStep;
   Y2[n] = Y2[n-1] + V2[n] *tStep;
   
//  Vx[n] = Vx[0] + Ax[0] * eulerT[n];
//  Vy[n] = Vy[0] + Ay[0] * eulerT[n];
   
//  X[n] = X[0] + Vx[0] *eulerT[n] + 1./2.*Ax[0]*eulerT[n]*eulerT[n];
//  Y[n] = Y[0] + Vy[0] *eulerT[n] + 1./2.*Ay[0]*eulerT[n]*eulerT[n];
  
   
   
//  V[n] = sqrt(Vx[n]*Vx[n] + Vy[n]*Vy[n]);
   
   KE1[n] = (1./2.) * Mass1 * V1[n]*V1[n];
   KE2[n] = (1./2.) * Mass2 * V2[n]*V2[n];
   PE1[n] = Mass1*littleG*Y1[n];
   PE2[n] = Mass2*littleG*Y2[n];
   ME1[n] = PE1[n] + KE1[n];
   ME2[n] = PE2[n] + KE2[n];
   
    if (Y1 > 0.) { V1 = + }
///have 'then' statement to what it would be... boundary conditionand then outcome///
    if (Y2 < 0.) {xspeed = -xspeed; }
  
  
  
  
for (int nn = 0; nn<=Npoints; nn+=1){
    
cout << setw(15)<< nn << setw(15)<< eulerT[nn]<<setw(15)<<V1[nn]<<setw(15)<<V2[nn]<<setw(15)<<Y1[nn]<<setw(15)<<Y2[nn]<<setw(15    )<<KE1[nn]<<setw(15)<<KE2[nn]<<setw(15)
   <<PE1[nn]<<setw(15)<<PE2[nn]<< setw(15)<<ME1[nn]<<setw(15)<<ME2[nn]<<setw(15)<<eulerF1[nn]<<setw(15)<<eulerF2[nn]<<setw(15)<<A1[nn]<<setw(15)<<A2[nn]<<setw(15)<<" n eulerT V1 V2 Y1 Y2 KE1 KE2 PE1 PE2 ME1 ME2 eulerF1 eulerF2 A1 A2 " <<setw(15)<<endl;
   



outputfile1 << setw(15)<< nn << setw(15)<< eulerT[nn]<<setw(15)<<V1[nn]<<setw(15)<<V2[nn]<<setw(15)<<Y1[nn]<<setw(15)<<Y2[nn]<<setw(15        )<<KE1[nn]<<setw(15)<<KE2[nn]<<setw(15)
   <<PE1[nn]<<setw(15)<<PE2[nn]<< setw(15)<<ME1[nn]<<setw(15)<<ME2[nn]<<setw(15)<<eulerF1[nn]<<setw(15)<<eulerF2[nn]<<setw(15)<<A1[nn]<<setw(15)<<A2[nn]<<setw(15)<<" n eulerT V1 V2 Y1 Y2 KE1 KE2 PE1 PE2 ME1 ME2 eulerF1 eulerF2 A1 A2 " <<setw(15)<<endl;
}

TCanvas * c1 = new TCanvas("c1","eulerT vs. Y1",200,10,700,500);

c1->SetFillColor(42);
c1->SetGrid();

gr = new TGraph(Narray,eulerT,Y1);
gr->SetLineColor(2);
gr->SetLineWidth(4);
gr->SetMarkerColor(4);
gr->SetMarkerStyle(21);
gr->SetTitle("a simple graph");
gr->GetXaxis()->SetTitle("eulerT");
gr->GetYaxis()->SetTitle("Y1");
gr->Draw("ACP");

c1->Update();
c1->GetFrame()->SetFillColor(21);
c1->GetFrame()->SetBorderSize(12);
c1->Modified();

TCanvas * c2 = new TCanvas("c2","eulerT vs. Y2",200,10,700,500);

c2->SetFillColor(42);
c2->SetGrid();

gr2 = new TGraph(Narray,eulerT,Y2);
gr2->SetLineColor(2);
gr2->SetLineWidth(4);
gr2->SetMarkerColor(4);
gr2->SetMarkerStyle(21);
gr2->SetTitle("a simple graph");
gr2->GetXaxis()->SetTitle("eulerT");
gr2->GetYaxis()->SetTitle("Y2");
gr2->Draw("ACP");

c2->Update();
c2->GetFrame()->SetFillColor(21);
c2->GetFrame()->SetBorderSize(12);
c2->Modified();


return 0;
}

Explanation / Answer

Please find below the modified program:

# include <fstream>
# include <iostream>
# include <math.h>
# include <iomanip>

using namespace std;

int main(){

ofstream outputfile1("ProjectileMotion_Euler_wArrays_output.dat");

double Pi = acos(-1.);
double Deg2Rad = Pi/180.0;
double littleG = 9.8;

const int Ndim = 2;
const int Npoints = 20;
const int Narray = 21;

double tMin = 0.;
double tMax = 40.;
double tStep = (tMax - tMin)/Npoints;

double Mass1 = 80.;
double Mass2 = 40.;

double V1zero = 100.;
double Y1zero = 0.;
double V2zero = 70.;
double Y2zero = 0.;

double angle = 90. * Deg2Rad;
double Vzero1 = V1zero * cos(angle);
double Vzero2 = V2zero * sin(angle);
double Yzero1 = 0.;
double Yzero2 = 0.;

double Fgravity1 = Mass1 * littleG;
double Fgravity2 = Mass2 * littleG;

double eulerT[Narray];
double eulerF1[Narray];
double eulerF2[Narray];
double A1[Narray];
double A2[Narray];
double V1[Narray];
double V2[Narray];

double Y1[Narray];
double Y2[Narray];

double KE1[Narray];
double KE2[Narray];
double PE1[Narray];
double PE2[Narray];
double ME1[Narray];
double ME2[Narray];

eulerF1[0] = - Fgravity1;
eulerF2[0] = - Fgravity2;

A1[0] = eulerF1[0]/Mass1;
A2[0] = eulerF2[0]/Mass2;
V1[0] = Vzero1;
V2[0] = Vzero2;

Y1[0] = Yzero1;
Y2[0] = Yzero2;

KE1[0] = (1./2.) * Mass1 * V1[0]*V1[0];
KE2[0] = (1./2.) * Mass2 * V2[0]*V2[0];
PE1[0] = Mass1*littleG*Y1[0];
PE2[0] = Mass2*littleG*Y2[0];
ME1[0] = PE1[0] + KE1[0];
ME2[0] = PE2[0] + KE2[0];
eulerT[0] = tMin;

for(int n = 1; n<=Npoints; n+=1){

eulerT[n] = tMin +(n)*tStep;

eulerF1[n] = - Fgravity1;
eulerF2[n] = - Fgravity2;

A1[n] = eulerF1[n]/Mass1;
A2[n] = eulerF2[n]/Mass2;

V1[n] = V1[n-1] + A1[n] *tStep;
V2[n] = V2[n-1] + A2[n] *tStep;

// X[n] = X[n-1] + Vx[n] *tStep;

Y1[n] = Y1[n-1] + V1[n] *tStep;
Y2[n] = Y2[n-1] + V2[n] *tStep;

// Vx[n] = Vx[0] + Ax[0] * eulerT[n];
// Vy[n] = Vy[0] + Ay[0] * eulerT[n];

// X[n] = X[0] + Vx[0] *eulerT[n] + 1./2.*Ax[0]*eulerT[n]*eulerT[n];
// Y[n] = Y[0] + Vy[0] *eulerT[n] + 1./2.*Ay[0]*eulerT[n]*eulerT[n];

// V[n] = sqrt(Vx[n]*Vx[n] + Vy[n]*Vy[n]);

KE1[n] = (1./2.) * Mass1 * V1[n]*V1[n];
KE2[n] = (1./2.) * Mass2 * V2[n]*V2[n];
PE1[n] = Mass1*littleG*Y1[n];
PE2[n] = Mass2*littleG*Y2[n];
ME1[n] = PE1[n] + KE1[n];
ME2[n] = PE2[n] + KE2[n];

if (Y1 > 0.) { V1 = + }
///have 'then' statement to what it would be... boundary condition and then outcome///
if (Y2 < 0.) {xspeed = -xspeed; }

for (int nn = 0; nn<=Npoints; nn+=1){

cout << setw(15)<< nn << setw(15)<< eulerT[nn]<<setw(15)<<V1[nn]<<setw(15)<<V2[nn]<<setw(15)<<Y1[nn]<<setw(15)<<Y2[nn]<<setw(15)<<KE1[nn]<<setw(15)<<KE2[nn]<<setw(15) <<PE1[nn]<<setw(15)<<PE2[nn]<<setw(15)<<ME1[nn]<<setw(15)<<ME2[nn]<<setw(15)<<eulerF1[nn]<<setw(15)<<eulerF2[nn]<<setw(15)<<A1[nn]<<setw(15)<<A2[nn]<<setw(15)<<" n eulerT V1 V2 Y1 Y2 KE1 KE2 PE1 PE2 ME1 ME2 eulerF1 eulerF2 A1 A2 " <<setw(15)<<endl;

outputfile1 << setw(15)<< nn << setw(15)<< eulerT[nn]<<setw(15)<<V1[nn]<<setw(15)<<V2[nn]<<setw(15)<<Y1[nn]<<setw(15)<<Y2[nn]<<setw(15)<<KE1[nn]<<setw(15)<<KE2[nn]<<setw(15)<<PE1[nn]<<setw(15)<<PE2[nn]<<setw(15)<<ME1[nn]<<setw(15)<<ME2[nn]<<setw(15)<<eulerF1[nn]<<setw(15)<<eulerF2[nn]<<setw(15)<<A1[nn]<<setw(15)<<A2[nn]<<setw(15)<<" n eulerT V1 V2 Y1 Y2 KE1 KE2 PE1 PE2 ME1 ME2 eulerF1 eulerF2 A1 A2 " <<setw(15)<<endl;
}

TCanvas * c1 = new TCanvas("c1","eulerT vs. Y1",200,10,700,500);

c1->SetFillColor(42);
c1->SetGrid();

gr = new TGraph(Narray,eulerT,Y1);
gr->SetLineColor(2);
gr->SetLineWidth(4);
gr->SetMarkerColor(4);
gr->SetMarkerStyle(21);
gr->SetTitle("a simple graph");
gr->GetXaxis()->SetTitle("eulerT");
gr->GetYaxis()->SetTitle("Y1");
gr->Draw("ACP");

c1->Update();
c1->GetFrame()->SetFillColor(21);
c1->GetFrame()->SetBorderSize(12);
c1->Modified();

TCanvas * c2 = new TCanvas("c2","eulerT vs. Y2",200,10,700,500);

c2->SetFillColor(42);
c2->SetGrid();

gr2 = new TGraph(Narray,eulerT,Y2);
gr2->SetLineColor(2);
gr2->SetLineWidth(4);
gr2->SetMarkerColor(4);
gr2->SetMarkerStyle(21);
gr2->SetTitle("a simple graph");
gr2->GetXaxis()->SetTitle("eulerT");
gr2->GetYaxis()->SetTitle("Y2");
gr2->Draw("ACP");

c2->Update();
c2->GetFrame()->SetFillColor(21);
c2->GetFrame()->SetBorderSize(12);
c2->Modified();

return 0;
}
}