Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
AraxniD
0 / 0 / 1
Регистрация: 08.01.2010
Сообщений: 7
#1

Апроксимация функции с фурье, компилятор ошибок не находит, но программа работает не верно.

08.01.2010, 19:13. Просмотров 1009. Ответов 1
Метки нет (Все метки)

Надо апроксимировать функцию..грубо говоря, я раскладываю функцию в ряд фурье и считаю значение функции в каждой точке х. После этого, по этим значениям строю график, но это уже касается другой программы.
Проблема в том, что вместо циферок на экран выводится белеберда. Где проблема не вижу.
Писал на вижуал с++ 2008.
Буду очень благодарен за помощь.

2*l(L)=1.
T=6
самое уравнение "раскладывание"
f(x)=Ao/2+(ряд от к=1 до м) (Ak*cos(k*w*x)+Bk*sin(k*w*x))
Ao=1/l (интеграл от -l до l) f(x)dx
Ak=1/l (интеграл от -l до l) f(x)cos(k*w*x)dx
Bk аналогчно Ak, вместо косинуса синус.
W=pi/l

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//
 
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
double a_nol(double,int,int,double );
double a_k(double,int,int,int,double );
double b_k(double,int,int,int,double );
double fun(double);
double integral(int,int,double (*f)(double),int,int,double);
void main(void)
{
    int o;
    double Ao,Ak,Bk;
    double l=0.5;
    int n=10;
    double eps=0.01;
    double epsx=0.05;
    int k=1;
    int m=10;
    double x=-1; // Дальше я считаю значение функции в каждой точки х. Пока это я выкинул
    double S1,S2=0;
    while (k<=m) // Считается ряд. От к=1 до м, где м грубо говоря точность подсчета
        {
            Ao=a_nol(x,l,n,eps);
            Ak=a_k(x,k,l,n,eps);
            Bk=b_k(x,k,l,n,eps);
            S1=Ak*cos(k*3.14*x/0.5)+Bk*sin(k*3.14*x/0.5);
            S2+=S1;
            k++;
        }
    S2=Ao+S2;
    cout<<S2<<endl;
    cout<<Ao<<Ak<<Bk<<endl;
    cin>>o;
}
 
