Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "integrate.h"
- #include "ui_integrate.h"
- #include "math.h"
- #include <cmath>
- #include <time.h>
- #include "fact.h"
- integrate::integrate(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::integrate)
- {
- ui->setupUi(this);
- }
- integrate::~integrate()
- {
- delete ui;
- }
- float answtrapeze=0;
- float trapeze(float int1,float int2,int n,float h,float a)
- {
- float x[n],f[n];
- x[0]=a;
- f[0]=sin(x[0]);
- for(int i=1;i<n+1;i++){
- x[i]=x[i-1]+h;//заполняем иксы
- f[i]=sin(x[i]);//считаем функцию sin x
- }
- for(int i=1;i<n;i++)
- int2+=f[i];
- int2=(int2*2+f[0]+f[n])*h/2;//считаем интеграл
- if((fabs(int2-int1))/3<0.01){
- answtrapeze=int1+fabs(int2-int1)/3;//если погрешность < 0.01, то это ответ
- return answtrapeze;
- }
- else{
- int1=int2;//если нет, то h=h/2, n=2*n
- int2=0;
- trapeze(int1,int2,n*2,h/2,a);
- }
- }
- float answsimpson=0;
- float simpson(float int1,float int2,int n,float h,float a)
- {
- float x[n],f[n];
- x[0]=a;
- f[0]=sin(x[0]);
- for(int i=1;i<n+1;i++){
- x[i]=x[i-1]+h;
- f[i]=sin(x[i]);
- }
- for(int i=1;i<n;i++)
- {
- if(i%2==1)
- int2+=(4*f[i]);
- else
- int2+=(2*f[i]);
- }
- int2=(int2+f[0]+f[n])*h/3;
- if((fabs(int2-int1))/15<0.01){
- answsimpson=int1+fabs(int2-int1)/15;
- return answsimpson;
- }
- else{
- int1=int2;
- int2=0;
- simpson(int1,int2,n*2,h/2,a);
- }
- }
- float answnewton=0;
- float newton(float int1,float int2,int n,float h,float a)
- {
- float x[n],f[n];
- x[0]=a;
- f[0]=sin(x[0]);
- for(int i=1;i<n+1;i++){
- x[i]=x[i-1]+h;
- f[i]=sin(x[i]);
- }
- for(int i=1;i<n;i++)
- {
- if(i%3==0)
- int2+=(2*f[i]);
- else
- int2+=(3*f[i]);
- }
- int2=(int2+f[0]+f[n])*3*h/8;
- if((fabs(int2-int1))/15<0.01){
- answnewton=int1+fabs(int2-int1)/15;
- return answnewton;
- }
- else{
- int1=int2;
- int2=0;
- newton(int1,int2,n*2,h/2,a);
- }
- }
- void integrate::on_answerButton_clicked()
- {
- float int1=0;
- float int2=0;
- int n=2;
- float a=ui->aEdit->text().toFloat();//нижняя граница
- float b=ui->bEdit->text().toFloat();//верхняя граница
- float h=(b-a)/n;//длина разбиения
- clock_t tstart =clock();
- trapeze(int1,int2,n,h,a);
- clock_t tfinish = clock();
- clock_t sstart = clock();
- simpson(int1,int2,n,h,a);
- clock_t sfinish = clock();
- clock_t nstart = clock();
- newton(int1,int2,n,h,a);
- clock_t nfinish = clock();
- ui->TrapezeEdit->setText(QString::number(answtrapeze));
- ui->time1Edit->setText(QString::number(tfinish-tstart));
- ui->SimpsonEdit->setText(QString::number(answsimpson));
- ui->time2Edit->setText(QString::number(sfinish-sstart));
- ui->NewtonEdit->setText(QString::number(answnewton));
- ui->time3Edit->setText(QString::number(nfinish-nstart));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement