• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Решение уравнений методом Ньютона

  • Автор темы Автор темы felarl
  • Дата начала Дата начала

felarl

Новые
Регистрация
18 Окт 2013
Сообщения
22
Реакции
0
Баллы
0
Решение уравнений методом Ньютона

Здравствуйте, помогите чем можете. Работать в паскале начал недавно, есть уравнение решил его методом дихотомии, а вот методом Ньютона не могу, можете момочь? сообственно само уравнение: (x-2)^2*2x-1=0, на интервале (0;2) с точностью E=0,001
Вот кое что попробывал: IMG112.webp
 
Здравствуйте, помогите чем можете. Работать в паскале начал недавно, есть уравнение решил его методом дихотомии, а вот методом Ньютона не могу, можете момочь? сообственно само уравнение: (x-2)^2*2x-1=0, на интервале (0;2) с точностью E=0,001
Знаете, я в некотором затруднении. Видите ли, у данного кубического уравнения имеются три вещественных корня, в том числе два из них - в указанном интервале. И какой из них прикажете искать? Или оба? А какой Вы нашли?

На всякий случай - проверьте условие задачи. Может быть, там не "-1", а "+1"? Тогда вещественный корень будет единственным.

Кроме того, Вы АБСОЛЮТНО неправильно задаёте функции. Каждая (да-да, именно КАЖДАЯ) должна иметь структуру типа:

Код:
Function FuFuFu(ppp:real):real;
 begin
  ....
  ....
  ....
  FuFuFu:=....
 end;
И никакого объединения их и, тем более, сначала перечня заголовков, а потом (в одном блоке) перечня тел - НЕ ДОПУСКАЕТСЯ!!!
(Что-то похожее, т.е. перечень заголовков, используется при написании модулей, но и там в другом разделе функция задается в виде приведенной выше структуры. Ну или если функция F1 является внутренней по отношению к F, а функция F2 - внутренней по отношению к F1. Но в этом случае там должно быть три вложенных блока, а не один, и, кроме того, вызвать из основной программы F1 и F2 в таком случае невозможно).
 

Вложения

  • Cube1.webp
    Cube1.webp
    7.1 KB · Просмотры: 60
Знаете, я в некотором затруднении. Видите ли, у данного кубического уравнения имеются три вещественных корня, в том числе два из них - в указанном интервале. И какой из них прикажете искать? Или оба? А какой Вы нашли?

На всякий случай - проверьте условие задачи. Может быть, там не "-1", а "+1"? Тогда вещественный корень будет единственным.

Кроме того, Вы АБСОЛЮТНО неправильно задаёте функции. Каждая (да-да, именно КАЖДАЯ) должна иметь структуру типа:

Код:
Function FuFuFu(ppp:real):real;
 begin
  ....
  ....
  ....
  FuFuFu:=....
 end;
И никакого объединения их и, тем более, сначала перечня заголовков, а потом (в одном блоке) перечня тел - НЕ ДОПУСКАЕТСЯ!!!
(Что-то похожее, т.е. перечень заголовков, используется при написании модулей, но и там в другом разделе функция задается в виде приведенной выше структуры. Ну или если функция F1 является внутренней по отношению к F, а функция F2 - внутренней по отношению к F1. Но в этом случае там должно быть три вложенных блока, а не один, и, кроме того, вызвать из основной программы F1 и F2 в таком случае невозможно).
Да, да вы правы там +1 !!! Корень помоему где-то 0.14 должен быть. На счет того что не правильно задал функции, это да, просто так объяснили нам...
 
Сам ход решения хоть правильный?
 
Сам ход решения хоть правильный?
Не могу сказать, ибо хода не понимаю. Вы что, пытаетесь в одну программу оба метода засадить? Допустим. Но, во-первых, там F1 (первая производная) сосчитана неверно (откуда Вы взяли коэффициент 64? Должен быть 16), а во-вторых - ну на кой там вторая производная?
Да, да вы правы там +1 !!! Корень помоему где-то 0.14 должен быть. На счет того что не правильно задал функции, это да, просто так объяснили нам...
Совсем другое дело. Теперь график выглядит так:
Cube2.webp
Но корень там вовсе не "где-то 0.14", а около -0.1. Между прочим, в случае одного вещественного корня кубическое уравнение решается точно методом Кардано, и это можно использовать для контроля правильности результата работы итерационных программ. Так вот, формула Кардано даёт х=-0.112085...
Теперь решим задачу методом Ньютона:
Код:
Const
 e=0.001;
