Помогите разобраться с кодом Qt

Помогите разобраться с чужым кодом который вычисляет интеграцию методом Гаусса,просто не понятны некоторые моменты(отмечу цифрами)
1-2)не понятно что это за переменные.
3)для чего данный цикл.

    include "mainwindow.h"
    include "ui_mainwindow.h"
    include <QTextCodec>
    MainWindow::MainWindow(QWidget *parent)
        :QMainWindow(parent), ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        QTextCodec *codec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForTr(codec);
    //Установка поддержи кодировки для заголовка окна
    //икнопоквиджета
    QObject::connect(ui->pushButton, SIGNAL(clicked()), this , SLOT(Gauss()));
    //Создаем надпись для заголовка окна виджета
    setWindowTitle(tr("Вариант D"));
    }
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    double MainWindow::F(double x)
    {
         return exp(cos(x)*cos(2*x));
    }
    double MainWindow::Gauss() { //Разложениевряд
     if(ui->lineEdit_2->text().isEmpty() || ui->lineEdit_3->text().isEmpty())
     {
      QMessageBox::about(this, tr("Ошибка"),
    tr("<h4>Вы не ввели предел интегрирования!</h4>"));
    ui->listWidget->clear();
      return 0;
     }else{
         a = ui->lineEdit_2->text().toDouble();
         b = ui->lineEdit_3->text().toDouble();
         if(a < 0||a >= 30)
         {
          QMessageBox::about(this, tr("Ошибка"),
    tr("<h4>Недопустимый предел интегрирования!</h4>"));
    ui->listWidget->clear();
          }
         if(b > 30 || b <= 0)
         {
          QMessageBox::about(this, tr("Ошибка"),
    tr("<h4>Недопустимый предел интегрирования!</h4>"));
    ui->listWidget->clear();
          }
    }
    e=0.00001;    // 1
   d=1;          //2
    n=2;
    h1=(b-a)/n;
    c=pow(3/5,1/2);
    c1=c*h1;
    s1=h1*(5*((b+a)/n-c1)+8*F((b+a)/n)+5*((b+a)/n+c1))/9;
    do  {     //3
        h=(b-a)/n;
        h1=h/2;
        c1=c*h1;
        s2=0;
        x2=a+h1;
        x1=x2-c1;
        x3=x2+c1;
        for (i=0;i<n;i++)
        {
            s2=s2+5*F(x1)+8*F(x2)+5*F(x3);
            x1+=h;
            x2+=h;
            x3+=h;
                 }
        s2=s2*h1/9;
        d=abs(s1-s2)/63;
                 n=n*2;
                 s1=s2;
    }while(d >= e);
        ui->listWidget->clear();
        QListWidgetItem *set = new QListWidgetItem;
        set->setText(trUtf8("%1").arg(s2));
    ui->listWidget->addItem(set);
    }
    `

Сделай оформление кода в соответствии с правилами разметки.
А то в этом месиве черт ногу сломит.

Не особо вчитывался в этот бредоватый код, но можно достаточно уверенно сказать, что

  • e — это погрешность (или точность) вычислений. Обычно обозначается буквой «эпсилон».
  • d — это разность между текущим и предыдущим приближением (вычислением).
  • цикл нужен как раз для повтора вычислений со всё большей точностью: количество интервалов удваивается для каждого следующего прохода вычислений. Цикл прекращается, когда эта разность становится меньше заданной погрешности вычислений e.
  • интеграция методом Гаусса вообще-то называется интегрирование методом Гаусса.

sam,
Если вам не сложно,можете пояснить математическую модель интегрирования методом Гаусса.
Потому что то что я могу в интернете,это один бред.

А может не бред, а математика? )))

В коде то что не понятно?
Или не понятна математика?

centuiron891, математическую модель интегрирования методом Гаусса можно посмотреть в Википедии, или в любом учебнике по численным методам, что предпочтительнее.

Случайно наткнулся на откровенный ляп:

c=pow(3/5,1/2);  // эквивалентно c=pow(0,0)

Это всё, что надо знать об этой программе.

sam,

c=pow(3/5,1/2);  // эквивалентно c=pow(0,0)

А ты не в курсе что можно сделать с этим?
И большое спасибо,что отвечаешь на вопросы!

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.