Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на модуль
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Пашик
Здравствуйте! У меня простенькая на первый взгляд задача, но... Слишком мутное условие :
Цитата
Нужно написать модуль, содержащий подпрограмму нахождения корня уравнения f(x)=0 на заданном отрезке [a, b] методом половинного деления, который заключается в следующем. Отрезок [a, b] делится пополам x=(a+b)/2, и определяется значение функции f(x) на концах отрезков [x, b] и [a, x]. Корень находится в той половине [a, b], на концах которой f(x) имеет разные знаки. Если f(a) и f(x) имеют разные знаки, то далее в качестве отрезка, содержащего корень, рассматриваем [a, x], иначе [x, b]. Новый отрезок делится пополам, и такой процесс продолжается до тех пор, пока отрезок не станет меньше заданной погрешности Эпсилон.

Использовать модуль для решения уравнения 5x-8Ln(x)=8 на интервале [4.1, 4.8] с точностью Эпсилон=10^-6

Мой код
Const e=1E-6;
Var a,b,x:Real;
Begin
a:=4.1;
b:=4.8;
Repeat
x:=(a+b)/2;
If ((a>0) AND (x<0)) Or ((a<0) AND (x>0)) Then b:=x Else a:=x;
Until ABS(Abs(a)-Abs(b))<e;
Writeln(x);
Readln
End.

Но я так понимаю, что модуль должен возвращать какое-то значение, как функция например? И как его использовать для решения уравнения? Помогите, пожалуйста.
zZz
я долго пытался понять в чем проблема... построил график f(x)=5x-8Ln(x)-8, ... это меня несколько смутило, ведь ответ выходит где-т около 3.68824 , но потом дошло ... странно так но вы нигде не указываете функцию от которой считаете, пройдитесь пару раз по своему алгоритму и поймете что a у вас все время отдаляется от 0...

ошибка в этой строчке

Цитата
x:=(a+b)/2;


а нужно

Цитата
x:=(f(a)+f(b))/2;

{аналогично и с IF'ом}
If ((f(a)>0) AND (x<0)) Or ((f(a)<0) AND (x>0))

{f(a)- эт уравнение функции}
volvo
Цитата(zZz @ 23.05.2006 21:27)
ошибка в этой строчке

Цитата
x:=(a+b)/2;

а нужно

Цитата
x:=(f(a)+f(b))/2;

Да что ты? Х как раз считается правильно, это же деление ОТРЕЗКА пополам. А вот потом - надо действительно использовать F(...)

Короче, я понял, что поиск здесь никому на фиг не нужен dry.gif
FAQ: Численные методы решения уравнений -> Метод дихотомии
Есть же решение, но никого не интересует, изобретают велосипед заново...

Олег, зачем мы вообще FAQ составляем (или составляли? уже давно не обновляется)
zZz
2volvo извиняюсь, за допущенную ошибку, просто голова как-то другим занята была, вот решил отвлечься... не получилось... надеюсь, меня простят... x действитеьно считается правильно...
тогда просто надо поменять строчку
Цитата
If ((f(a)>0) AND (f(x)<0)) Or ((f(a)<0) AND (f(x)>0))


насчет FAQ - порою бывает куда интереснее самому решить задачу
Гость
Долго инета не было.... Спасибо всем, разбираюсь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.