Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:

Error. Page cannot be displayed. Please contact your service provider for more details. (20)


Специальные функции (часть 2)

Поиск:
arcsh x

Код

//////////////////////////////////////////////////////////////////////////////
//
//  arsh x function calculating.
//  (c) Johna Smith, 1996
//
//  Method description:
//    Calculating arccos x using the following formula:
//                                          2n+1
//                   N      n 1*3*5..(2n-1)x
//     arsh x = x + SUM (-1)  ------------------ , |x|<1
//                  n=1       2*4*6..(2n)(2n+1)
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

#define N       30

double Arsh(double x)
{
  double arsh=x;
  double a=x;

  for (int i=1;i<N;i++)
  {
    a *= -x*x*(2*i-1)*(2*i-1)/((2*i+1)*2*i);
    arsh += a;
  }
  return arsh;
}

void main(void)
{
  printf("Exact arsh(0.5210953)=0.5, this arsh(0.5)=%g.",Arsh(0.5210953));
}



arcsh z

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Calculactin function arcsh z, where z is a complex value
//  (c) Johna Smith, 1996
//
//  Method description:
//       1            2    2     1            2    2
//    A= - sqrt( (x+1)  + y  ) + - sqrt( (x-1)  + y  )
//       2                       2
//
//       1            2    2     1            2    2
//    B= - sqrt( (x+1)  + y  ) - - sqrt( (x-1)  + y  )
//       2                       2
//                         2
//    arcsh z = ln(a+sqrt(a  -1)) - i*acrsin B
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

struct complex
{
  float re;
  float im;
};

void show_complex(complex c) // this functions displays complex value
{
  printf("%f%+fi",c.re,c.im);
}

complex Arcsh(complex z)
{
  complex c;
  float A,B,swp;

  swp=z.im;    // calculating arsh(z) as -arcsin(iz)
  z.im=z.re;
  z.re=-swp;

  A=sqrt((z.re+1)*(z.re+1)+z.im*z.im)/2 +
         sqrt((z.re-1)*(z.re-1)+z.im*z.im)/2;
  B=sqrt((z.re+1)*(z.re+1)+z.im*z.im)/2 -
         sqrt((z.re-1)*(z.re-1)+z.im*z.im)/2;

  c.re=log(A+sqrt(A*A-1));
  c.im=-asin(B);

  return c;
}

complex z={3,2};

void main(void)
{
  printf("Arcsh(");
  show_complex(z);
  printf(") = ");
  show_complex(Arcsh(z));
}



arth x

Код

//////////////////////////////////////////////////////////////////////////////
//
//  arth x function calculating.
//  (c) Johna Smith, 1996
//
//  Method description:
//    Calculating arth x using the following formulas:
//                       2n+1
//                  N   x
//      arth x  =  SUM -------
//                 n=0  2n+1
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

#define N       30

double Arth(double x)
{
  double arth=x;
  double a=x;

  for (int i=1;i<N;i++)
  {
    a *= x*x;
    arth += a/(2*i+1);
  }

  return arth;
}

void main(void)
{
  printf("Exact arth(0.4621171)=0.5, this arth(0.4621171)=%g.",Arth(0.4621171));
}



arth z

Код

//////////////////////////////////////////////////////////////////////////////
//
//  arctg z function calculating, where z is a complex value
//  (c) Johna Smith, 1996
//
//  Method description:
//
//                   1    x^2+(y+1)^2    1          2x
//     arctg z  =    - ln(-----------) -i- arctg(---------)
//                   4    x^2+(y-1)^2    2       1-x^2-y^2
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

struct complex
{
  float re;
  float im;
};

void show_complex(complex c) // this functions displays complex value
{
  printf("%f%+fi",c.re,c.im);
}

complex Arth(complex z)
{
  complex c;
  float swp;

  swp=z.im;    // calculating arth(z) as -arctg(iz)
  z.im=z.re;
  z.re=-swp;

  c.re=log((z.re*z.re+(z.im+1)*(z.im+1))/(z.re*z.re+(z.im-1)*(z.im-1)))/4;
  c.im=-atan(2*z.re/(1-z.re*z.re-z.im*z.im))/2;

  return c;
}

complex z={0.3,0.2};

void main(void)
{
  printf("Arth(");
  show_complex(z);
  printf(") = ");
  show_complex(Arth(z));
}
 


