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

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

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

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

Ошибка в методе Ньютона

  • Автор темы Автор темы felarl
  • Дата начала Дата начала
Расстрелять. Без замены штрафом.

Не, ну в самом деле: пусть, например, у нас есть функция, заданная на интервале [0.8, 1.8], фрагмент которой выглядит так:
CP_1.webp
и мне нужно найти методом Ньютона ее корень. Так что же, по мнению многоуважаемых преподов, я должен непременно стартовать с правого конца, потому что на нём знак функции и производной совпадают? А с левого - низззззззззззз-зя?!! Так вот, на самом деле выбор конца интервала НЕ ИМЕЕТ ЗНАЧЕНИЯ. То есть абсолютно. И стартуя с левого конца, я благополучно приду (ну кто бы мог подумать!) к тому же корню.

Зла прям не хватает!
 
Проблема все та же, метод Ньютона, находит корень не в том промежутке что задан....
Вот сама программа, промежуток [1;2] а программа находит корень 0.62...
uses crt;
var x,a,b,e: real;
function f1(x: real): real;
begin
f1:=ln(2-x)-cos(2*x);
end;
function f2(x:real): real;
begin
f2:=-1/(2-x)+2*sin(2*x);
end;
begin
clrscr;
a:=1;
b:=2;
e:=0.001;
if f1(a)*f2(a)>0 then x:=a
else x:=b;
while abs(f1(x))>e do
begin
x:=x-f1(x)/f2(x);
end;
writeln ('x=',x,' f(x)=',f1(x));
end.
 
Проблема все та же, метод Ньютона, находит корень не в том промежутке что задан.... Вот сама программа, промежуток [1;2] а программа находит корень 0.62...
И ответ будет, увы, всё тот же.
К сожалению, помочь Вам так, чтобы Вы, оставаясь в рамках идиотских преподских указуль, получили правильный ответ, я, при всём желании, не могу.
Потому что вижу всё тот же тупой, бессмысленный, безграмотный дебилизм
if f1(a)*f2(a)>0 then x:=a
else x:=b;
свидетельствующий, увы, о ПОЛНОЙ профессиональной несостоятельности Ваших "преподавателей". Сочувствую.
Теперь по задаче. Как ее грамотно решить?
Как я уже неоднократно Вам объяснял, начать нужно с построения графика функции с целью определения приблизительного значения корня или корней и оптимального выбора исходной точки. В Вашем случае график выглядит так:
LnCos.webp
Как видим, в интервале [0, 2] имеются два корня: один около х=0.6, другой в районе х=1.6. Вас интересует второй - прекрасно! Выбираем исходную точку х0=1.4 или х0=1.8 (совпадение знаков функции и производной в этих точках, вопреки мнению идиотов, которые "вас так учат", НЕ ТРЕБУЕТСЯ!!!). Любую из двух берите, запускайте программу и - вуаля! - вот он, Ваш искомый корень.
Если же следовать "алгоритму", которому "вас учат", то следует взять в качестве исходной точки х=1. Но между этой точкой и искомым корнем, как видно из графика, находится экстремум с максимумом около х=1.2, и "перевалить" через этот горб алгоритм Ньютона, увы, НЕ МОЖЕТ. Как бы того ни хотелось придуркам, купившим дипломы в подземном переходе и объявившим себя "преподавателями".

Уверяю Вас, я не призываю к бунту, конфликту или чему-то подобному, но и Вы поймите: нытьё типа "помогите решить задачу, но обязательно опираясь на неверный алгоритм" - бессмысленно. Всё равно, что "помогите научиться водить машину, но так, чтобы педалью газа тормозить, а педалью тормоза - газовать, потому что нас так учат".

Извините за резкости, к Вам это не относится, просто когда я встречаюсь (а уже даже на этом форуме не впервые) с явной некомпетентностью преподавателей, то мысли возникают самые кровожадные.
 
Спсибо за содержательны ответ, будем пробывать)))
 
Назад
Сверху