![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
AlaRic |
![]()
Сообщение
#1
|
... ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: ![]() ![]() ![]() |
Написать программу решения нелинейных уравнений методом хорд.
|
![]() ![]() |
___ALex___ |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 282 Репутация: ![]() ![]() ![]() |
//___методы решения нелинейных одиночных уравнений___// //метод деления отрезка пополам(метод бисекции) Код 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 - 22.05.2004 4:04 |
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 11:18 |