БОЛЬШОЙ FAQ ПО DELPHI



Поиск пересечений графика с осью OX

Для поиска пересечений графика заданной функции с осью абсцисс очень удобен метод хорд. Он основан на линейной интерполяции. По двум точкам, лежащим по разные стороны от оси OX, строится прямая. Поскольку точка пересечения этой прямой с осью OX уже ближе к искомому x, то при повторении этой операции точность резко увеличивается. Если функция задана массивом точек, то можно произвести только одну операцию приближения.


 function F(x: double): double;
 begin
   result := sin(x);
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 const
   left = -10;
   right = 10;
 var
   x1, x2: double;
   y1, y2: double;
   k, b: double;
   x, y: double;
   d1, d2: double;
 begin
   x1 := left;
   y1 := f(x1);
   repeat
     x2 := x1 + 0.1;
     y2 := f(x2);
     if y1 * y2 < 0 then
     begin
       repeat
         y1 := f(x1);
         y2 := f(x2);
         k := (y1 - y2) / (x1 - x2);
         b := y1 - k * x1;
         x := -b / k;
         y := k * x + b;
         d1 := sqr(x1 - x) + sqr(y1 - y);
         d2 := sqr(x2 - x) + sqr(y2 - y);
         if d1 > d2 then
         begin
           d1 := d2;
           x1 := x;
         end
         else
           x2 := x;
       until
         d1 < 1E-20;
       ListBox1.Items.Add(FloatToStr(x1));
     end;
     x1 := x2;
     y1 := y2;
   until
     x2 > right;
 end;
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Видеокурс ВЗЛОМ