unvisibleman

Lipshitz - Piyavsky

May 10th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void MainWin::piyavsky(){
  2.  
  3.     double L = ThinkL();
  4.  
  5.     std::vector<pv> v;
  6.  
  7.  
  8.     v.push_back(pv(a, f(a)));
  9.     v.push_back(pv(b, f(b)));
  10.  
  11.  
  12.     double up = b;
  13.     double un = u(a, b, L);
  14.  
  15.     v.push_back(pv(un, f(un)));
  16.  
  17.     int k = 3;
  18.  
  19.     while (fabs(f(un) - f(up)) >= e)
  20.     {
  21.         ++k;
  22.  
  23.         std::sort(v.begin(), v.end(), std::less<pv>());
  24.  
  25.         int p;
  26.  
  27.         for (int i = 0; i < static_cast<int> (v.size()); i++){
  28.             if (un == v[i].point){
  29.                 p = i;
  30.                 break;
  31.             }
  32.         }
  33.  
  34.         if (un != a){
  35.             double ul = u(v[p - 1].point, v[p].point, L);
  36.             v.push_back(pv(ul, g(un, ul, L)));
  37.         }
  38.         if (un != b){
  39.             double ur = u(v[p].point, v[p + 1].point, L);
  40.             v.push_back(pv(ur, g(un, ur, L)));
  41.         }
  42.  
  43.         up = un;
  44.  
  45.         double min = v[0].value;
  46.         int min_p = 0;
  47.         for (int i = 1; i < static_cast<int> (v.size()); i++){
  48.             if (v[i].value < min){
  49.                 min = v[i].value;
  50.                 min_p = i;
  51.             }
  52.         }
  53.  
  54.         un = v[min_p].point;
  55.         v[min_p].value = f(un);
  56.     }
  57.  
  58.     ui->LEdit->setText(QString::number(L));
  59.     ui->uEdit->setText(QString::number(un));
  60.     ui->JuEdit->setText(QString::number(f(un)));
  61.     ui->IterEdit->setText(QString::number(k));
  62.  
  63. }
  64.  
  65. void MainWin::on_runButton_clicked()
  66. {
  67.     fString = ui->functionEdit->text();
  68.     a = ui->xminEdit->text().toDouble();
  69.     b = ui->xmaxEdit->text().toDouble();
  70.     e = ui->epsEdit->text().toDouble();
  71.  
  72.     piyavsky();
  73. }
Advertisement
Add Comment
Please, Sign In to add comment