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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать подпрограмму обработки данного файла http://www.cyberforum.ru/cpp-beginners/thread83734.html
2) Создать файл начисления студентам стипендии. Студент, получивший все оценки “5” и активно участвующий в общественной работе, зачисляется на повышенную стипендию (доплата 50%), не активно участвующие – доплата 25%, студенты, получившие “4” и “5” зачисляются на обычную стипендию. Студент, получивший одну оценку “3”, но активно занимающийся общественной работой, также зачисляется на стипендию. В...
C++ копирование файлов Зраствуйте можете подсказать алгоритм копирования файлов любого типу(разширения)?? http://www.cyberforum.ru/cpp-beginners/thread83733.html
Число n C++
Дано натуральное число n. Получить последовательность b1,...,bn, где при i=1,2,...,n значение bi равно: p.s зааранее all thanks
C++ Что такое дескиптор?
По понятнее пожалуйста на википедиа смотрел ни черта не понял.
C++ рисование в с++ http://www.cyberforum.ru/cpp-beginners/thread83703.html
можно ли рисовать в borland c++ (если можно то как)reen"]
C++ НАСЛЕДОВАНИЕ И ВИРТУАЛЬНЫЕ ФУНКЦИИ Определить иерархию классов (игрушка, продукт, товар, молочный продукт). Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка. Реализовать классы. Написать демонстрационную программу, в которой создаются объекты различных классов и помещаются в список, после чего список просматривается. Сделать соответствующие... подробнее

Показать сообщение отдельно
AraxniD
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 7

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

08.01.2010, 19:13. Просмотров 921. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru