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

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

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

> Численные методы
сообщение
Сообщение #1


...
*****

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

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


Написать программу решения нелинейных уравнений методом хорд.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


                                                 
//___методы решения нелинейных одиночных уравнений___//

//метод деления отрезка пополам(метод бисекции)
Код

function MetDelOtrPop(a, b, eps: Extended): Extended;
var
c, Fa: Extended;

function Func(Arg: Extended): Extended;
begin

Result := Arg - Sin(Arg) - 0.25;//здесь указывается нужная ф-ия

end;

begin

Fa := Func(a);
repeat
 c := (a + B) / 2;
 if Fa * Func© > 0 then a := c else b := c;
until Abs(Func©) <= eps;
Result := c;

end;


//метод хорд
Код

function MetHord(a, b, eps: Extended): Extended;
var
Pribl, PredPribl: Extended;

function Func(x: Extended): Extended;
begin

Result := Sqr(x) - 2;//здесь указывается нужная ф-ия

end;

begin

Pribl := b;
repeat
 PredPribl := Pribl;
 Pribl := PredPribl - (a - PredPribl) * Func(PredPribl) / (Func(a) - Func(PredPribl));
until Abs(Pribl - PredPribl) <= eps;
Result := Pribl;

end;

//метод Ньютона(метод касательных)
Код

function MetNewtona(nachpribl, eps: Extended): Extended;
var
Pribl, PredPribl: Extended;

function Func(Arg: Extended): Extended;
begin

Result := Sqr(Arg) - 2;//здесь указывается нужная ф-ия

end;

function ProizvFunc(Arg: Extended): Extended;
begin

Result := 2 * Arg;//здесь указывается производная нужной ф-ии

end;

begin

Pribl := nachpribl;
repeat
 PredPribl := Pribl;
 Pribl := PredPribl - Func(PredPribl) / ProizvFunc(PredPribl);
until Abs(Pribl - PredPribl) <= eps;
Result := Pribl;

end;

//модификация метода Ньютона 1(применяется когда нельзя получить производную функции)
Код

function MetNewtona(nachpribl, eps: Extended): Extended;
var
Pribl, PredPribl: Extended;

function Nevyazka(Arg: Extended): Extended;

function Func(Arg: Extended): Extended;
begin

Result := Sqr(Arg) - 2;//здесь указывается нужная ф-ия

end;

begin

Result := -2 * eps * Func(Arg) / (Func(Arg + eps) - Func(Arg - eps));

end;

begin

Pribl := nachpribl;
repeat
 PredPribl := Pribl;
 Pribl := PredPribl + Nevyazka(PredPribl);
until Abs(Pribl - PredPribl) <= eps;
Result := Pribl;

end;

//модификация метода Ньютона 2(метод Рыбакова)

Код

type
ArrayResh = Array of Extended;

function MetRib(a, b, eps: Extended; M: LongWord): ArrayResh;
var
x, dx: Extended;
Sch: LongWord;
CheckOnOut: Boolean;

function Func(Arg: Extended): Extended;
begin

Result := Sqr(Arg) - 2;//здесь указывается нужная ф-ия

end;

begin

Sch := 0;
x := a;
 repeat
  repeat
   dx := Abs(Func(x)) / M;
   x := x + dx;
   if dx <= eps then CheckOnOut := True else CheckOnOut := False;
  until CheckOnOut or (x > B);
  if CheckOnOut then
   begin
    Inc(Sch);
    SetLength(Result, Sch);
    Result[Sch - 1] := x;
    x := x + 20 * eps;
   end;
 until x > b;

end;

//метод простой итерации
Код

function SimpleIter(nachpribl, eps: Extended): Extended;
var
Pribl1, Pribl2: Extended;

function NeedFunc(x: Extended): Extended;
begin

Result := Sin(x) + 0.25;//здесь указывается нужная ф-ия

end;

begin

Pribl2 := nachpribl;
repeat
 Pribl1 := Pribl2;
 Pribl2 := NeedFunc(Pribl1);
until Abs(Pribl1 - Pribl2) <= eps;
Result := Pribl2;

end;


//комбинированный метод(метод хорд + метод касательных)
Код

function CombMet(a, b, eps: Extended): Extended;
var
PriblN, PriblH: Extended;

function Func(x: Extended): Extended;
begin

Result := Sqr(x) - 2;//здесь указывается нужная ф-ия

end;

begin

PriblN := a;
PriblH := b;
repeat
 PriblH := PriblH - (PriblN - PriblH) * Func(PriblH) / (Func(PriblN) - Func(PriblH));
 PriblN := PriblN - 2 * eps * Func(PriblN) / (Func(PriblN + eps) - Func(PriblN - eps));
until Abs(PriblN - PriblH) <= eps;
Result := (PriblN + PriblH) * 0.5;

end;



вот

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

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


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

 





- Текстовая версия 20.04.2024 8:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name