Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Вычислени двойного интеграла методом Симпсона - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать два производных класса от колоды карт http://www.cyberforum.ru/cpp-beginners/thread113143.html
Создать класс карта, имеющая ранг и масть. Карту можно перевернуть и открыть. Создать класс - колода карт, содержащий карты. Создать два производных класса от колоды карт, в одном карты могут...
C++ Списки типа "ОЧЕРЕДЬ" Задание: Создать однонаправленную очередь с числами в диапазоне от –50 до +50. После создания очереди выполнить индивидуальное задание. В конце работы все очереди должны быть удалены. ... http://www.cyberforum.ru/cpp-beginners/thread113138.html
Представления чисел C++
1. Записать каждое десятичное число в виде целой десятичной, восьмеричной и шестнадцатеричной константы: 126 10 219 77 2. Записать каждое десятичное число в виде вещественной константы в форме с...
C++ статья про конструктор копировщик
помогите с трудностью,не понимаю что такое конструктор копировщик,дайте статью или что то такое
C++ Шаблоны.Исправить ошибки. http://www.cyberforum.ru/cpp-beginners/thread113111.html
Вот прога: #include <iostream> using namespace std; template <class Data> class List{ class Node{ public: int d; Node *next, *prev; Node( Data dat = 0){d = dat; next = 0; prev = 0;}
C++ Возвести матрицу в целочисленную степень Каким образом можно возвести двумерный массив (т. е. матрицу) в целочисленную степень?Например for(int i=0;i<4;i++) D=D^i; подробнее

Показать сообщение отдельно
KPUCTUHA
Сообщений: n/a

Вычислени двойного интеграла методом Симпсона - C++

05.04.2010, 21:07. Просмотров 1327. Ответов 0
Метки (Все метки)

Надо вычислить интеграл методом симпсона. Внешний интеграл в пределах от -1 до 1 , а внутренний от -(1-g^4)^4 до (1-g^4)^4. Программа вместа результата выдает NAN. Как я понимаю дело в том что при подсчете внутреннего интеграла методом симпсона получаем не число, а функцию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <math.h>
#include <stdio.h>
 #define PI 3.1415926536
 #define eps 0.001
 using namespace std;
double x=0.5;
double y=0.5;
double F(double t, double g)
{double R,l;
    l=1-t*t*t*t-g*g*g*g;
    R=sqrt((t-x)*(t-x)+(g-y)*(g-y));
    return( sqrt(l)*(t-x)/((g-y)*R));
 
}
double q (double g)
{return sqrt(sqrt(1-g*g*g*g));
}
double simp1 (double a, double b,double (*f) (double t, double g))
{double u, w,h,sn,st;
int n=2;
double k;
u=(*f) (a, k)+(*f) (b, k);
w=(*f) ((a+b)/2, k);
h=(b-a)/n;
sn=h/3.0*(u+4.0*w);
do
{st=sn;
 u=u+2*w; h=h/2; w=0;
 for(int i=1;i<=n; i++)
 w=w+(*f) (a+(2*i-1)*h, k);
sn=h/3.0*(u+4.0*w); n=n*2;
}
while(fabs(st-sn)>eps);
return sn;
}
 
double simp2(double c, double d)
{double rc, rd,u, w,h,sn,st,r,a,b;
int n=2;
double k;
k=c; b=q(k); a=-q(k); rc=simp1(a,b,F);
k=d; b=q(k); a=-q(k); rd=simp1(a,b,F);
k=c+d/2.0;
w=simp1(a,b,F);
u=rc+rd; h=(d-c)/n;
sn=h/3.0*(u+4.0*w);
do
{st=sn;
 u=u+2*w; h=h/2; w=0;
 for(int i=1;i<=n; i++)
 {k=c+(2*i-1)*h; b=q(k);
 r=simp1(a,b,F); w=w+r;
 }
sn=h/3.0*(u+4.0*w); n=n*2;
}
while(fabs(st-sn)>eps);
return sn;
}
 
int main()
{
cout<<simp2(-1,1);
}
Подскажите что не так :-)) Заранее спасибо))
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru