Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Расчет двойного интеграла при помощи метода Симпсона

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024

/*****************************************************************************

* .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     -                        L- П/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);

}

/*****************************************************************************

* .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); }




1. РАЗРАБОТКА ПРОГРАММЫ МУЛЬТИМЕДИЙНОГО КУРСА ПО ИНЖЕНЕРНОПЕДАГОГИЧЕСКОМУ ОБРАЗОВАНИЮ РОССИИ И УКРАИНЫ
2. Основи механіки ґрунтів Харків 2011Міністерство освіти науки молоді та спорту
3. Курсовая работа- Генно-инженерная технология
4. Понятие и предмет Банковского права Банковское право можно определить как ~ совокупность правовых норм
5. варіантом. Відобразити на екрані вхідний масив і результат роботи
6. Тема роботи Керівник роботи прізвище ім`я по батькові науковий ступінь вчене звання
7. ТЕМА- ГОСТРИЙ ХОЛЕЦИСТИТ ЗАТВЕРДЖЕНО на методичних зборах кафедри хірургії 2 ОНМедУ
8. Управление развитием содержания регионального образования (современная казахстанская модель образования)
9. ТЕМАТИКА 11 класс 7 Спецификация КИМ ЕГЭ 2014 г
10.  Свойство общее в качественном отношении для множества объектов физических систем их состояний и происход
11. ПЕДИАТРИЯ интернатура Врачинтерн по специальности ПЕДИАТРИЯ должен обладать общекультурными ОК
12. Гамлет як герой світової літератури
13. вариант 1 Укажите один из методов лечения наследственных заболеваний зубов- А введение ферментов В хир
14. Информационные жанры телевидения[1] более четверти века назад разработал классификацию жанров телевидения.
15. реферат дисертації на здобуття наукового ступеня кандидата медичних наук Київ ~ 2001 Дисерта.html
16. Лекция- Методика и организация проведения массовых спортивных физкультурных мероприятий в школе
17. Реферат на тему- Життя і творчість Анатолія Шияна Народився Анатолій Іванович Шиян 5 квітня 1906р
18. Новая риторика основные концепции и направлени
19. БАШКИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Кафедра государственного управления и финансов
20. Тема праведника в творчестве Лескова выходит за пределы этой книги истоки ее в самых ранних художественны