Численные методы  Двойной интеграл по формуле Симпсона Численные методы  Двойной интеграл по формуле Симпсона
Численные методы  Двойной интеграл по формуле Симпсона РЕФЕРАТЫ РЕКОМЕНДУЕМ  
 
Тема
 • Главная
 • Авиация
 • Астрономия
 • Безопасность жизнедеятельности
 • Биографии
 • Бухгалтерия и аудит
 • География
 • Геология
 • Животные
 • Иностранный язык
 • Искусство
 • История
 • Кулинария
 • Культурология
 • Лингвистика
 • Литература
 • Логистика
 • Математика
 • Машиностроение
 • Медицина
 • Менеджмент
 • Металлургия
 • Музыка
 • Педагогика
 • Политология
 • Право
 • Программирование
 • Психология
 • Реклама
 • Социология
 • Страноведение
 • Транспорт
 • Физика
 • Философия
 • Химия
 • Ценные бумаги
 • Экономика
 • Естествознание




Численные методы Двойной интеграл по формуле Симпсона


------------------------------------------------------------------------------
Курсовой проект это по
численным методам.
Считает он двойной интеграл по формуле
Симпсона (парабол еще называют)
Сделал я его на третьем курсе, учась в группе ПС-301 на прикладной
математике, чему & очень рад.
(c) '94 by Петренко Вадим
Сергеевич
А препода Панюков А.В. звали, & поставил он мне пятак, что само по
себе довольно круто.
26 мая 1994 год.
/*****************************************************************************
*
.FILE  : func.c
*
.TITLE : Содержит функции пользователя, которые можно
*        : изменять без перекомпиляции основной
программы
*
.DESCR : После изменения этого модуля его необходимо перекомпилировать
*        : и слинковать с numeric.obj
*        :
*        :
*
.NOTE  : NOT FOR RENTAL OR SALE.
*        : FEDERAL LAW PROVIDES SEVERE CIVIL
& CRIMINAL PENALTIES FOR
*        : UNAUTHORIZED DUPLICATION OR
DISTRIBUTION.
*        :
*        : (C) '94 by P$P
*****************************************************************************/
#include
<math.h>
/*
выбираемая пользователем функция No.1 */
double
f1 (double x, double y)
 { return 0.5 * cos (y); }
/*
выбираемая пользователем функция No.2 */
double
f2 (double x, double y)
 { return 0.5 - sin (y); }
/*
выбираемая пользователем функция No.3 */
double
f3 (double x, double y)
 { return sqrt (x * x + y * y); }
/*****************************************************************************
*
.FILE  : numeric.c
*
.TITLE : Расчет двойного интеграла при помощи метода Симпсона (парабол)
*
.DESCR : Курсовой проект по численным методам (1994 год)
*        :
*        :  Выполнил: Петренко В.С.
(гр. ПС-301)
*        : 
Проверил: Панюков А.В.
*        :
*
.NOTE  : NOT FOR RENTAL OR SALE.
*        : FEDERAL LAW PROVIDES SEVERE CIVIL
& CRIMINAL PENALTIES FOR
*        : UNAUTHORIZED DUPLICATION OR
DISTRIBUTION.
*        :
*        : (C) '94 by P$P
*****************************************************************************/
#include
<math.h>
#include
<stdio.h>
/*****************************************************************************
*
.NAME   : m_Simpson
*
.TITLE  : Расчет интеграла методом
Симпсона (парабол)
*
.DESCR  :
*         :
*
.PARAMS : double m_Simpson (double (*func) (double, double),
*         :                   double t_fix, double t_limit, int N);
*         :        double (*func) (double, double) - подынтегральная ф-я
*         :        double t_fix   -
фиксированный первый аргумент
*         :        double t_limit - верхний предел интегрирования,
*         :                         нижний равен -t_limit
*         :        int N          - число точек разбиения
*
.RETURN : Значение вычисленного интеграла
*****************************************************************************/
double
m_Simpson (double (*func) (double, double),
                  double t_fix, double
t_limit, int N)
 {
   double sum1 = 0; /* Дї                        */
   double sum2 = 0; /*  і временные переменные   */
   double sum3 = 0; /* ДЩ                        */
   double sum;      /* конечный результат       
*/
   double h   
= (2 * t_limit) / N; /* шаг сетки */
   int i;           /* временная                 */
    sum1 = (*func) (t_fix, -t_limit) + (*func)
(t_fix, +t_limit);
    for (i = 1; i <= N - 1; i++) sum2 +=
(*func) (t_fix, -t_limit + (i * h));
    sum2 *= 2;
    for (i = 1; i <= N; i++) sum3 +=
(*func) (t_fix, -t_limit + ((i-0.5) * h));
    sum3 *= 4;
    sum = sum1 + sum2 + sum3;
    sum = (h / 6) * sum;
  return sum;
 }
                      /*                       */
                      /* Глобальные переменные
*/
                      /* ~~~~~~~~~~~~~~~~~~~~~
*/
#define
PI 3.1415926536    /* число П                                   */
double
k;                  /* параметр функции
- задается пользователем */
int
N_MAX;                 /* число узлов
сетки разбиения     */
double
(*currFunc) (double, double); /* выбранная пользователем функция */
double
f1 (double x, double y);
double
f2 (double x, double y);
double
f3 (double x, double y);
/*****************************************************************************
*
.NAME   : double F (double dummy, double
t)
*
.TITLE  : Вычисляет внутренний интеграл
(G (t)).
*         : См. текст курсового проекта.
*
.DESCR  :                           П/2
*         :                            Ъ
*         : первая вычисляемая функция і G (t + П/2) * sin (t + П/2) dt
*         :             t             
Щ
*         :             Ъ           
-П/2
*         : где G (t) = і currFunc (t, tau)
dtau
*         :             Щ
*         :            -t
*
.PARAMS : double F (double dummy, double t);
*         :        double dummy - фиктивный первый аргумент, при вызове этой
*         :                       функции он не используется, т.к. она
*         :                       функция одного аргумента
*         :        double       -
действительный второй аргумент
*
.RETURN : Значение функции: G (t) * sin (k * t);
*****************************************************************************/
double
F (double dummy, double t)
 {
   double G;
   t = t + PI / 2; /* сдвижка начала
координат, чтобы пределы    */
                   /* были симметричны (в
нашем случае - на П/2) */
    G = m_Simpson (currFunc, t, t, N_MAX);
  return G * sin (k * t);
 }
