Advertisement
YauhenMardan

Untitled

Oct 10th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.81 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.math.BigDecimal;
  4. import java.math.RoundingMode;
  5. import java.util.ArrayList;
  6. import java.util.Collections;
  7.  
  8. public class Algorithm {
  9. //steps
  10. private static double t=0.05;
  11. //bounds
  12. private static final double a=3.0;
  13. private static final double b=4.0;
  14. //initial values
  15. private static final double t0=3.0;
  16. private static final double y10=3.0;
  17. private static final double y11=3.1525019829;
  18. private static final double y12=3.3100042804;
  19. private static final double y20=3.0;
  20. private static final double y21=3.1000093976;
  21. private static final double y22=3.2000185502;
  22. //
  23.  
  24. //plases for rounding
  25. private static final int PLASES = 10;
  26.  
  27. //Algorithm
  28. private void doAlgorithm(double t, double num, ArrayList<Double> y1Array, ArrayList<Double> y2Array,ArrayList<Double> tjArray){
  29.  
  30. double y1,y2;
  31.  
  32. y1Array.add(y10);
  33. y1Array.add(y11);
  34. y1Array.add(y12);
  35. y2Array.add(y20);
  36. y2Array.add(y21);
  37. y2Array.add(y22);
  38.  
  39. double tj=t0;
  40. for(int i=0;i<3;i++, tj+=t){
  41. tjArray.add(tj);
  42. }
  43. //
  44. for(int j=2; j<num; j++, tj+=t){ //j=0,19
  45. tjArray.add(tj);
  46. //iteration
  47. y1=y11(y1Array.get(j),y2Array.get(j),y2Array.get(j-1),y2Array.get(j-2));
  48. y2=y21(tjArray.get(j),tjArray.get(j-1),tjArray.get(j-2), y1Array.get(j),y1Array.get(j-1),y1Array.get(j-2),y2Array.get(j),y2Array.get(j-1),y2Array.get(j-2));
  49. //add new elements
  50. y1Array.add(y1);
  51. y2Array.add(y2);
  52. }
  53. }
  54. //////////////////////////////////////// run algorithm
  55. public void run(){
  56. int num=(int)((b-a)/t); //(b-a)/t
  57. ArrayList<Double> y1Array=new ArrayList<>();
  58. ArrayList<Double> y2Array=new ArrayList<>();
  59. ArrayList<Double> tjArray=new ArrayList<>();
  60. doAlgorithm(t,num,y1Array,y2Array,tjArray);
  61.  
  62. //calculate error
  63. ArrayList<Double> y1Error=new ArrayList<>();
  64. ArrayList<Double> y2Error=new ArrayList<>();
  65. calculateError(num,tjArray,y1Array,y2Array,y1Error,y2Error);
  66. double error = Math.max(Collections.max(y1Error),Collections.max(y2Error));
  67.  
  68. //output
  69. print(num,tjArray,y1Array,y2Array, error);
  70.  
  71. }
  72. private void calculateError(int num, ArrayList<Double> tjArray,ArrayList<Double> y1Array,ArrayList<Double> y2Array,ArrayList<Double> y1Error,ArrayList<Double> y2Error){
  73. double tj;
  74. for(int i=0;i<num;i++){
  75. tj=tjArray.get(i);
  76. y1Error.add(round(Math.abs(u(tj)-y1Array.get(i))));
  77. y2Error.add(round(Math.abs(du(tj)-y2Array.get(i))));
  78.  
  79. // System.out.printf("%2s u %14s u'%14s \n",i, round(Math.abs(u(tj)-y1Array.get(i))),round(Math.abs(du(tj)-y2Array.get(i))));
  80. }
  81. }
  82. //////////////////////////////////////// print output
  83. private void print(int num, ArrayList<Double> tjArray,ArrayList<Double> y1Array,ArrayList<Double> y2Array, double error){
  84. System.out.printf("%2s%5s%14s%14s%14s%14s\n","j", "tj","u","u'", "y1", "y2");
  85. double tj;
  86. for(int i=0;i<num;i++){
  87. tj=tjArray.get(i);
  88. System.out.printf("%2s%5s%14s%14s%14s%14s\n",i, round(tj),round(u(tj)),round(du(tj)), round(y1Array.get(i)), round(y2Array.get(i)));
  89. }
  90. System.out.printf("Error is %14s\n",error);
  91. }
  92. //////////////////////////////////////// round
  93. private double round(double value) {
  94. if (PLASES < 0) throw new IllegalArgumentException();
  95.  
  96. BigDecimal bd = new BigDecimal(Double.toString(value));
  97. bd = bd.setScale(PLASES, RoundingMode.HALF_UP);
  98. return bd.doubleValue();
  99. }
  100. //////////////////////////////////////// u(t)
  101. public double u(double t){
  102. return t*t-3.0*t+3.0;
  103. }
  104. //////////////////////////////////////// u'(t)
  105. public double du(double t){
  106. return 2.0*t-3.0;
  107. }
  108. //////////////////////////////////////// y1.j+1,y2.j+1
  109. //y1.j+1=F(y1.j,y2.j,y2.j-1,y2.j-2)
  110. public double y11(double y1a,double y2a,double y2b,double y2c){
  111. return y1a+t/12.0*(23.0*y2a-16.0*y2b+5.0*y2c);
  112. }
  113. //y2.j+1=F(y2.j,q1,q2,q3)
  114. public double y21(double tja,double tjb,double tjc, double y1a, double y1b, double y1c,double y2a,double y2b,double y2c){
  115. return y2a+t/12.0*(23.0*f2(tja, y1a,y2a)-16.0*f2(tjb, y1b,y2b)+5.0*f2(tjc, y1c,y2c));
  116. }
  117. //////////////////////////////////////// f1,f2
  118. //f1=y2.j
  119. public double f1(double y2){
  120. return y2;
  121. }
  122. //f2=...
  123. public double f2(double tj, double y1, double y2){
  124. double numerator=tj+2.0+3.0*(tj-2.0)*y2-4.0*y1;
  125. double denumenator=(tj-2.0)*(tj-2.0);
  126. return numerator/denumenator;
  127. }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement