Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. #include "integrate.h"
  2. #include "ui_integrate.h"
  3. #include "math.h"
  4. #include <cmath>
  5. #include <time.h>
  6. #include "fact.h"
  7.  
  8. integrate::integrate(QWidget *parent) :
  9. QMainWindow(parent),
  10. ui(new Ui::integrate)
  11. {
  12. ui->setupUi(this);
  13. }
  14.  
  15. integrate::~integrate()
  16. {
  17. delete ui;
  18. }
  19. float answtrapeze=0;
  20. float trapeze(float int1,float int2,int n,float h,float a)
  21. {
  22. float x[n],f[n];
  23. x[0]=a;
  24. f[0]=sin(x[0]);
  25. for(int i=1;i<n+1;i++){
  26. x[i]=x[i-1]+h;//заполняем иксы
  27. f[i]=sin(x[i]);//считаем функцию sin x
  28. }
  29. for(int i=1;i<n;i++)
  30. int2+=f[i];
  31. int2=(int2*2+f[0]+f[n])*h/2;//считаем интеграл
  32. if((fabs(int2-int1))/3<0.01){
  33. answtrapeze=int1+fabs(int2-int1)/3;//если погрешность < 0.01, то это ответ
  34. return answtrapeze;
  35. }
  36. else{
  37. int1=int2;//если нет, то h=h/2, n=2*n
  38. int2=0;
  39. trapeze(int1,int2,n*2,h/2,a);
  40. }
  41. }
  42. float answsimpson=0;
  43. float simpson(float int1,float int2,int n,float h,float a)
  44. {
  45. float x[n],f[n];
  46. x[0]=a;
  47. f[0]=sin(x[0]);
  48. for(int i=1;i<n+1;i++){
  49. x[i]=x[i-1]+h;
  50. f[i]=sin(x[i]);
  51. }
  52. for(int i=1;i<n;i++)
  53. {
  54. if(i%2==1)
  55. int2+=(4*f[i]);
  56. else
  57. int2+=(2*f[i]);
  58. }
  59. int2=(int2+f[0]+f[n])*h/3;
  60. if((fabs(int2-int1))/15<0.01){
  61. answsimpson=int1+fabs(int2-int1)/15;
  62. return answsimpson;
  63. }
  64. else{
  65. int1=int2;
  66. int2=0;
  67. simpson(int1,int2,n*2,h/2,a);
  68. }
  69. }
  70. float answnewton=0;
  71. float newton(float int1,float int2,int n,float h,float a)
  72. {
  73. float x[n],f[n];
  74. x[0]=a;
  75. f[0]=sin(x[0]);
  76. for(int i=1;i<n+1;i++){
  77. x[i]=x[i-1]+h;
  78. f[i]=sin(x[i]);
  79. }
  80. for(int i=1;i<n;i++)
  81. {
  82. if(i%3==0)
  83. int2+=(2*f[i]);
  84. else
  85. int2+=(3*f[i]);
  86. }
  87. int2=(int2+f[0]+f[n])*3*h/8;
  88. if((fabs(int2-int1))/15<0.01){
  89. answnewton=int1+fabs(int2-int1)/15;
  90. return answnewton;
  91. }
  92. else{
  93. int1=int2;
  94. int2=0;
  95. newton(int1,int2,n*2,h/2,a);
  96. }
  97. }
  98. void integrate::on_answerButton_clicked()
  99. {
  100. float int1=0;
  101. float int2=0;
  102. int n=2;
  103. float a=ui->aEdit->text().toFloat();//нижняя граница
  104. float b=ui->bEdit->text().toFloat();//верхняя граница
  105. float h=(b-a)/n;//длина разбиения
  106. clock_t tstart =clock();
  107. trapeze(int1,int2,n,h,a);
  108. clock_t tfinish = clock();
  109. clock_t sstart = clock();
  110. simpson(int1,int2,n,h,a);
  111. clock_t sfinish = clock();
  112. clock_t nstart = clock();
  113. newton(int1,int2,n,h,a);
  114. clock_t nfinish = clock();
  115. ui->TrapezeEdit->setText(QString::number(answtrapeze));
  116. ui->time1Edit->setText(QString::number(tfinish-tstart));
  117. ui->SimpsonEdit->setText(QString::number(answsimpson));
  118. ui->time2Edit->setText(QString::number(sfinish-sstart));
  119. ui->NewtonEdit->setText(QString::number(answnewton));
  120. ui->time3Edit->setText(QString::number(nfinish-nstart));
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement