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

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


Операции с полиномами

Поиск:
Вычисление производной

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Calculating derivative of the polynom (analitically)
//  (c) Johna Smith, 1996
//
//  Method description:
//    P(x) - polynom,  deg P = N
//    P(x) = a0 x^n + a1 x^(n-1) + ... + an
//    calculating P'(x)
//    P'(x) = n a0 x^(n-1) + (n-1) a1 x^(n-2) +...
//
//////////////////////////////////////////////////////////////////////////////

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

void PrintPolynom(float *p, int n)
{
  for(int i=0;i<n;i++)
    printf("%+f x^%d",*(p+i),n-i-1);
  printf("n");
}

#define N   4  // polynom degree

float Polynom[N]={1,2,3,4}; // x^3 + 2x^2 + 3x + 4 = P(x)

void main(void)
{
  // printing given polynom
  PrintPolynom(Polynom,N);

  // calculating derivative
  for(int i=0;i<N;i++)
    Polynom[i]*=(N-i-1);

  // printing derivative
  PrintPolynom(Polynom,N-1);
}



Деление полиномов

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Dividing polynoms (analitically)
//  (c) Johna Smith, 1996
//
//  Method description:
//    P(x) - polynom,  deg P = N
//    Q(x) - polynom,  deg Q = M, M<=N
//
//    P(x) = a0 x^n + a1 x^(n-1) + ... + an
//    Q(x) = b0 x^m + b1 x^(m-1) + ... + bm
//
//    calculating P(x)/Q(x)=S(x)+R(x)/Q(x), deg R < deg Q
//
//////////////////////////////////////////////////////////////////////////////

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

void PrintPolynom(float *p, int n)
{
  for(int i=0;i<n;i++)
    printf("%+f x^%d",*(p+i),n-i-1);
  printf("n");
}

#define N    4  // deg P-1
#define M    2  // deg Q-1

float P[N]={1,1,1,-3}; // x^3 + x^2 + x - 3 = P(x)
float Q[M]={1,-1};     // x - 1 = Q(x)
float S[N-M+1];        // S(x)
                

// 0 here means constant that will be in           

// the integral I(P)=I+C

void main(void)
{
  // printing given polynoms
  printf("P(x):n");
  PrintPolynom(P,N);
  printf("Q(x):n");
  PrintPolynom(Q,M);

  for (int i=0;i<N+M-1;i++) S[i]=0;

  // dividing
  for(i=0;i<N-M+1;i++)
  {
    S[i]=P[i]/Q[0];
    for(int j=0;j<M;j++)
      P[i+j]-=S[i]*Q[j];
  }

  // printing result
  printf("nresult:n");
  PrintPolynom(S,N-M+1);
  // and remainder
  printf("remainder:n");
  PrintPolynom(P+(N-M+1),M-1);
}



Интеграл от полинома

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Calculating integral of the polynom (analitically)
//  (c) Johna Smith, 1996
//
//  Method description:
//    P(x) - polynom,  deg P = N
//    P(x) = a0 x^n + a1 x^(n-1) + ... + an
//    calculating Integral(P(x)dx)
//    Integral(P(x)dx) =  a0/(n+1) x^(n+1) + a1/n x^n +...
//
//////////////////////////////////////////////////////////////////////////////

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

void PrintPolynom(float *p, int n)
{
  for(int i=0;i<n;i++)
    printf("%+f x^%d",*(p+i),n-i-1);
  printf("n");
}

#define N  4  // polynom degree

float Polynom[N+1]={8,6,4,1,0}; // 8x^3 + 6x^2 + 4x + 1 = P(x)

// 0 here means constant that will be in
// the integral I(P)=I+C

void main(void)
{
  // printing given polynom
  PrintPolynom(Polynom,N);

  // calculating integral
  for(int i=0;i<N;i++)
    Polynom[i]/=(N-i);

  // printing integral
  PrintPolynom(Polynom,N+1);
}



Умножение полиномов

Код

//////////////////////////////////////////////////////////////////////////////
//
//  Multiplication of polynoms (analitically)
//  (c) Johna Smith, 1996
//
//  Method description:
//    P(x) - polynom,  deg P = N
//    Q(x) - polynom,  deg Q = M
//
//    P(x) = a0 x^n + a1 x^(n-1) + ... + an
//    Q(x) = b0 x^m + b1 x^(m-1) + ... + bm
//
//    calculating S(x)=P(x)*Q(x)
//
//////////////////////////////////////////////////////////////////////////////

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

void PrintPolynom(float *p, int n)
{
  for(int i=0;i<n;i++)
    printf("%+f x^%d",*(p+i),n-i-1);
  printf("n");
}

#define N       4  // deg P-1
#define M       2  // deg Q-1

float P[N]={2,0,4,1}; // 2x^3 + 4x + 1 = P(x)
float Q[M]={1,-2};    // x - 2 = Q(x)
float S[M+N-1];       // S(x)

// 0 here means constant that will be in
// the integral I(P)=I+C

void main(void)
{
  // printing given polynoms
  PrintPolynom(P,N);
  PrintPolynom(Q,M);

  for (int i=0;i<N+M-1;i++) S[i]=0;

  // multiplying
  for(i=0;i<N;i++)
    for(int j=0;j<M;j++)
      S[i+j]+=P[i]*Q[j];

  // printing results
  PrintPolynom(S,N+M-1);
}
Сайт: forum.vingrad.ru






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

 

 

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


Популярные:
  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. Проверить дубляжи в столбце


 

 

 
 
На главную