MLoop 1

Условие

Используйте метод бисекции для того, чтобы отыскать с точностью [latex]\varepsilon[/latex] все действительные корни уравнения [latex]\ln{(1 + x^2 -\sin{x})} = 3^{\cos{2x}}[/latex]. Для подготовки необходимых графиков воспользуйтесь этим ресурсом.

График

save (1)

Тесты

Точность [latex]\epsilon[/latex] Корень на [latex](-4; -3)[/latex] Корень на [latex](-3; -2)[/latex] Корень на [latex](-1; 0)[/latex] Корень на [latex](1; 2)[/latex] Корень на [latex](2; 3)[/latex] Корень на [latex](3; 4)[/latex]
0.1 -3.40625 -2.78125 -0.84375 1.21875 2.71875 3.40625
0.01 -3.42578 -2.75391 -0.839844 1.21484 2.72266 3.41016
0.001 -3.42627 -2.75439 -0.836426 1.21729 2.72021 3.41357
0.0001 -3.42636 -2.75443 -0.836884 1.21707 2.72061 3.41391

Код

 

Решение

Рассмотрим функцию [latex]f(x) = \ln{(1 + x^2 -\sin{x})} — 3^{\cos{2x}}[/latex]. По графику видно, что функция имеет 6 нулей. Таким образом, уравнение имеет 6 корней, которые находятся на интервалах  [latex](-4; -3)[/latex], [latex](-3; -2)[/latex], [latex](-1; 0)[/latex], [latex](1; 2)[/latex], [latex](2; 3)[/latex], [latex](3; 4)[/latex] соответственно. Так как корней довольно много, чтобы не копировать 6 раз алгоритм поиска корня, вынесем его в отдельную функцию [latex]findRoot[/latex], у которой будет 3 параметра: начало отрезка [latex]a[/latex], его конец [latex]b[/latex] и заданная точность [latex]\epsilon[/latex].

 

Далее воспользуемся методом бисекции : рассмотрим значение функции на середине отрезка (в точке [latex]\frac{a + b}{2}[/latex]) и в точке [latex]a[/latex]. Если их произведение равно нулю, то [latex]\frac{a + b}{2}[/latex] — корень уравнения, если меньше, корень — на промежутке [latex](a; \frac{a + b}{2})[/latex], больше — на промежутке [latex](\frac{a + b}{2}; b)[/latex]. Меняем координаты начала и конца отрезка на соответствующие, продолжаем, пока не будет найден корень или достигнута необходимая точность.

Ссылки

Рабочая версия кода на Ideaone.com.

Related Images:

5 thoughts on “MLoop 1

  1. Отлично! Засчитано.

    Есть только несколько просьб по оформлению.
    — Вы оформляете findRoot как математическую формулу. Но это не формула, это часть кода. Т.е. оформлять нужно при помощи тега code — findRoot().
    — Желательно везде использовать \varepsilon.

Добавить комментарий