Помощь - Поиск - Пользователи - Календарь
Полная версия: метод простых итераций
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
punkska
. Написать модуль, содержащий подпрограмму нахождения корня
> любого алгебраического или трансцендентного уравнения вида x=f(x)
> при заданном начальном приближении Xo методом простых итераций, в
> соответствии с которым каждое следующее приближение к корню ищется
> по формуле: Xk+1=F(Xk) Итерационный процесс уточнения корня
> заканчивается при достижении условия /Xk+1 - Xk/<E, где E -
> допустимая погрешность вычисления.
> Использовать подпрограмму своего модуля для решения уравнения X-sinX=0.25 при Xo=1.17.


что то не получаеться я вот такой бред придумал

помогите плиз!!! напишите свой выриант!
volvo
А чего придумывать? Все уже давно придумано:
FAQ: Численные методы решения уравнений
punkska
volvo
спасибо!!!
я там нашёл много полезного спасибо! теперь и с матиматикой полегче!!! )
punkska
помогите исправить ошибки!!! очень надо!!
программа -
uses crt,unull;
type ftype=function (x:real):real;
{$f+}
function f(x:real):real;
begin
f:=sin(x)+0.25;
end;
{$f-}
var i:integer;
begin
clrscr;
writeln (fun(f,1.17,1.0e-5)1.gif5);
readkey;
end.


модуль
unit Unull;
interface
type ftype=function (x:real):real;
procedure fun(f:ftype; x,eps:real);

implementation

procedure fun(f:ftype; x,eps:real);
var i,max_iter:integer; x0:real;
begin {основная программа}


max_iter:=100;
i:=0;
repeat

x0:=x;
x:=x0+F(x0); {сердце метода итераций}
inc(i);
writeln('--- Итерация ',i:3,' x=',x);
writeln('F(x)=',F(x),' точность=',abs(x-x0));
until (abs(x-x0)<=eps)or(i>max_iter);

if (abs(x-x0)<=eps) then writeln('Ответ: X=',x)
else writeln('Ответ не найден! За ',max_iter:0,' шагов итерация не сошлась.');

end;


Begin
end.


не компилируеться((( помогите
volvo
Правильно, что не компилируется... У тебя же Fun описано как процедура, как же ты хочешь использовать ее как функцию?
Выходов у тебя 2:

1. Описываешь Fun как функцию, и используешь в основной программе как сейчас...
2. Вместо
writeln (fun(f,1.17,1.0e-5)1.gif5);

делаешь:
fun(f,1.17,1.0e-5);
punkska
Цитата(volvo @ 26.05.05 20:03)
Правильно, что не компилируется... У тебя же Fun описано как процедура, как же ты хочешь использовать ее как функцию?
Выходов у тебя 2:

1. Описываешь Fun как функцию, и используешь в основной программе как сейчас...
2. Вместо
writeln (fun(f,1.17,1.0e-5)1.gif5);

делаешь:
fun(f,1.17,1.0e-5);



во втором слушае пишит ERROR 3

не мог бы помочь с первым способом! а то описываю как функцию и не врубаюсь как грамотно передать значение функции fun
volvo
Цитата(punkska @ 26.05.05 20:15)
во втором слушае пишит ERROR 3

Как ты думаешь, я просто так запостил этот вариант или сначала проверил? У меня скомпилировалось без всяких ошибок... Тем более Error 3 - это "Неизвестный идентификатор" - откуда ему взяться?

А по-поводу функции - у тебя же внутри Fun уже распечатывается значение, что ты еще хочешь возвращать? Плюс к этому, нужно учесть вариант, что итерация не сошлась - то есть здесь процедура будет предпочтительнее...
punkska
volvo - Суровый Профи!
так оно и есть))) спасибо!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.