← Ко всем темам

📉 Численные методы — метод половинного деления

Находим корень уравнения f(x)=0 на отрезке. Алгоритм дают в условии — твоя задача переписать его в программу.

1. Идея метода (учебник 12, §3.8)

Условие: f(x) непрерывна на [a,b] и f(a)·f(b) < 0 (на концах разные знаки → внутри есть корень).
Шаг 1. Середина c = (a+b)/2.
Шаг 2. Если f(c)=0 — корень найден. Иначе: если f(a)·f(c) > 0a = c; иначе b = c.
Шаг 3. Повторять n раз (или пока |b−a| < ε). Ответ ≈ (a+b)/2.
Логика: отрезок, на концах которого знаки разные, всегда содержит корень. Половиним и оставляем ту половину, где знаки по-прежнему разные.

2. Готовый код (из учебника)

#include <iostream>
#include <math.h>
using namespace std;
double a, b, c; int i, n;
double f(double x){ return pow(x,4)+2*x*pow(x,2)-x-1; }
int main(){
    a=0; b=1; n=16;
    for(i=1;i<=n;i++){
        c=(b+a)/2;
        if(f(c)==0) break;
        else if(f(c)*f(a)>0) a=c; else b=c;
    }
    cout << c;        // ответ ≈ 0.8668
    return 0;
}

На экзамене меняешь только: тело f(), значения a, b, n и что выводишь.

3. 🧪 Запусти метод вживую

4. Другие методы (узнать на глаз)

Метод хорд — соединяешь концы отрезка хордой, корень хорды → новая граница.

Метод Ньютона (касательных) — итерация x = x − f(x)/f′(x) (нужна производная). 2020: вписать for(i=1;i<=n;i++) x = x - f(x)/f1(x);

Метод прямоугольников — для интеграла: S = Σ h·f(xᵢ), где h=(b−a)/n.