Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. #include "rk4.h"
  2.  
  3. double d1y(double x, double y){
  4. return pow(x,2) + pow(y,2);
  5. }
  6.  
  7. double d2y(double x, double y, double z){
  8. return z;
  9. }
  10.  
  11. double d2z(double x, double y, double z) {
  12. return x-3*z-2*y;
  13. }
  14.  
  15. void rk4_2_variables() {
  16.  
  17. double a = 0, b = 1.4, x = 0, y = 0, result = 0, h = 0.1, n = (abs(b-a)/h);
  18. double d1, d2, d3,d4;
  19.  
  20. for(int i = 0; i < n; i++){
  21. d1 = h*d1y(x, y);
  22. d2 = h*d1y(x + (h/2), y + (d1/2.0));
  23. d3 = h*d1y(x +(h/2.0), y + (d2/2.0));
  24. d4 = h*d1y(x+h, y +d3);
  25. y += (d1/6.0) + (d2/3.0) + (d3/3.0) + (d4/6.0);
  26. x += h;
  27. cout << i << ". x = " << x << "\t y = " << y << endl;
  28. }
  29.  
  30. result = y;
  31.  
  32. cout << endl << "---------" << endl;
  33.  
  34. x = 0, y = 0;
  35. double result1, h1 = h/2.0, n1 = abs(b-a)/h1;
  36.  
  37. for(int i = 0; i < n1; i++){
  38. d1 = h1*d1y(x, y);
  39. d2 = h1*d1y(x + (h1/2), y + (d1/2.0));
  40. d3 = h1*d1y(x +(h1/2.0), y + (d2/2.0));
  41. d4 = h1*d1y(x+h1, y +d3);
  42. y += (d1/6.0) + (d2/3.0) + (d3/3.0) + (d4/6.0);
  43. x += h1;
  44. cout << i << ". x = " << x << "\t y = " << y << endl;
  45. }
  46.  
  47. result1 = y;
  48.  
  49. cout << endl << "---------" << endl;
  50.  
  51. x = 0, y = 0;
  52. double result2, h2 = h1/2.0, n2 = abs(b-a)/h2;
  53.  
  54. for(int i = 0; i < n2; i++){
  55. d1 = h2*d1y(x, y);
  56. d2 = h2*d1y(x + (h2/2), y + (d1/2.0));
  57. d3 = h2*d1y(x +(h2/2.0), y + (d2/2.0));
  58. d4 = h2*d1y(x+h2, y +d3);
  59. y += (d1/6.0) + (d2/3.0) + (d3/3.0) + (d4/6.0);
  60. x += h2;
  61. cout << i << ". x = " << x << "\t y = " << y << endl;
  62. }
  63.  
  64. result2 = y;
  65.  
  66. cout << endl << "---------" << endl;
  67.  
  68. double qc = (result1 - result)/(result2 - result1);
  69.  
  70. cout << "quociente de convergencia = " << qc << endl;
  71.  
  72. double e = result2 - result1;
  73.  
  74. cout << "erro = " << e << endl;
  75. }
  76.  
  77. void rk4_3_variables() {
  78. double a = 0, b = 0.5, x = 0, y = 0, z = 0, result = 0, h = 0.05, n = (abs(b-a)/h);
  79. double dy1, dy2, dy3, dy4, dz1, dz2, dz3, dz4;
  80.  
  81. for(int i = 0; i < n; i++){
  82. dy1 = h*d2y(x, y, z);
  83. dy2 = h*d2y(x + (h/2), y + (dy1/2.0), z + (dy1/2.0));
  84. dy3 = h*d2y(x +(h/2.0), y + (dy2/2.0), z + (dy2/2.0));
  85. dy4 = h*d2y(x+h, y +dy3, z + dy3);
  86.  
  87. dz1 = h*d2z(x, y, z);
  88. dz2 = h*d2z(x + (h/2), y + (dz1/2.0), z + (dz1/2.0));
  89. dz3 = h*d2z(x +(h/2.0), y + (dz2/2.0), z + (dz2/2.0));
  90. dz4 = h*d2z(x+h, y +dz3, z + dz3);
  91.  
  92. y += (dy1/6.0) + (dy2/3.0) + (dy3/3.0) + (dy4/6.0);
  93. z += (dz1/6.0) + (dz2/3.0) + (dz3/3.0) + (dz4/6.0);
  94. x += h;
  95.  
  96.  
  97. cout << i << ". x = " << x << "\t y = " << y << "\t z = " << z << endl;
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement