Метод хорд паскаль
‘ w /> Внимание! Действует предмодерация
Подраздел FAQ (ЧАВО, ЧАстые ВОпросы) предназначен для размещения готовых рабочих программ, реализаций алгоритмов. Это нечто вроде справочника, он наполнялся в течение 2000х годов. Ваши вопросы, особенно просьбы решить задачу, не пройдут предмодерацию. Те, кто наполнял раздел, уже не заходят на форум, а с теми, кто на форуме сейчас, лучше начинать общение в других разделах. В частности, решение задач — здесь.
Группа: Пользователи
Сообщений: 7
Репутация:
Уникальный
Группа: Пользователи
Сообщений: 64
Пол: Мужской
Репутация: 2
Метод половинного деления
Программа как и положено по теории находит сначала отрезки где функция меняет знак на противоположный (то есть — где лежит корень), потом находит этот корень и в заключении строит график.
var
x:real;
a:array [1..2, 1..255] of real;
b:boolean;
i,n:byte;
y1,y2,dr,md,maxx,maxy,maxx2,maxy2:integer;
procedure search(a,b:real; var x:real);
const e=0.0001; < e — Точность >
begin
repeat
x:=(a+b)/2;
if f(a)*f(x)>0 then a:=x else b:=x;
until abs(f(x)) 0 then b:=true;
repeat
if b=true then begin
if f(x) 0;
if b=false then begin
if f(x)>0 then begin
n:=n+1;
a[2,n]:=x;
repeat
x:=x-0.1;
until f(x) d2;
if n=0 then writeln(‘Корней нет . ‘)
else begin
writeln(‘В уравнении F(x) на отрезке [‘,d1,’,’,d2,’] найдено ‘,
n,’ корн(-ей/-я/-ь)’);
for i:=1 to n do begin
search(a[1,i],a[2,i],x);
writeln(‘X’,i,’ = ‘,x:5:3);
end;
end;
writeln(‘Нажмите клавишу «Enter» для построения’);
readln;
dr:=9;
md:=2;
initgraph(dr,md,’c:bpbgi’);
setcolor(12);
maxx:=getmaxx;
maxy:=getmaxy;
maxx2:=maxx div 2;
maxy2:=maxy div 2;
<ось OY>
line(maxx2,0,maxx2,maxy);
line((maxx2)-4,10,maxx2,0);
line((maxx2)+4,10,maxx2,0);
line((maxx2)+10,5,maxx2+14,9);
line((maxx2)+14,9,maxx2+18,5);
line((maxx2)+14,9,maxx2+14,14);
<ось OX>
line(0,maxy2,maxx,maxy2);
line(maxx-10,maxy2-4,maxx,maxy2);
line(maxx-10,maxy2+4,maxx,maxy2);
line(maxx-15,maxy2-12,maxx-7,maxy2-20);
line(maxx-15,maxy2-20,maxx-7,maxy2-12);
<График уравнения>
x:=d1;
setcolor(15);
repeat
y1:=maxy2-round(f(x-1));
y2:=maxy2-round(f(x));
if (y1>0) and (y1 0) and (y2 d2;
readln;
closegraph;
end.
Эскизы прикрепленных изображений
Пионер
Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Шурик
Репутация:
program Metod_hord_graph;
uses
crt, graph;
var
gd, gm : integer;
maxY, minY, x1, x2, x3, y1, y2: real;
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) 10000) and (ty <> 10000) then lineto(tx,ty);
delay(100);
until abs(x — grmaxx )
Эскизы прикрепленных изображений
Профи
Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил
Репутация: 11
Метод итераций. Модернизирован так, чтобы лучше и быстрее сходился. Для этого функция F(x) делится на коэффициент M, который является численным значением производной функции F(x) в каждой точке итерационного приближения. И все равно, главное во всех методах итерационных приближений — это начальное приближение, т.е. то самое первое значение x, с которого стартует метод итераций.
program ITERAT;
uses crt;
var
i :integer;
x,x0,eps,M :real;
begin <основная программа>
clrscr;
write(‘Введите приближенное значение x=’); readln(x);
write(‘Введите точность вычислений eps=’); readln(eps);