28.02.2014, 18:15 | #11 (permalink) |
Member
Регистрация: 18.10.2013
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Само уравнение: ln(2-x)-cos2x=0, интервал [1;2] Сама программа: 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. |
28.02.2014, 18:15 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Тут может содержаться интересующая вас информация "Колыбель" Ньютона Метод Ньютона Решение уравнений методом Ньютона |
28.02.2014, 20:36 | #12 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Прежде всего, правильно сосчитайте производную (первое слагаемое), а там дальше посмотрим. Пока что в качестве f2 написана полная чушь.
|
28.02.2014, 21:17 | #15 (permalink) |
Member
Регистрация: 18.10.2013
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
28.02.2014, 21:32 | #16 (permalink) |
Member
Регистрация: 18.10.2013
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Если возможно, подскажите почему здесь происходит деление на ноль, и можно ли это исправить, не меняя интервал [0;2]
uses crt; var x,a,b,e: real; function f1(x: real): real; begin f1:=(x-2)*(x-2)*2*x-1; end; function f2(x:real): real; begin f2:=6*x*x-16*x+8; end; begin clrscr; a:=0; 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. |
28.02.2014, 21:39 | #17 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Возможно.Потому что в указанном интервале производная проходит через 0 (горизонтальная касательная, см. график выше).Нет.
|
28.02.2014, 21:49 | #19 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И вообще, хотел бы я понять, откуда берется вот эта, вставляемая Вами во все программы, ахинея:
if f1(a)*f2(a)>0 then x:=a else x:=b; Ни малейшего смысла в ней я, извините, не вижу. Требуется проверка условия положительности произведения производных на концах интервала: if f2(a)*f2(b)>0 then Если это условие НЕ выполняется, то задача заведомо методом Ньютона не решается. Если выполняется, то тоже не факт, что решается: функция может оказаться сильно осциллирующей и производная внутри интервала может несколько раз пройти через ноль. Поэтому, как я Вам уже писал и повторю снова: исходная точка должна выбираться "вручную", например, по графику функции. Алгоритмов выбора ее не существует. Мне, по крайней мере, они не известны. Эх, разбирали-разбирали задачу, график рисовали, про выбор исходных точек жевали-переживали - да всё, как видно, впустую... |
11.03.2014, 20:41 | #20 (permalink) | |
Member
Регистрация: 18.10.2013
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|