← Все темы  ·  ⬇ Материалы

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

Находим корень уравнения 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.

5. Определения остальных методов (их тоже спрашивают)

Метод хорд

Вместо середины берём точку пересечения хорды (прямой через концы) с осью X:
c = a − f(a)·(b−a) / (f(b)−f(a)), затем сужаем отрезок как в бисекции.

Метод Ньютона (касательных)

Идём по касательной к графику. Нужна производная f′(x):
x = x − f(x) / f′(x) — повторять n раз.

Метод левых прямоугольников (интеграл)

Площадь под кривой ≈ сумма прямоугольников шириной h и высотой f(xᵢ):
h = (b−a)/n; S = Σ h·f(a+i·h), i = 0…n−1.

6. 📚 Все вопросы с экзаменов (численные методы)

2025 в.2 — бисекция (дрон): вычислить абсциссу приземления груза.

► решение
подставить f(); a,b,ε из условия; c=(a+b)/2; if(f(a)*f(c)<0)b=c; else a=c; до |b−a|<ε; вывод (a+b)/2

2024 в.1 — бисекция (диск), отрезок [5;14], n=20.

► решение
a=5; b=14; n=20; for i=1..n: c=(a+b)/2; if(f(a)*f(c)<0)b=c; else a=c; вывод (a+b)/2

2024 в.2 — a) метод хорд (нарисовать 2 хорды); b) интеграл методом левых прямоугольников, [2;5], n=50.

► решение
a) две хорды по методу хорд на графике b) h=(5-2)/50; S=0; for i=0..49: x=2+i*h; S+=h*f(x); вывод S

2022 — посадка зонда: вычислить абсциссу x и вывести разницу |px − x|.

► решение
найти корень x методом (бисекция); вывести abs(px − x)

2020 в.1 — a) сопоставить графики методам; b) вписать метод Ньютона в программу P7.

► решение
a) половинного деления → D; хорд → A; Ньютона → C b) var real; f:=exp(x)-x*x; for i:=1 to n; x:=x-f(x)/f1(x);

2020 в.2 — пшеница для посева: вычислить количество (функция + формула + цикл).

► решение
переменные + начальные значения; функция; вычислительные формулы; цикл; вывод результата