// *********************************** // ** Centred difference approx. to ** // ** derivative of sin(theta) ** // ** PJM CompII Lab. 2 ** // *********************************** #include #include void Calculate_Derivative(float *, float); int main(void) { float theta=0.0,delta_theta,sin_values[13]; int n; delta_theta=M_PI/3.0; for(n=0;n<13;n++) // sin_values[] holds sines of angles { // between 0 and 4 PI sin_values[n]=sin(theta); theta+=delta_theta; } Calculate_Derivative(sin_values,delta_theta); } // ****************************** // ** Function to calculate ** // ** derivative using centred ** // ** differences ** // ****************************** void Calculate_Derivative(float *sin_array, float delta) { FILE *fp; int index; float deriv_sin_values[13],angle; deriv_sin_values[0]=(sin_array[1]-sin_array[0])/delta; // Forward difference for (index=1;index<12;index++) // Centred differences deriv_sin_values[index]=(sin_array[index+1]-sin_array[index-1])/(2.0*delta); deriv_sin_values[12]=(sin_array[12]-sin_array[11])/delta; // Backward difference // Write values to file fp=fopen("dsin.dat","w"); for (index=0;index<13;index++) { angle=index/3.0; fprintf(fp,"%f,%f \n",angle,deriv_sin_values[index]); } fclose(fp); }