Функция Бесселя

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Bessel functions calculating.
//  (c) Johna Smith, 1996
//
//  Method description:
//    Bessel functions are solutions of the followind eqation:
//         2                     2
//        d w     1 dw          v
//        ---- +  - -- + ( 1 - --- )w = 0
//          2     x dx           2
//        dx                    x
//
//    This program calculates Bessel functions for integer v as infinite sum
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

// this function returns value of Jn(x)
double Jn(int n,double x)
{
  float nfact=1,ifact=1,nifact=1,sum=0,x2,element;
  int i;

  if (n>1) for (i=0;i<n;i++) nfact*=(i+1);  // n factorial
  x2=x*x/4;
  i=0;
  do
  {
    i++;
    ifact*=i;
    nifact*=(n+i);
    element=(i%2==0?1:-1)*pow(x2,i)/(ifact*nifact);
    sum+=element;
  } while (fabs(element)>1e-9);

  return pow(x/2,n)*(sum+1)/nfact;
}

// this function returns value of In(x)
double In(int n, double x)
{
  float nfact=1,ifact=1,nifact=1,sum=0,x2,element;
  int i;

  if (n>1) for (i=0;i<n;i++) nfact*=(i+1);  // n factorial
  x2=x*x/4;
  i=0;
  do
  {
    i++;
    ifact*=i;
    nifact*=(n+i);
    element=pow(x2,i)/(ifact*nifact);
    sum+=element;
  } while (fabs(element)>1e-9);

  return pow(x/2,n)*(sum+1)/nfact;
}

void main(void)
{
  // Examples
  printf("J0(0.5)=%fn",Jn(0,0.5));
  printf("J30(20)=%fn",Jn(30,20));
  printf("I0(2)=%fn",In(0,2));
  printf("I1(2)=%fn",In(1,2));
}



Гамма-функция

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Gamma function calculating.
//  (c) Johna Smith, 1996
//
//  Method description:
//             infinity  -t  x-1
//   Gamma(x)= Integral e   t    dt
//                0
//
//   This integral is approximated and calculated by Stirling's formula:
//                A
//             (A)    1/12A
//      Gamma= (-)  e       D sqrt(2 Pi A)
//             (e)
//
//   This algorithm is oriented for -10<x<=70
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

#define E  2.7182818285
#define Pi    3.1415926536

// this function returns value of Gamma(x)
double Gamma(double x)
{
  double A,z,g,c,D;
  int b;

  A=x-1;
  z=A-64;
  if (z<0)
  {
    b=abs((int)(z-1));
    c=A;
    A+=b;
    D=1;
    for(int i=b;i>0;i--)
    {
       c++;
       D/=c;
    }
  } else D=1;
  g=pow(A/E,A)*exp(1/(12*A))*D*sqrt(2*Pi*A);

  return g;
}

void main(void)
{
  // Examples
  printf("Gamma(-1.5)=%f, exact value is 2.363271801n",Gamma(-1.5));
  printf("Gamma(-0.5)=%f, exact value is -3.544907702n",Gamma(-0.5));
  printf("Gamma(1.5)=%f, exact value is 0.886226926n",Gamma(1.5));
  printf("Gamma(40)=%f, exact value is 2.039788208E+046n",Gamma(40));
}



Бета-функция

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Beta function calculating.
//  (c) Johna Smith, 1996
//
//  Method description:
//                 1      x-1      w-1
//   Beta(x,w)= Integral t    (1-t)   dt
//                 0
//              Gamma(x) Gamma(w)
//   Beta(x,w)= -----------------
//                 Gamma(x+w)
//
//   This algorithm is oriented for -10 < x,w,x+w <= 70
//
//////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <math.h>

#define E       2.7182818285
#define Pi      3.1415926536

// this function returns value of Gamma(x)
double Gamma(double x)
{
  double A,z,g,c,D;
  int b;

  A=x-1;
  z=A-64;
  if (z<0)
  {
     b=abs((int)(z-1));
     c=A;
     A+=b;
     D=1;
     for(int i=b;i>0;i--)
     {
        c++;
        D/=c;
     }
  } else D=1;
  g=pow(A/E,A)*exp(1/(12*A))*D*sqrt(2*Pi*A);

  return g;
}

double Beta(double x, double w)
{
  return(Gamma(x)*Gamma(w)/Gamma(x+w));
}

void main(void)
{
  // Examples
  printf("Beta(1,2)=%f, exact value is 0.5n",Beta(1,2));
}
Сайт: forum.vingrad.ru






Просмотров: 4376

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную