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

Убрать массивы. Приближённое вычисление - C++

Восстановить пароль Регистрация
 
Aecttann
 Аватар для Aecttann
5 / 5 / 0
Регистрация: 19.10.2013
Сообщений: 258
09.06.2014, 21:56     Убрать массивы. Приближённое вычисление #1
Вот исходник с массивами:

Кликните здесь для просмотра всего текста
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
 
long double f(long double);
 
using namespace std;
 
int main()
{setlocale(LC_ALL,"RUS");
    long int i,N,k=10000000,kn=0;
    long double a,b,t,z,c,x[3001],summ=0.0;
    a=2.0;
    b=3.0;
    N=3000;
    t=(b-a)/N,
    x[0]=a;
    x[3000]=b;
 
for(i=1;i<N;i++)
{
    x[i]=x[i-1]+t;
}
 
for(i=0;i<N-1;i++)
 
    summ=summ+(f(x[i])*t);
cout<<"Способ 1 ="<<summ<<endl;
summ=0.0;
 
for(i=1;i<N;i++)
    summ=summ+(f(x[i])*t);
cout<<"Способ 2 ="<<summ<<endl;
summ=0.0;
 
for(i=0;i<N-1;i++)
    summ=summ+(((f(x[i])+f(x[i+1]))/2.0)*t);
cout<<"Способ 3 = "<<summ<<endl;
    summ=0.0;
 
for(i=0;i<N-1;i++)
    summ=summ+(((f(x[i])+4*f((x[i]+x[i+1])/2)+f(x[i+1]))/6.0)*t);
cout<<"Способ 4 = "<<summ<<endl;
    summ=0.0;
    long double summ1=0,summ2=0,summ3=0;
 
    for(i=0;i<N;i++)
    {
        if((i==0)||(i==N-1))
            summ1=summ1+f(x[i]);
        else if(i%3==0)
            summ3=summ3+f(x[i]);
        else
            summ2=summ2+f(x[i]);
    }
 
    summ=((3*(b-a))/(8*N))*(summ1+3*summ2+2*summ3);
cout<<"Способ 5 = "<<summ<<endl;
 
    kn=0;
 
    srand(time(0));
    double H=10.0;
    for(i=0;i<k;i++)
    {
        z=((rand()%10000)/10000.0)+a;
        c=((rand()%10000)/10000.0)*H;
 
        if(f(z)>=c)
            kn++;
    }
    summ=0.0;
    summ=(kn*1.0/k*1.0)*H;
cout<<"Способ 6 = "<<summ<<endl;
return 0;
}
long double f(long double x)
{
    return (10/pow((pow(x,2)-1),0.5));
}


Вот я убрал массивы, но считает не правильно:

Кликните здесь для просмотра всего текста
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
 
long double f(long double);
 
using namespace std;
 
int main()
{setlocale(LC_ALL,"RUS");
    long int i,N,k=10000000,kn=0;
    long double a,b,t,z,c,x=3001,summ=0.0;
    a=2.0;
    b=3.0;
    N=3000;
    t=(b-a)/N;
    x=b;
 
for(i=1;i<N;i++)
{
    x=x+t;
}
 
for(i=0;i<N-1;i++)
 
    summ=summ+(f(x)*t);
cout<<"Способ 1 ="<<summ<<endl;
summ=0.0;
 
for(i=1;i<N;i++)
    summ=summ+(f(x)*t);
cout<<"Способ 2 ="<<summ<<endl;
summ=0.0;
 
for(i=0;i<N-1;i++)
    summ=summ+(((f(x)+f(x))/2.0)*t);
cout<<"Способ 3 = "<<summ<<endl;
    summ=0.0;
 
for(i=0;i<N-1;i++)
    summ=summ+(((f(x)+4*f((x+x)/2)+f(x))/6.0)*t);
cout<<"Способ 4 = "<<summ<<endl;
    summ=0.0;
    long double summ1=0,summ2=0,summ3=0;
 
    for(i=0;i<N;i++)
    {
        if((i==0)||(i==N-1))
            summ1=summ1+f(x);
        else if(i%3==0)
            summ3=summ3+f(x);
        else
            summ2=summ2+f(x);
    }
 
    summ=((3*(b-a))/(8*N))*(summ1+3*summ2+2*summ3);
cout<<"Способ 5 = "<<summ<<endl;
 
    kn=0;
 
    srand(time(0));
    double H=10.0;
    for(i=0;i<k;i++)
    {
        z=((rand()%10000)/10000.0)+a;
        c=((rand()%10000)/10000.0)*H;
 
        if(f(z)>=c)
            kn++;
    }
    summ=0.0;
    summ=(kn*1.0/k*1.0)*H;
cout<<"Способ 6 = "<<summ<<endl;
return 0;
}
long double f(long double x)
{
    return (10/pow((pow(x,2)-1),0.5));
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 21:56     Убрать массивы. Приближённое вычисление
Посмотрите здесь:

Вычислить приближённое значение функции C++
C++ Одномерные массивы: вычисление сумм элементов
Одномерные массивы: вычисление сумм элементов C++
Одномерные массивы: вычисление сумм элементов C++
C++ Одномерные массивы: вычисление сумм элементов
Одномерные массивы: вычисление сумм элементов C++
C++ Одномерные массивы: вычисление сумм элементов
Двухмерные массивы: Вычисление сумм элементов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.06.2014, 22:32     Убрать массивы. Приближённое вычисление #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Aecttann Посмотреть сообщение
но считает не правильно:
Потому что надо понимать, что делаешь, а не писать бездумно.
C++
1
2
3
4
5
6
7
8
9
10
11
   x=a;
 
/*for(i=1;i<N;i++)
{
    x=x+t;
}*/
 
for(i=0;i<N-1;i++)
 
    summ=summ+(f(x+i*t)*t);
cout<<"Способ 1 ="<<summ<<endl;
Дальше - аналогично.
Yandex
Объявления
09.06.2014, 22:32     Убрать массивы. Приближённое вычисление
Ответ Создать тему
Опции темы

Текущее время: 15:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru