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

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



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



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.