/*****************************************************************************
*
.NAME   : main
*
.TITLE  : Основная диалоговая функция.
*
.DESCR  : Запрашивается интересующая
пользователя функция,
*         : параметр k и число узлов сетки
N_MAX.
*         : Выводит на экран вычисленное
значение интеграла и
*         : два справочных значения - П и П/2.
*         :
*
.PARAMS : void main (void);
*
.RETURN :
*****************************************************************************/
void
main (void)
 {
   double integral;  /* значение вычисленного интеграла */
   int   
selection; /* номер выбранной функции         */
   /* массив доступных функций */
   double (*functions []) (double, double) = {
f1, f2, f3 };
    printf ("\n   Вычисление интеграла методом Симпсона (парабол)   ");
    printf ("\n   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   ");
    printf ("\n              ЪЪ                                     ");
    printf ("\n          I = іі sin k(x + y) f (x, y) dx dy         ");
    printf ("\n              ЩЩ                                     ");
    printf ("\n              D                                      ");
    printf ("\n где D = { (x, y): x, y
>= 0; x + y <= П }, f Е C (D)");
    printf ("\n");
    printf ("\nДля какой функции
рассчитывать:             ");
    printf
("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~             ");
    printf ("\n  1) f (x, y) = 0.5 * cos (y)               ");
    printf ("\n     Ъ                       
ЪД 0; k != 1  ");
    printf ("\n     і sin x * sin (kx) dx => і             ");
    printf ("\n     Щ                       
АД П/2; k = 1 ");
    printf ("\n                                            ");
    printf ("\n  2) f (x, y) = 0.5 - sin (y)               ");
    printf ("\n     Ъ                                      ");
    printf ("\n     і x * sin (kx) dx =====> П; k = 1      ");
    printf ("\n     Щ                                      ");
    printf ("\n                                            ");
    printf ("\n  3) f (x, y) = sqrt (x * x + y * y)");
    printf ("\n");
    do
     {
       printf ("Ваш выбор: ");
       scanf ("%d", &selection);
     } while (!(1 <= selection &&
selection <= 3));
    printf ("Параметр k: ");
    scanf ("%lg", &k);
    do
     {
       printf ("Число узлов сетки N:
");
       scanf ("%d", &N_MAX);
     } while (!(N_MAX > 0));
    printf ("\n");
    printf ("\n Расчет интеграла
...");
    currFunc = functions [selection - 1];          /* текущая функция    */
    integral = m_Simpson (F, 0, PI / 2,
N_MAX);    /* вычисляем интеграл */
    printf ("\n Значение интеграла равно:
%.12lg", integral); /* вывод   */
    printf ("\n Величины: П = %.12lg; П/2
= %.12lg", PI, PI / 2);
 }
numeric.c
func.c
*** РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ *** ВычисЃEыGЃEинтегралЃEЃEтодоЃEСимЃEЃEЃE(ЃEрабоЃE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ЪЪ I = іі sin k(x + y) f (x, y) dx dy ЩЩ
D
гдЃED = {
(x, y): x, y >= 0; x + y <= П }, f Е
C (D)
ДЃE ЃEЃEЃEфуыIциЃEрассчитывать:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1) f (x, y) = 0.5 * cos
(y) Ъ
ЪД 0; k != 1 і sin x * sin (kx) dx => і Щ
АД П/2; k = 1 2) f (x, y) = 0.5 - sin
(y) Ъ і x * sin (kx) dx =====> П; k = 1 Щ 3) f (x, y) = sqrt (x * x + y
* y)
Ваш выбоЃE 1
ПараметЃEk:
1
ЧисЃE узЃEЃEсеткЃEN: 64
РасчеЃEинтегралЃE...
ЗъьчеыGЃEинтегралЃEравнЃE
1.57079633258
ВеличинЃE П =
3.1415926536; П/2 = 1.5707963268
Курсовая работа численные методы решение интеграла. Численное интегрирование метод симпсона реферат.

      ©2010