Найдите корни уравнения ех – 10х
= 0 с точностью e методом простой итерации.
Другие языки программирования и технологии
Delfi !!!Найдите корни уравнения ех – 10х = 0 с точностью эпсилам методом простой итерации.
Первый корень и так понятен: 0
А второй вот:

А второй вот:

Очень поучительная задача. Как известно, метод простой итерации применяется для решения уравнений вида x = Ф (x). При этом отображение Ф (x) должно быть сжимающим, т. е. , |Ф (x1)-Ф (x2)| < |x1-x2|
Прежде всего, нужно локализовать корни.
При x = 0 получаем exp(0) - 10*0 = 1 > 0
При x = 1 получаем exp(1) - 10 < 3 - 10 = -7 < 0
При x = 3 получаем exp(3) - 30 < 3^3 - 30 = -3 < 0
При x = 6 получаем exp(6) - 60 > 2^6 - 60 = 4 > 0
Получаем, что один корень следует искать в области (0, 1), а второй - в области (3, 6)
В данном случае в глаза бросаются два способа привести исходное уравнение к виду, допускающему применение метода сжимающих отображений:
а) x = exp(x) / 10
б) x = ln(10x)
Рассмотрим первый вариант: x = exp(x)/10. Здесь Ф (x) = exp(x)/10. Очевидно, при x < 1:
exp(x) = 1 + x + x^2/2 + x^3/6 + .
то есть,
exp(x) > 1 + x + x^2/2
exp(x) < 1 + x + x^2/2 + x^3/2
Следовательно:
|Ф (x1)-Ф (x2)| < |x1-x2|/10 + |(x1)^2-(x2)^2|/20 + |(x1)^3-(x2)^3|/20 <
|x1-x2| * (1/10 + (x1+x2)/20 + (x1^2 + x1 x2 + x2^2)/20)
Так как при любых x1, x2 < 1 второй множитель будет меньше 7/20, то оказывается, что на интервале (0, 1) это отображение является сжимающим. Для второго интервала локализации корней, 3 < x < 6, это отображение уже не подходит.
Другое дело второй вариант: x = ln(10x). Здесь Ф (x) = ln(10x). Получаем:
ln(10 x1) - ln(10 x2) = ln(x1) - ln(x2)
Если заменить x1 = exp(t1), x2 = exp(t2) (t1 > 1, t2 > 1), то получим:
|x1 - x2| = |exp(t1)-exp(t2)| > |t1-t2| * (1 + (t1+t2)/2) > 2 * |t1-t2| = 2 * |Ф (x1)-Ф (x2)|
Таким образом, для интервала 3 < x < 6 это отображение подходит.
Получаем программу:
PROGRAM iter;
CONST
eps = 1e-5;
FUNCTION F1(x:real) : real;
BEGIN
F1 := exp(x)/10;
END;
FUNCTION F2(x:real) : real;
BEGIN
F2 := ln(10*x);
END;
VAR
x0, x1 :real;
BEGIN
(* first root *)
x0 := 0.5;
x1 := F1(x0);
WHILE abs(x1-x0) > eps DO
BEGIN
x0 := x1;
x1 := F1(x0);
END;
WriteLn(x1);
(* second root *)
x0 := 4;
x1 := F2(x0);
WHILE abs(x1-x0) > eps DO
BEGIN
x0 := x1;
x1 := F2(x0);
END;
WriteLn(x1);
ReadLn;
END.
Прежде всего, нужно локализовать корни.
При x = 0 получаем exp(0) - 10*0 = 1 > 0
При x = 1 получаем exp(1) - 10 < 3 - 10 = -7 < 0
При x = 3 получаем exp(3) - 30 < 3^3 - 30 = -3 < 0
При x = 6 получаем exp(6) - 60 > 2^6 - 60 = 4 > 0
Получаем, что один корень следует искать в области (0, 1), а второй - в области (3, 6)
В данном случае в глаза бросаются два способа привести исходное уравнение к виду, допускающему применение метода сжимающих отображений:
а) x = exp(x) / 10
б) x = ln(10x)
Рассмотрим первый вариант: x = exp(x)/10. Здесь Ф (x) = exp(x)/10. Очевидно, при x < 1:
exp(x) = 1 + x + x^2/2 + x^3/6 + .
то есть,
exp(x) > 1 + x + x^2/2
exp(x) < 1 + x + x^2/2 + x^3/2
Следовательно:
|Ф (x1)-Ф (x2)| < |x1-x2|/10 + |(x1)^2-(x2)^2|/20 + |(x1)^3-(x2)^3|/20 <
|x1-x2| * (1/10 + (x1+x2)/20 + (x1^2 + x1 x2 + x2^2)/20)
Так как при любых x1, x2 < 1 второй множитель будет меньше 7/20, то оказывается, что на интервале (0, 1) это отображение является сжимающим. Для второго интервала локализации корней, 3 < x < 6, это отображение уже не подходит.
Другое дело второй вариант: x = ln(10x). Здесь Ф (x) = ln(10x). Получаем:
ln(10 x1) - ln(10 x2) = ln(x1) - ln(x2)
Если заменить x1 = exp(t1), x2 = exp(t2) (t1 > 1, t2 > 1), то получим:
|x1 - x2| = |exp(t1)-exp(t2)| > |t1-t2| * (1 + (t1+t2)/2) > 2 * |t1-t2| = 2 * |Ф (x1)-Ф (x2)|
Таким образом, для интервала 3 < x < 6 это отображение подходит.
Получаем программу:
PROGRAM iter;
CONST
eps = 1e-5;
FUNCTION F1(x:real) : real;
BEGIN
F1 := exp(x)/10;
END;
FUNCTION F2(x:real) : real;
BEGIN
F2 := ln(10*x);
END;
VAR
x0, x1 :real;
BEGIN
(* first root *)
x0 := 0.5;
x1 := F1(x0);
WHILE abs(x1-x0) > eps DO
BEGIN
x0 := x1;
x1 := F1(x0);
END;
WriteLn(x1);
(* second root *)
x0 := 4;
x1 := F2(x0);
WHILE abs(x1-x0) > eps DO
BEGIN
x0 := x1;
x1 := F2(x0);
END;
WriteLn(x1);
ReadLn;
END.
Похожие вопросы
- язык си. задача по языку Си. Задаются коэффициенты системы из трёх линейных уравнений. Найти корни.
- Реально ли на Macromedia Flash 8.0 написать игру?Или мульт простой нарисовать?
- Решение уравнения методом Ньютона (в С++). Как задать в проге отрезок,содержащий корень?
- Сложное уравнение (ax+b)/(cx+d)=0 на Pascal
- Решение нелинейного уравнения 3^2+2x-3=0
- Дано 4х число. Найти наименьшую нечетную цифру в числовой записи данного числа. Если вводим 0,то выводится 0.Что не так?
- Помагите,как создать файл .ехе ?
- по делфи прога нахождение квадратного корня( ошибка в проге) помогите найти и исправить
- Дано n строк по 3 элемента (1 и 0), найти сколько строк имеет больше чем один знак 1. C++
- Вычисления с некоторой точностью