Var
 x0_old,x0_new,D:Real;

Function F(z:real):real;
begin
 F:=z*z*z*2-z*z*8+z*8+1;
end;

Function F1(z:real):real;
begin
 F1:=z*z*6-z*16+8;
end;

Begin
 x0_old:=0;
 Repeat
  x0_new:=x0_old-F(x0_old)/F1(x0_old);
  D:=Abs(x0_old-x0_new);
  x0_old:=x0_new;
 Until D<e;
 Writeln('Result: x = ',x0_new:0:3);
 Readln
End.
Результат работы этой программы: х=-0.112.
 
Не могу сказать, ибо хода не понимаю. Вы что, пытаетесь в одну программу оба метода засадить? Допустим. Но, во-первых, там F1 (первая производная) сосчитана неверно (откуда Вы взяли коэффициент 64? Должен быть 16), а во-вторых - ну на кой там вторая производная?
Но корень там вовсе не "где-то 0.14", а около -0.1. Между прочим, в случае одного вещественного корня кубическое уравнение решается точно , и это можно использовать для контроля правильности результата работы итерационных программ. Так вот, формула Кардано даёт х=-0.112085...
Теперь решим задачу методом Ньютона:
Код:
Const
 e=0.001;
Var
 x0_old,x0_new,D:Real;

Function F(z:real):real;
begin
 F:=z*z*z*2-z*z*8+z*8+1;
end;

Function F1(z:real):real;
begin
 F1:=z*z*6-z*16+8;
end;

Begin
 x0_old:=0;
 Repeat
  x0_new:=x0_old-F(x0_old)/F1(x0_old);
  D:=Abs(x0_old-x0_new);
  x0_old:=x0_new;
 Until D<e;
 Writeln('Result: x = ',x0_new:0:3);
 Readln
End.
Результат работы этой программы: х=-0.112.
Извините,вроде все понял, но не могли бы объяснить один момент? в этой строчке Writeln('Result: x = ',x0_new:0:3); не понятно что такое x0_new:0:3. если не сложноможете пояснить?
 
если не сложноможете пояснить?
Ни в малейшей степени не сложно. Поясняю.
Это формат вывода вещественного числа. Если его не поставить, то выведется нечто безобразное в таком роде:
-1.1208567754337654Е-001
Если поставить одно число, то оно будет означать полное количество выводимых знаков, включая запись порядка. Так, если напишем х:12, то получим
-1.1208Е-001
Наличие двух чисел в формате означает, что мы выводим число в формате целая часть-точка-дробная часть, и при этом первое число означает ПОЛНОЕ количество знаков, а второе - число знаков дробной части. Так, если задать х:8:3, то будем иметь
Код:
х=  -0.112
А вот если первое число - 0, то это означает, что мы фиксируем только число знаков дробной части, а уж целая - какая получится, такая и выведется. Таким образом, формат 0:3 означает, что я прошу вывести результат с тремя значащими цифрами после десятичного разделителя (точки).
 
Ни в малейшей степени не сложно. Поясняю.
Это формат вывода вещественного числа. Если его не поставить, то выведется нечто безобразное в таком роде:
-1.1208567754337654Е-001
Если поставить одно число, то оно будет означать полное количество выводимых знаков, включая запись порядка. Так, если напишем х:12, то получим
-1.1208Е-001
Наличие двух чисел в формате означает, что мы выводим число в формате целая часть-точка-дробная часть, и при этом первое число означает ПОЛНОЕ количество знаков, а второе - число знаков дробной части. Так, если задать х:8:3, то будем иметь
Код:
х=  -0.112
А вот если первое число - 0, то это означает, что мы фиксируем только число знаков дробной части, а уж целая - какая получится, такая и выведется. Таким образом, формат 0:3 означает, что я прошу вывести результат с тремя значащими цифрами после десятичного разделителя (точки).
Большое спасибо! Еще один вопрос назрел... а интервалы зачем даны? их программа как-нибудь использует?
 
Большое спасибо! Еще один вопрос назрел... а интервалы зачем даны? их программа как-нибудь использует?
Нет. Просто для улучшения читабельности. Равно как и отступы, "лесенки" и прочие элементы форматирования листинга.
 
Назад
Сверху