double a_nol(double x,int l,int n,double eps)
{
    int k=0;
    double I1,I2;
    int z=0;
    I2=integral(l,n,fun,z,k,x);
    do
    {
        I1=I2;
        n=n*2;
        I2=integral(l,n,fun,z,k,x);
    }
    while (fabs(I1-I2)>eps);
    return 2*I2;
}
double a_k(double x,int k,int l,int n,double eps)
{
    double I1,I2;
    int z=1;
    I2=integral(l,n,fun,z,k,x);
    do
    {
        I1=I2;
        n=n*2;
        I2=integral(l,n,fun,z,k,x);
    }
    while (fabs(I1-I2)>eps);
    return 2*I2;
}
double b_k(double x,int k,int l,int n,double eps)
{
    double I1,I2;
    int z=2;
    I2=integral(l,n,fun,z,k,x);
    do
    {
        I1=I2;
        n=n*2;
        I2=integral(l,n,fun,z,k,x);
    }
    while (fabs(I1-I2)>eps);
    return 2*I2;
}
double fun(double x)
{
    if (x<=0)
        return 1.5;
    else
        return -1.5;
 
}
double integral(int l,int n,double (*f)(double),int z,int k,double x) //Метод прямоугольников
{
    double h1,S=0;                                                       //Возможн ошибка здесь, но не вижу.
    h1=l/n;
    for (int i=1;i<=n;i++)
    {
        switch(z)
        {
        case 0:
            S+=f(0+i*h1);
            break;
        case 1:
            S+=f(0+i*h1)*cos(k*3.14*x/l);
            break;
        case 2:
            S+=f(0+i*h1)*sin(k*3.14*x/1);
            break;
        }
    }
    return h1*S;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2010, 19:13
Ответы с готовыми решениями:

Компилятор не находит ошибок, программа виснет вначале
Есть два кода, в обоих случаях после ввода первых значений виснет программа. ОС...

Ошибок не находит, но не работает!
Профи, помогите пожалуйста, че то не работает. Надо чтобы программа пошла на...

Неверно работает программа, которая интерполирует набор значений и находит значение функции и ее производную
Доброй ночи! Написала программу, которая интерполирует набор значений и находит...

Программа считывает очередную строку совершенно верно, но в ней она находит цифры, которых там вообще нет
У меня возникла такая проблема. В некотором файле в каждой строке записан...

Верно ли работает программа
Выводит вроде то что нужно, а сайт( информатикс) не принемает( ошибка во время...

1
AraxniD
0 / 0 / 1
Регистрация: 08.01.2010
Сообщений: 7
11.01.2010, 22:19  [ТС] #2
Значит все исправил, прога работает, но вместо нормального результата, координаты сильно смещены вверх\вниз. В чем ошибка найти не могу.
Хелп!

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
double anol(double,int,double (*f)(double,double,int,int),int);
double bkoef(double,int,double (*f)(double,double,int,int),int,int);
double akoef(double,int,double (*f)(double,double,int,int),int,int);
double fun(double,double,int,int);
double integral(double,int,double (*f)(double,double,int,int),int,int,int);
void main(void)
{
    double Ak,Ao,Bk;
    double p;
    double l=0.5;
    int n=5;
    int k=1,tochnost=10;
    double S=0;
    double shag=0.1;
    for (double x=-0.5;x<=-0.4;x+=shag)
    {
        Ao=anol(l,n,fun,x);
        while (k<=tochnost)
        {
          Ak=akoef(l,n,fun,x,k);
          Ak=Ak*cos(k*3.14*x/0.5);
          Bk=bkoef(l,n,fun,x,k);
          Bk=Bk*sin(k*3.14*x/0.5);
          S=Ak+Bk;
          cout<<S<<" ";
          k++;
        }
        S=Ao+S;
        k=1;
        cout<<S<<" "<<x<<endl;
        S=0;
    }
    cin>>p;
}
double akoef(double l,int n,double (*f)(double,double,int,int),int x,int k)
{
    double eps=0.001;
    double I1,I2;
    int c=1;
    I2=integral(l,n,fun,x,k,c);
    do
    {
        I1=I2;
        n=n*2;
        I2=integral(l,n,fun,x,k,c);
    }
    while (fabs(I1-I2)>eps);
    return 2*I2/0.5;
}
double fun(double z,double x,int k,int c)
{
    switch(c)
    {
        case 0:
            if (z>=0)
                return 1.5;
            else
                return -1.5;
            break;
        case 1:
            if (z>=0)
                return 1.5*cos(k*3.14*x/0.5);
            else
                return -1.5*cos(k*3.14*x/0.5);
            break;
        case 2:
            if (z>=0)
                return 1.5*sin(k*3.14*x/0.5);
            else
                return -1.5*sin(k*3.14*x/0.5);
            break;
    }
}
double integral(double l,int n,double (*f)(double,double,int,int),int x,int k,int c)
{
    double h,s=0;
    h=l/n;
    for (int i=1;i<=n;i++)
        s+=f(0+i*h,x,k,c);
    return h*s;
}
double bkoef(double l,int n,double (*f)(double,double,int,int),int x,int k)
{
    double eps=0.001;
    double I1,I2;
    int c=2;
    I2=integral(l,n,fun,x,k,c);
    do
    {
        I1=I2;
        n=n*2;
        I2=integral(l,n,fun,x,k,c);
    }
    while (fabs(I1-I2)>eps);
    return 2*I2/0.5;
}
double anol(double l,int n,double (*f)(double,double,int,int),int x)
{
    double eps=0.001;
    double I1,I2;
    int k=0;
    int c=0;
    I2=integral(l,n,fun,x,k,c);
    do
    {
        I1=I2;
        n=n*2;
        I2=integral(l,n,fun,x,k,c);
    }
    while (fabs(I1-I2)>eps);
    return 2*I2/0.5;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2010, 22:19

не верно работает программа
справил код но программа вместо результата выдает точка 1=1 точка 2=2...что не...

Ошибок не найдено, но и программа не работает
ошибок не найдено, но и программа не работает unit Unit1; interface ...

Программа работает, но вычисляет не верно, не могу исправить ошибку...
Огромное спасибо всем, кто возьмётся исправить... Программа работает, но...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru