Смекни!
smekni.com

Шпаргалка по численным методам

{кофф линейноного уавнения}

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.