IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> пересечение кривых(метод Ньютона), Help!
Sundery
сообщение 10.01.2007 23:07
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Здравствуйте, не могли бы помочь по такой темке? все что находил(включая этот форум) - только нахождение точки пересечеия с осью координат, а тут даны 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

Сообщение отредактировано: Sundery - 10.01.2007 23:19
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 11:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"