program NewtonMethod;
uses Math;
function Func(x: Real): Real;
begin
Func := Cos(x) - x*x*x;
end;
function Derivative(x: Real): Real;
begin
Derivative := -Sin(x) - 3*x*x;
end;
function NewtonRaphson(x0, epsilon: Real; maxIter: Integer; var iterations: Integer; var converged: Boolean): Real;
var
x, xNew: Real;
iter: Integer;
begin
x := x0;
iter := 0;
converged := false;
WriteLn('Итерация 0: x = ', x:0:6, ', f(x) = ', Func(x):0:6);
while iter < maxIter do
begin
// Проверяем, что производная не слишком мала
if Abs(Derivative(x)) < 1e-10 then
begin
WriteLn('Производная близка к нулю в точке x = ', x:0:6);
Exit;
end;
// Вычисляем новое приближение
xNew := x - Func(x) / Derivative(x);
// Проверяем, что не вышли за пределы интервала
if (xNew < 0.5) or (xNew > 1.0) then
begin
WriteLn('Приближение вышло за пределы интервала [0.5; 1.0]');
end;
// Выводим информацию о текущей итерации
WriteLn('Итерация ', iter+1, ': x = ', xNew:0:6, ', f(x) = ', Func(xNew):0:6);
// Проверяем условие сходимости
if Abs(xNew - x) < epsilon then
begin
iterations := iter + 1;
converged := true;
NewtonRaphson := xNew;
Exit;
end;
x := xNew;
iter := iter + 1;
end;
WriteLn('Достигнуто максимальное количество итераций (', maxIter, ')');
iterations := maxIter;
NewtonRaphson := x;
end;
procedure CheckInterval(a, b: Real);
var
i: Integer;
step: Real;
begin
WriteLn('Проверка функции на интервале [', a:0:1, '; ', b:0:1, ']:');
WriteLn('x':8, 'f(x)':12);
step := (b - a) / 10;
for i := 0 to 10 do
begin
WriteLn((a + i*step):8:4, Func(a + i*step):12:6);
end;
WriteLn;
end;
var
root: Real;
iterations: Integer;
converged: Boolean;
begin
WriteLn('Решение уравнения cos(x) - x^3 = 0 методом Ньютона');
WriteLn('Корень в интервале [0.5; 1.0]');
WriteLn;
// Проверяем функцию на интервале
CheckInterval(0.5, 1.0);
// Решаем уравнение с начальным приближением из середины интервала
WriteLn('Начальное приближение: x_0 = 0.75 (середина интервала)');
WriteLn;
root := NewtonRaphson(0.75, 1e-6, 100, iterations, converged);
WriteLn;
if converged then
begin
WriteLn('Результат:');
WriteLn('x = ', root:0:6);
WriteLn('Количество итераций: ', iterations);
WriteLn('Проверка: cos(', root:0:6, ') - (', root:0:6, ')^3 = ', Func(root):0:10);
// Проверяем, что корень действительно в заданном интервале
if (root >= 0.5) and (root <= 1.0) then
WriteLn('Корень в заданном интервале [0.5; 1.0]')
else
WriteLn('Корень вне заданного интервала');
end
else
begin
WriteLn('Не сошлось за указанное число итераций.');
WriteLn('Последнее приближение: x = ', root:0:6);
end;
end.
cHJvZ3JhbSBOZXd0b25NZXRob2Q7CnVzZXMgTWF0aDsKCmZ1bmN0aW9uIEZ1bmMoeDogUmVhbCk6IFJlYWw7CmJlZ2luCiAgRnVuYyA6PSBDb3MoeCkgLSB4KngqeDsKZW5kOwoKZnVuY3Rpb24gRGVyaXZhdGl2ZSh4OiBSZWFsKTogUmVhbDsKYmVnaW4KICBEZXJpdmF0aXZlIDo9IC1TaW4oeCkgLSAzKngqeDsKZW5kOwoKZnVuY3Rpb24gTmV3dG9uUmFwaHNvbih4MCwgZXBzaWxvbjogUmVhbDsgbWF4SXRlcjogSW50ZWdlcjsgdmFyIGl0ZXJhdGlvbnM6IEludGVnZXI7IHZhciBjb252ZXJnZWQ6IEJvb2xlYW4pOiBSZWFsOwp2YXIKICB4LCB4TmV3OiBSZWFsOwogIGl0ZXI6IEludGVnZXI7CmJlZ2luCiAgeCA6PSB4MDsKICBpdGVyIDo9IDA7CiAgY29udmVyZ2VkIDo9IGZhbHNlOwogIAogIFdyaXRlTG4oJ9CY0YLQtdGA0LDRhtC40Y8gMDogeCA9ICcsIHg6MDo2LCAnLCBmKHgpID0gJywgRnVuYyh4KTowOjYpOwogIAogIHdoaWxlIGl0ZXIgPCBtYXhJdGVyIGRvCiAgYmVnaW4KICAgIC8vINCf0YDQvtCy0LXRgNGP0LXQvCwg0YfRgtC+INC/0YDQvtC40LfQstC+0LTQvdCw0Y8g0L3QtSDRgdC70LjRiNC60L7QvCDQvNCw0LvQsAogICAgaWYgQWJzKERlcml2YXRpdmUoeCkpIDwgMWUtMTAgdGhlbgogICAgYmVnaW4KICAgICAgV3JpdGVMbign0J/RgNC+0LjQt9Cy0L7QtNC90LDRjyDQsdC70LjQt9C60LAg0Log0L3Rg9C70Y4g0LIg0YLQvtGH0LrQtSB4ID0gJywgeDowOjYpOwogICAgICBFeGl0OwogICAgZW5kOwogICAgCiAgICAvLyDQktGL0YfQuNGB0LvRj9C10Lwg0L3QvtCy0L7QtSDQv9GA0LjQsdC70LjQttC10L3QuNC1CiAgICB4TmV3IDo9IHggLSBGdW5jKHgpIC8gRGVyaXZhdGl2ZSh4KTsKICAgIAogICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8LCDRh9GC0L4g0L3QtSDQstGL0YjQu9C4INC30LAg0L/RgNC10LTQtdC70Ysg0LjQvdGC0LXRgNCy0LDQu9CwCiAgICBpZiAoeE5ldyA8IDAuNSkgb3IgKHhOZXcgPiAxLjApIHRoZW4KICAgIGJlZ2luCiAgICAgIFdyaXRlTG4oJ9Cf0YDQuNCx0LvQuNC20LXQvdC40LUg0LLRi9GI0LvQviDQt9CwINC/0YDQtdC00LXQu9GLINC40L3RgtC10YDQstCw0LvQsCBbMC41OyAxLjBdJyk7CiAgICBlbmQ7CiAgICAKICAgIC8vINCS0YvQstC+0LTQuNC8INC40L3RhNC+0YDQvNCw0YbQuNGOINC+INGC0LXQutGD0YnQtdC5INC40YLQtdGA0LDRhtC40LgKICAgIFdyaXRlTG4oJ9CY0YLQtdGA0LDRhtC40Y8gJywgaXRlcisxLCAnOiB4ID0gJywgeE5ldzowOjYsICcsIGYoeCkgPSAnLCBGdW5jKHhOZXcpOjA6Nik7CiAgICAKICAgIC8vINCf0YDQvtCy0LXRgNGP0LXQvCDRg9GB0LvQvtCy0LjQtSDRgdGF0L7QtNC40LzQvtGB0YLQuAogICAgaWYgQWJzKHhOZXcgLSB4KSA8IGVwc2lsb24gdGhlbgogICAgYmVnaW4KICAgICAgaXRlcmF0aW9ucyA6PSBpdGVyICsgMTsKICAgICAgY29udmVyZ2VkIDo9IHRydWU7CiAgICAgIE5ld3RvblJhcGhzb24gOj0geE5ldzsKICAgICAgRXhpdDsKICAgIGVuZDsKICAgIAogICAgeCA6PSB4TmV3OwogICAgaXRlciA6PSBpdGVyICsgMTsKICBlbmQ7CiAgCiAgV3JpdGVMbign0JTQvtGB0YLQuNCz0L3Rg9GC0L4g0LzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC40YLQtdGA0LDRhtC40LkgKCcsIG1heEl0ZXIsICcpJyk7CiAgaXRlcmF0aW9ucyA6PSBtYXhJdGVyOwogIE5ld3RvblJhcGhzb24gOj0geDsKZW5kOwoKcHJvY2VkdXJlIENoZWNrSW50ZXJ2YWwoYSwgYjogUmVhbCk7CnZhcgogIGk6IEludGVnZXI7CiAgc3RlcDogUmVhbDsKYmVnaW4KICBXcml0ZUxuKCfQn9GA0L7QstC10YDQutCwINGE0YPQvdC60YbQuNC4INC90LAg0LjQvdGC0LXRgNCy0LDQu9C1IFsnLCBhOjA6MSwgJzsgJywgYjowOjEsICddOicpOwogIFdyaXRlTG4oJ3gnOjgsICdmKHgpJzoxMik7CiAgCiAgc3RlcCA6PSAoYiAtIGEpIC8gMTA7CiAgZm9yIGkgOj0gMCB0byAxMCBkbwogIGJlZ2luCiAgICBXcml0ZUxuKChhICsgaSpzdGVwKTo4OjQsIEZ1bmMoYSArIGkqc3RlcCk6MTI6Nik7CiAgZW5kOwogIFdyaXRlTG47CmVuZDsKCnZhcgogIHJvb3Q6IFJlYWw7CiAgaXRlcmF0aW9uczogSW50ZWdlcjsKICBjb252ZXJnZWQ6IEJvb2xlYW47CmJlZ2luCiAgV3JpdGVMbign0KDQtdGI0LXQvdC40LUg0YPRgNCw0LLQvdC10L3QuNGPIGNvcyh4KSAtIHheMyA9IDAg0LzQtdGC0L7QtNC+0Lwg0J3RjNGO0YLQvtC90LAnKTsKICBXcml0ZUxuKCfQmtC+0YDQtdC90Ywg0LIg0LjQvdGC0LXRgNCy0LDQu9C1IFswLjU7IDEuMF0nKTsKICBXcml0ZUxuOwogIAogIC8vINCf0YDQvtCy0LXRgNGP0LXQvCDRhNGD0L3QutGG0LjRjiDQvdCwINC40L3RgtC10YDQstCw0LvQtQogIENoZWNrSW50ZXJ2YWwoMC41LCAxLjApOwogIAogIC8vINCg0LXRiNCw0LXQvCDRg9GA0LDQstC90LXQvdC40LUg0YEg0L3QsNGH0LDQu9GM0L3Ri9C8INC/0YDQuNCx0LvQuNC20LXQvdC40LXQvCDQuNC3INGB0LXRgNC10LTQuNC90Ysg0LjQvdGC0LXRgNCy0LDQu9CwCiAgV3JpdGVMbign0J3QsNGH0LDQu9GM0L3QvtC1INC/0YDQuNCx0LvQuNC20LXQvdC40LU6IHhfMCA9IDAuNzUgKNGB0LXRgNC10LTQuNC90LAg0LjQvdGC0LXRgNCy0LDQu9CwKScpOwogIFdyaXRlTG47CiAgCiAgcm9vdCA6PSBOZXd0b25SYXBoc29uKDAuNzUsIDFlLTYsIDEwMCwgaXRlcmF0aW9ucywgY29udmVyZ2VkKTsKICAKICBXcml0ZUxuOwogIGlmIGNvbnZlcmdlZCB0aGVuCiAgYmVnaW4KICAgIFdyaXRlTG4oJ9Cg0LXQt9GD0LvRjNGC0LDRgjonKTsKICAgIFdyaXRlTG4oJ3ggPSAnLCByb290OjA6Nik7CiAgICBXcml0ZUxuKCfQmtC+0LvQuNGH0LXRgdGC0LLQviDQuNGC0LXRgNCw0YbQuNC5OiAnLCBpdGVyYXRpb25zKTsKICAgIFdyaXRlTG4oJ9Cf0YDQvtCy0LXRgNC60LA6IGNvcygnLCByb290OjA6NiwgJykgLSAoJywgcm9vdDowOjYsICcpXjMgPSAnLCBGdW5jKHJvb3QpOjA6MTApOwogICAgCiAgICAvLyDQn9GA0L7QstC10YDRj9C10LwsINGH0YLQviDQutC+0YDQtdC90Ywg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LIg0LfQsNC00LDQvdC90L7QvCDQuNC90YLQtdGA0LLQsNC70LUKICAgIGlmIChyb290ID49IDAuNSkgYW5kIChyb290IDw9IDEuMCkgdGhlbgogICAgICBXcml0ZUxuKCfQmtC+0YDQtdC90Ywg0LIg0LfQsNC00LDQvdC90L7QvCDQuNC90YLQtdGA0LLQsNC70LUgWzAuNTsgMS4wXScpCiAgICBlbHNlCiAgICAgIFdyaXRlTG4oJ9Ca0L7RgNC10L3RjCDQstC90LUg0LfQsNC00LDQvdC90L7Qs9C+INC40L3RgtC10YDQstCw0LvQsCcpOwogIGVuZAogIGVsc2UKICBiZWdpbgogICAgV3JpdGVMbign0J3QtSDRgdC+0YjQu9C+0YHRjCDQt9CwINGD0LrQsNC30LDQvdC90L7QtSDRh9C40YHQu9C+INC40YLQtdGA0LDRhtC40LkuJyk7CiAgICBXcml0ZUxuKCfQn9C+0YHQu9C10LTQvdC10LUg0L/RgNC40LHQu9C40LbQtdC90LjQtTogeCA9ICcsIHJvb3Q6MDo2KTsKICBlbmQ7CmVuZC4=