Advertisement
Guest User

Untitled

a guest
Jul 24th, 2020
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. inline double
  4. _bspline_ ( int i, int m, double t, double *u )
  5. {
  6. register double b1, b2;
  7. if ( m == 1 )
  8. return 1.0/( u[i]-u[i-1] );
  9.  
  10. b1 = ( t >= u[i-m] && t < u[i-1] ) ? ( t-u[i-m] ) *_bspline_ ( i-1,m-1, t, u) : 0.0;
  11. b2 = ( t >= u[i-m+1] && t < u[i] ) ? ( u[i]-t ) *_bspline_ ( i,m-1,t, u ) : 0.0;
  12. return ( b1+b2 ) / ( u[i]-u[i-m] );
  13. }
  14.  
  15. inline double
  16. _derivative_ ( int k, int i, int m, double t, double *u )
  17. {
  18. register double d1, d2;
  19. if ( k >= m )
  20. return 0.0;
  21. if ( t < u[i-m] || t >= u[i] )
  22. return 0.0;
  23. if ( k == 0 )
  24. return _bspline_ ( i, m, t, u);
  25.  
  26. d1 = ( t >= u[i-m] && t < u[i-1] ) ? k*_derivative_ ( k-1,i-1,m-1,t, u ) +
  27. ( t-u[i-m] ) *_derivative_ ( k,i-1,m-1,t, u ) : 0.0;
  28.  
  29. d2 = ( t >= u[i-m+1] && t < u[i] ) ? -k*_derivative_ ( k-1,i,m-1,t, u ) +
  30. ( u[i]-t ) *_derivative_ ( k,i,m-1,t, u ) : 0.0;
  31.  
  32. return ( d1+d2 )/( u[i]-u[i-m] );
  33. }
  34.  
  35. int main(int argc, char **argv)
  36. {
  37. int number_of_nodes = 11;
  38. long int grid_size = 10000000;
  39. double u, du;
  40. double u_min, u_max;
  41.  
  42. double nodes[11];
  43.  
  44. u_min = 0.0;
  45. u_max = 1.0;
  46.  
  47. du = (u_max - u_min)/(number_of_nodes-1);
  48.  
  49. for (int i = 0; i < number_of_nodes; ++i) {
  50. nodes[i] = u_min + du*i;
  51. }
  52.  
  53. du = (u_max - u_min)/(grid_size-1);
  54. printf("%e\n", du);
  55. for (long int i = 0; i < grid_size; ++i) {
  56. u = u_min + du*i;
  57. _bspline_(4, 4, u, nodes);
  58. }
  59.  
  60. return 0;
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement