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

Please translate this code to C (Wave.c) public class Wave { public static doubl

ID: 3890125 • Letter: P

Question

Please translate this code to C (Wave.c)

public class Wave {


   public static double [] linspace(double min, double max, int n) {
       int i;
       double [] array = new double[n];
       double step = (max-min)/(double)(n-1);
       array[0] = min;
       for(i=1;i<n-1;i++)
           array[i] = min+(double)i*step;
       array[n-1]=max;
       return array;
   }

   public static double [] zeros(int n) {
       int i;
       double [] array = new double[n];
       for(i=0;i<n;i++)
           array[i] = 0.0;
       return array;
   }

   public static void main(String [] args) {
       int n=500;
       double [] x = linspace(0,10,n);
       double [] A = zeros(n);
       double [] V = zeros(n);
       double [] dVdt = zeros(n);
       double dx = x[1]-x[0];
       double dxsquared = dx*dx;
       int nt=100000;
       double [] tgrid = linspace(0,10,nt);
       double dt = tgrid[1]- tgrid[0];
       int i,it;

       for(i=0;i<n;i++) {
           A[i] = Math.exp(-(x[i]-5.0)*(x[i]-5.0));
       }

       for(it=0;it<nt;it++) {
           // do some stuff here!!


       for(i=1;i<n-1;i++) {
           dVdt[i]=(A[i+1]+A[i-1]-2.0*A[i])/dxsquared;
       }
       for(i=0;i<n;i++) {
           A[i]=A[i]+V[i]*dt;
       }
       for(i=0;i<n;i++) {
           V[i]=V[i]+dVdt[i]*dt;
       }
   }
   for(i=0;i<n;i++) {
           System.out.printf("%g %g ",x[i],A[i]);

   }
}
}

Explanation / Answer

Equivalend Code in C, Changes have been highlighted with bold text

#include <stdio.h>

double* linspace(double min, double max, int n) {

int i;

double* array = (double *) malloc(sizeof(double)*n);

double step = (max - min) / (double)(n - 1);

array[0] = min;

for (i = 1; i<n - 1; i++)

array[i] = min + (double)i*step;

array[n - 1] = max;

return array;

}

double* zeros(int n) {

int i;

double* array = (double *)malloc(sizeof(double)*n);

for (i = 0; i<n; i++)

array[i] = 0.0;

return array;

}

void main() {

int n = 500;

double* x = linspace(0, 10, n);

double* A = zeros(n);

double* V = zeros(n);

double* dVdt = zeros(n);

double dx = x[1] - x[0];

double dxsquared = dx*dx;

int nt = 100000;

double* tgrid = linspace(0, 10, nt);

double dt = tgrid[1] - tgrid[0];

int i, it;

for (i = 0; i<n; i++) {

A[i] = exp(-(x[i] - 5.0)*(x[i] - 5.0));

}

for (it = 0; it<nt; it++) {

// do some stuff here!!

for (i = 1; i<n - 1; i++) {

dVdt[i] = (A[i + 1] + A[i - 1] - 2.0*A[i]) / dxsquared;

}

for (i = 0; i<n; i++) {

A[i] = A[i] + V[i] * dt;

}

for (i = 0; i<n; i++) {

V[i] = V[i] + dVdt[i] * dt;

}

}

for (i = 0; i<n; i++) {

printf("%lf %lf ", x[i], A[i]);

}

}