Tutorial: Differentiation

Tutorial: Differentiation

Ploblem

Estimate the velocity and acceleration from datasets of the position of an object.

t = 0:0.2:4;
y = [-5.87 -4.23 -2.55 -0.89 0.67 2.09 3.31 4.31 5.06 5.55 5.78 5.77 5.52 5.08 4.46 3.72 2.88 2.00 1.10 0.23 -0.59];

Tutorial: MATLAB

Example code

% asusume evenly spaced h
h=0.2;
vel = diff(y)./h;
tv=t(1:length(vel));
acc = diff(y,2)./h^2;
ta=t(1:length(acc));

Exercise (25 min)

Download the tutorial source file and fill in the blanks.

Run the code and validate your answer


Tutorial: C-Programming

Create a new folder under \tutorial Directory and name it as differentiation

  • e.g ) C:\Users\yourID\source\repos\NP\tutorial\TU_differentiation

Create a new empty project in Visual Studio Community. Name the project as TU_Differentiation

Create a new C/C++ source file for main()

  • Name the source file as TU_Differentiation_main.cpp

Paste from the following code

TU_differentiation_student.cpp
/*------------------------------------------------------------------------------\
@ Numerical Methods by Young-Keun Kim - Handong Global University

Author          : Young-Keun Kim
Created         : 01-04-2019
Modified        : 11-27-2023
Language/ver	: C in MSVS2017
Course		: Numerical Programming

Description      : [Tutorial]Differentiation.cpp
-------------------------------------------------------------------------------*/

#include "stdio.h"
#include "stdlib.h"

#include "../../include/myNP.h"
//#include "../../include/myNP_myID.h"

double myFunc(const double x);


int main(int argc, char* argv[])
{

	/*==========================================================================*/
	/*   Part 1 -     Differentiation from discrete dataset points              */
	/*==========================================================================*/

	printf("\n**************************************************");
	printf("\n|                     PART 1.                    |");
	printf("\n**************************************************\n");

	/************      Variables declaration & initialization      ************/
	int m = 21;
	double t[21] = { 0 };
	for (int i = 0; i < m; i++) t[i] = 0.2 * i;

	double x[] = { -5.87, -4.23, -2.55, -0.89, 0.67, 2.09, 3.31, 4.31, 5.06, 5.55, 5.78, 5.77, 5.52, 5.08, 4.46, 3.72, 2.88, 2.00, 1.10, 0.23, -0.59 };
	double  dxdt[21] = { 0 };

	/************      Solve  &	Show Output	   ************/
	// Differentiation from discrete dataset points
	
	// [YOUR CODE GOES HERE]
	// gradient1D(t, x, dxdt, m);
	// printVec(dxdt, m);

	

	/*==========================================================================*/
	/*   Part 2 -     Differentiation from a function                           */
	/*==========================================================================*/

	
	printf("\n**************************************************");
	printf("\n|                     PART 2.                    |");
	printf("\n**************************************************\n");

	/************      Variables declaration & initialization      ************/
	double xin = 2.5;
	double dydx[21] = { 0 };  // m=21 points

	// User defined function F(x)
	double y = myFunc(xin);
	printf("\n y=myFun(xin) = %f \n\n", y);


	/************      Solve  &	Show Output	   ************/
	// Estimate differentiation from the user defined function 
	
	// [YOUR CODE GOES HERE]
	// gradientFunc(myFunc, t, dydx, m);
	// printVec(dydx, m);


	system("pause");
	return 0;
}


// User defined function:  example  y=x*x
// Modify to User Function
double myFunc(const double x) {
	return  x * x;
}

Exercise 1 : Differentiation from Discrete Points (25 min)

Create a C-program function for numerical differentiation from a set of discrete data. Read the instruction in the source code.

For m dataset, x[0] to x[m-1]

  • 2-Point forward difference: for the first point x[0] to [m-2]

  • 2-Point backward difference: for the last point x[m-1]

void gradient1D(double _x[], double _y[], double dydx[], int m);

The gradient1D function should be defined in your library header files, located in \include folder

  • function definitions: myNP_yourID.h

  • function declaration: myNP_yourID.cpp

Review how to use 1D arrays in C-Programming. See tutorial here

// Example Code using 1D Array

void printVec(double _vec[], int _row);

int main()
{
	// Static 1-D array with fixed array size and initialized
	double a[4] = { 1, 2, 3, 4 };
	// Print 1-D array element
	printVec(a, 4);
	return 0;
}

void printVec(double _vec[], int _row)
{
	for (int i = 0; i<_row; i++)
	  printf("Vector[%d] = %f \n", i, _vec[i]);
}

Exercise 2 : Differentiation from a function (25 min)

Define a function named as myFunc() that defines the user's equation F(x).

For this tutorial, use y=x^3 , for x=0:0.2:4

double myFunc(const double _x);

Create a function named as gradientFunc() that returns the gradient of the user's equation.

  • It should receive myFunc() as the input argument.

  • It generates a discrete dataset of the user's F(x)

  • This function should return a 1D array of dydx[] .

void gradientFunc(double func(const double x), double _x[ ], double dydx[ ], int m);

This function should be defined in your library header files, located in \include folder

  • function definitions: myNP_yourID.h

  • function declaration: myNP_yourID.cpp

Validate the result

Last updated