Шпаргалка по численным методам
{кофф линейноного уавнения}
a:=y2-y1
b:=x1-x2
c:=-x1*(y2-y1)+y1*(x2-x1)
{лежит ли точка на прямой}
p:=false;
if (x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)=0
then p:=true;
{расположение точек}
l:='1';
z1:=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1);
z2:=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1);
if z1*z2<0;
then l:='2';
{расположение отрезков}
p:=true;
z1:=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1)
z2:=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1)
if z1*z2>0
then p:=false;
z3:=(x1-x3)*(y4-y3)-(y1-y3)*(x4-x3)
z4:=(x2-x3)*(y4-y3)-(y2-y3)*(x4-x3)
if z3*z4>0
then p:=false;
{Точка пересечения отрезков}
y=(a1c2-a2c1)/(a2b1-a1b2)
x=(b1c2-b2c1)/(b2a1-b1a2)
{Расстояние между точками}
d:=sqrt((x1-x2)^2+(y1-y2)^2)
{Расстояние от точки до прямой}
a:=y2-y1
b:=x1-x2
c:=-x1*(y2-y1)+y1(x2-x1)
t:=sqrt(a*a+b*b)
d:=abs((a*x3+b*y3+c)/t)
{Выпуклость много угольников}
L:='выпуклый'
for i:=1 to n do
begin
j:=i+1
k:=j+1
if i=n
then k:=1
m:=i-1
if i=1
then m:=n;
z1:=(x[m]-x[i])*(y[j]-y[i])-(y[m]-y[i])*(x[j]-x[i]);
z2:=(x[k]-x[i])*(y[j]-y[i])-(y[k]-y[i])*(x[j]-x[i]);
if z1*z2<0
then l:='Невыпулый'
end;
{площадь многоугольника}
ymin:=y[1];
for k:= 2 to n do
if ymin >y[k]
then ymin:=y[k];
for k:=1 to n+1 do
y1[k]:=y[k]-ymin;
s:=0;
for k:=1 to n do
s:=s+(x[i+1]-x[i])*(y1[i+1]+y1[i]);
s:=abs(s)/2;
{Cортировка выбором}
for i:=1 to n-1 do
begin
k:=i; max:=a[i];
for j:=i+1 to n do
if a[j]>max then
begin
max:=a[j];
k:=j;
end;
A[k]:=a[i]; a[i]:=maxl;
end;
{Cортировка обменом}
for i:=1 to n-1 do
for j:=1 to n-1 do
if a[j]>a[j+1] then
begin
x:=a[j];
a[j+1]:=a[j];
a[j]:=x;
end;
{Двоичный поиск}
l:=1; r:=n+1; a[n+1]:=x;
while (l<r) do
begin
m:=(r+l) div 2;
if aa[m]>x then
l:=m+1;
else
r:=m;
end;
{Сортировка бинарными вставками}
for i:=2 to n do
begin
r:=i;
l:=i;
while (l<r);
Begin
k:=(l+r) div 2;
if a[k]>a[i] then l:=k+1;
else r:=k;
end;
k:=r;
x:=a[i];
for m:=i downto k+1 do
a[m]:=a[m-1];
a[k]:=x;
end;
{Метод Гауса}
uses crt;
const
n=2;
var
m : array[0..n,0..n+1] of real;
x : array[0..n] of real;
i,j,k:integer;
a,s:real;
begin
for j:=0 to n do
for i:=0 to n do
m[j,i]:=random(4)+1;
For k:=0 to n do
begin
a:=m[k,k];
for i:=0 to n+1 do m[k,i]:=m[k,i]/a;
for j:=k to n-1 do
begin
a:=m[j+1,k];
for i:= 0 to n+1 do m[j+1,i]:=m[j+1,i]-m[k,i]*a;
end;
end;
for k:=n downto 0 do
begin
x[k]:=m[k,n+1];
for j:=n-1 downto k do
x[k]:=x[k]-m[k,j+1]*x[j+1];
end;
end.
{Дифференцирование}
const
d=0.0001;
x=2;
{y=x*x+2}
var
f,dx:real;
begin
dx:=x+d;
f:=((dx*dx+2)-(x*x+2))/d;
writeln(f);
end.
{Хорда}
var
x,xk,xk1,a,b:real;
function f(x:real):real;
begin
f:=x*x+x-2;
end;
begin
a:=-3;
b:=0;
xk1:=a;
xk := a - (f(a)*(b-a)) / (f(b)-f(a));
while abs(xk-xk1)>=0.00001 do
begin
x:=xk1;
if f(xk)*f(a)<0 then xk1:=xk-f(xk)*(xk-a)/(f(xk)-f(a))
else xk1:=xk-f(xk)*(b-xk)/(f(b)-f(xk));
xk:=x;
end;
end.
{ИНТЕГРИРОВАНИЕ}
{left rect}
const
x1=1;
x2=3;
n=1000;
{y=x*x+2}
var
s,y,h,x:real;
i:integer;
begin
h:=(x2-x1)/n;
s:=0;
x:=x1;
for i:=1 to n-1 do
begin
y:=x*x+2;
s:=s+y*h;
{!} x:=x+h;
end;
writeln(s);
end.
{right rect}
const
x1=1;
x2=3;
n=1000;
{y=x*x+2}
var
s,y,h,x:real;
i:integer;
begin
h:=(x2-x1)/n;
s:=0;
x:=x1;
for i:=1 to n-1 do
begin
{!} x:=x+h;
y:=x*x+2;
s:=s+y*h;
end;
writeln(s);
end.
{middle rect}
const
x1=1;
x2=3;
n=1000;
{y=x*x+2}
var
s,y,h,x:real;
i:integer;
begin
h:=(x2-x1)/n;
s:=0;
x:=x1;
for i:=1 to n-1 do
begin
{!} y:=(x+h/2)*(x+h/2)+2;
s:=s+y*h;
{!} x:=x+h;
end;
writeln(s);
end.
{middle rect}
const
x1=1;
x2=3;
n=1000;
{y=x*x+2}
var
s,y1,y2,h,x:real;
i:integer;
begin
h:=(x2-x1)/n;
s:=0;
x:=x1;
for i:=1 to n-1 do
begin
{!} y1:=x*x+2;
y2:=(x+h)*(x+h)+2;
s:=s+(y1+y2)*h/2;
{!} x:=x+h;
end;
writeln(s);
end.
{Простые Итерации}
uses crt;
var
x,f,x0:real;
begin
clrscr;
x:=2;
x0:=0;
while abs(x-x0)>0.000001 do
begin
x0:=sqrt(x+2);
x:=x0;
end;
writeln(x0);
end.
{Касательные}
var
d,x,xk,xk1,a,b:real;
function f(x:real):real;
begin
f:=x*x+x-2;
end;
function f1(x:real):real;
begin
f1:=2*x-1;
end;
begin
a:=-3;
b:=0;
d:=0.0001;
xk:=a;
xk1:=b;
while abs(xk-xk1)>=d do
begin
x:=xk1;
xk1:=xk-f(xk)/f1(xk);
xk:=x;
end;
end.