Помощь - Поиск - Пользователи - Календарь
Полная версия: пересечение кривых(метод Ньютона)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Sundery
Здравствуйте, не могли бы помочь по такой темке? все что находил(включая этот форум) - только нахождение точки пересечеия с осью координат, а тут даны 2 функции, отрезок [a,b], и естественно эпсилон, к-е передаются в функцию, где находится абсциса пересечения. есть работающая процедура комбинированного метода(касательных и хорд) где с обоих сторон ищется точка, но как ни пытался - переделать под Ньютона не могу. в FAQ был, там с одной кривой и осьюsad.gif
вот небольшой контекст к программе:

type TFunc=function(x:real):real;
................
{процедура root}
................
Root(f1,f2,f1p,f2p,3.500,4.000,eps1,x1);
{f1,f2 - функции введенные в отдельной поцедуре вручную; f1p,f2p - первые производные, тоже в отдельной
процедуре вручную;a и b подбираются под примерное пересечение, eps1=0.0001, x - искомый корень}



а вот и процедура нахождение корня:


procedure Root(f,g,f1,g1:TFunc;a,b,eps:real;var x:real);
{ funkciya IsT1 vozvrashaet TRUE, esli f'(x) i f''(x) odinakovogo znaka i FALSE v obratnom slu4ae}
function IsT1:boolean;
var x:real;
begin
x:=(a+b)/2;
IsT1:=(f1(x)-g1(x)>0) = (f((a+b)/2)-g((a+b)/2)<(f(a)-g(a)+f(b)-g(b))/2)
end;
var c:real;
Type1:boolean;
i:integer;
begin
Type1:=IsT1;
if (f(a)-g(a))*(f(b)-g(b))>0 then writeln('Neverno zadany a,b') else
begin
i:=0;
while (b-a)>eps do begin
c:=(a*(f(b)-g(b)) - b*(f(a)-g(a)))/(f(b)-g(b)-f(a)+g(a));
if Type1 then begin a:=c; c:=b end else begin b:=c;c:=a end;
c:=c-(f(С)-g(С))/(f1(С)-g1(С));
if Type1 then b:=c else a:=c;
i:=i+1;
end;
end;
x:=(a+b)/2;
end;



P.S. заранее спасибо кто ответит и попытается помочь. мне 11.01.07 к вечеру нужна готовая.. а я уже не знаю что делать.. остался последний шанс - ваша помощь sad.gif
Archon
http://eco.sutd.ru/Study/Informat/Newton.html Поможет?
volvo
Цитата
а тут даны 2 функции
На функции посмотреть можно? Или ты хочешь чтобы обрабатывались ЛЮБЫЕ?
Sundery
не, я там был уже.. это ж матрицы, а у меня даны две функции типа y=2^x-1, y=(1-x)/3, y=x^5. если и переделывать, то думаю то, что в FAQ - ближе к моему заданию..
я вроде бы и сам принцип метода понимаю, а реализовать че-то никак sad.gif
Archon
Цитата
не, я там был уже.. это ж матрицы, а у меня даны две функции типа y=2^x-1, y=(1-x)/3, y=x^5. если и переделывать, то думаю то, что в FAQ - ближе к моему заданию..
А это читал? Где векторы, там и матрицы smile.gif . В низу страницы (смотри первую ссылку). есть решение для n уравнений. Для двух переделать сам сможешь?
Sundery
Цитата(Archon @ 11.01.2007 1:46) *

А это читал? Где векторы, там и матрицы smile.gif . В низу страницы (смотри первую ссылку). есть решение для n уравнений. Для двух переделать сам сможешь?

там всего одна ссылка на ту страничку что ты уже давал smile.gif))

конечно, переделать можно любую программу, если используется именно этот метод, но я че-т не очень понимаю что там происходит - голова от проги таак болит.. что думать не получается (2-е суток уже сижу) sad.gif

кстати, в некоторых примерах используется начальное приближение, а мне нужно, чтоб по данному отрезку (ДВЕ переменные) программа сама находила, какой участок выбрать для дальнейшего приближения.

блин, до вечера нужно сделать её sad.gif((
могу выложить для полного понимания не только эту процедуру, а всю прогу. (если это действительно поможет,
потому что там на самом деле почти нечего дописывать)

спасибо ещё раз. надеюсь на помощь
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.