![]() |
![]() |
junk |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Репутация: ![]() ![]() ![]() |
Метод дихотомии (деления отрезка пополам)
Цитата Программа находит корень уравнения F(x) = 0, где F(x) - непрерывная на отрезке [a,b] функция, удовлетворяющая условию F(a)*F(B)<0. Для нахождения корня отрезок [a,b] делится пополам и выбирается тот полуинтервал, на концах которого знаки F(x) разные. Затем процесс деления повторяется до тех пор, пока длина интервала не станет меньше Eps. {$n+} Метод хорд {$n+} Метод Ньютона (касательных) Цитата Действительный корень x уравнения F(x) = 0 вычисляется методом Ньютона по итерационному уравнению: Xk+1 = Xk - F(Xk)/F'(Xk) {$n+} Метод Ньютона с аппроксимацией производной Цитата Если вычисление производной в методе Ньютона затруднено, можно заменить ее вычисление оценкой: F'(X)= (F(X+h)-F(X))/h {$n+} |
![]() ![]() |
SHnur |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 81 Пол: Мужской Реальное имя: Шурик Репутация: ![]() ![]() ![]() |
Программа демонстрирует графический способ нахождения корней методом хорд!
Исходный код program Metod_hord_graph; uses crt, graph; var gd, gm : integer; maxY, minY, x1, x2, x3, y1, y2: real; const k3 = 3;{ Koeficenti } k2 = -7; k1 = -6; k0 = 2; {} grmaxX = 5; { Granici } grminX = -5; {---} function f(x: real): real; begin f := k3*(x*x*x)+k2*(x*x)+k1*(x)+k0; end; {---} function RealToScr(p: real; xory: boolean): integer; var i: integer; ch: boolean; rr: real; begin ch := false; if xory then begin rr := grminx; for i := 0 to 645 do begin if abs(rr-p) < 0.1 then begin ch := true; RealToScr := i; end; rr := rr + ((abs(grmaxx) + abs(grminx))/640 ); end; end else begin rr := maxy; for i := 0 to 479 do begin if abs(rr-p) < 1 then begin ch := true; RealToScr := i; end; rr := rr - ((abs(maxy) + abs(miny))/480 ); end; end; if not(ch) then realtoscr := 10000; end; {---} var i, tx, ty: integer; x: real; s: string; begin {Graphic initialization} gd := vga; gm := vgahi; initgraph(gd,gm,'c:\programs\language\bp\bgi'); {} maxY := f(grmaxX); minY := f(grminX); x1 := 1; x2 := 5; { } x := grminx; for i := 0 to 639 do begin putpixel(i,realtoscr(0,false),red); end; moveto(realtoscr(x,true),realtoscr(f(x),false)); repeat x := x + 0.01; tx :=realtoscr(x,true); ty :=realtoscr(f(x),false); if (tx <> 10000) and (ty <> 10000) then lineto(tx,ty); delay(100); until abs(x - grmaxx )<1E-5; outtextxy(0,3,'Press any key !'); readkey; setfillstyle(1,black); bar(0, 0, 620, 10); repeat setcolor(green); line(realtoscr(x1,true),realtoscr(f(x1),false), realtoscr(x2,true),realtoscr(f(x2),false)); y1 := f(x1); y2 := f(x2); x3 := ((x1 * y2) - (x2 * y1)) / (y2 - y1); if f(x3) < 0 then x1 := x3 else x2 := x3; delay(10000); until (abs(f(x3)) < 1); str(x3 :2:5,s); s := 'x = ' + s; setcolor(white); outtextxy(0,5,s); readkey; end. Эскизы прикрепленных изображений ![]() |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 6:06 |