- •Содержание
- •Теоретическое введение
- •Постановка задачи
- •Функции
- •Первая часть : 1) Интерфейс
- •1.1)Исходный код функции launch
- •1.1.1)Исходный код подфункции graph
- •1.1.2)Исходный код подфункции read
- •1.1.3)Исходный код подфункции clearaxes
- •2.1) Исходный код функции main
- •2.1.1) Исходный код подфункции fun
- •2.1.2) Исходный код подфункции furie
- •2.1.3) Исходный код подфункции find_koef1
- •2.1.4) Исходный код подфункции find_koef2
- •2.1.5) Исходный код подфункции find_koef0
- •Пример вызова программы
2.1.3) Исходный код подфункции find_koef1
Подфункция double find_koef1(double(*f)(double), int k, int m)имеет входные параметры «(*f)(double)» , «m» и «k» и выходной «Ia» параметры. Она предназначена для вызова подфункциейfurieдля того, чтобы производить расчет коэффициента Фурье «аn».
Параметр «m»: типа «int», является числом, определяющим количество разбиений при подсчете интегралов .
Параметр «k»: типа «int», является числом, определяющим номер частичной суммы(гармоники), которая будет подлежать выводу в окне графопостроителя
Параметр «double(*f)(double)»: типа «double», является указателем на функциюy(x) по которой идет дальнейший расчет в зависимости от значения «x».
Параметр «Ia»: типа «double», является коэффициентом ряда Фурье «аn».
double find_koef1(double(*f)(double), int k, int m)
{
double sa = 0, Ia;
for (int i = 0; i < m; i++)
{
sa += f(x0 + h / 2 + i*h)*cos((x0+ h / 2 + i*h)*pi*k / l);
}
sa = sa / l;
Ia = sa*h;
return Ia;
2.1.4) Исходный код подфункции find_koef2
Подфункция double find_koef2(double(*f)(double), int k, int m)имеет входные параметры «(*f)(double)» , «m» и «k» и выходной «Ib» параметры. Она предназначена для вызова подфункциейfurieдля того, чтобы производить расчет коэффициента ряда Фурье «bn».
Параметр «m»: типа «int», является числом, определяющим количество разбиений при подсчете интегралов .
Параметр «k»: типа «int», является числом, определяющим номер частичной суммы(гармоники), которая будет подлежать выводу в окне графопостроителя
Параметр «double(*f)(double)»: типа «double», является указателем на функциюy(x) по которой дальнейший идет расчет в зависимости от значения «x».
Параметр «Ib»: типа «double», является коэффициентом ряда Фурье «bn».
{
double sb = 0, Ib;
for (int i = 0; i < m; i++)
{
sb += f(x0 + h / 2 + i*h)*sin((x0 + h / 2 + i*h)*pi*k / l);
}
sb = sb / l;
Ib = sb*h;
return Ib;
}
2.1.5) Исходный код подфункции find_koef0
Подфункция double find_koef0(double(*f)(double), int k)имеет входные параметры «(*f)(double)» , «k» и выходной «Io» параметры. Она предназначена для вызова подфункциейfurieдля того, чтобы производить расчет коэффициента ряда Фурье «ao».
Параметр «k»: типа «int», является числом, определяющим номер частичной суммы(гармоники), которая будет подлежать выводу в окне графопостроителя
Параметр «double(*f)(double)»: типа «double», является указателем на функциюy(x) по которой дальнейший идет расчет в зависимости от значения «x».
Параметр «Io»: типа «double», является коэффициентом ряда Фурье «ao».
double find_koef0(double(*f)(double), int m)
{
double so = 0, Io;
for (int i = 0; i < m; i++)
so += f(x0+ h / 2 + i*h);
so = so / l;
Io = so*h;
return Io;
}
Листинг программы в C++
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
double fun(double x);
void furie(int m, int k);
double find_koef2(double(*f)(double), int k, int m);
double find_koef1(double(*f)(double), int k, int m);
double find_koef0(double(*f)(double), int m);
double pi = 3.1415926535;
double x;
double l = 12.0;
double h;
double x0 = 2.0;
int z;
int k ;
int m ;
void main(void)
{
double ya, bn, ao, an;
ifstream file1;
file1.open("CPP.txt");
if (!file1)
{
cout << "error" << endl;
}
//сейчас будет считывание данных из интерфейса
file1 >> k;
file1 >> m;
file1 >> z;
file1.close();
//конец считывание+закрытие файла.
h = (double)l / (double)m;
furie(m, k);
}
double fun(double x)
{
double y;
if (x >= 2 & x <= 5)
y = (2 / 3)*x - (4 / 3);
else if (x > 5 & x <= 8)
y = 2;
else if (x > 8 & x <= 11)
y = -(2 / 3)*x + (22 / 3);
else y = 0;
return y;
}
void furie(int m, int k)
{
double ya;
//сейчас откроется файл, который будет заполнен координатами аппроксимированной функции
ofstream file2;
file2.open("ML.txt");
x = 0;
for (int p = 0; p<=z; p++)
{
ya = find_koef0(fun, m) / 2;
for (int j = 1; j <= k; j++)
ya += (find_koef1(fun, j, m))*cos(j*pi*x / l) + (find_koef2(fun, j, m))*sin(j*pi*x / l);
//каждый раз при прохождении в цикле следующей строчки,будет записываться очередная пара координат
file2 << x << " " << ya << endl;
x += 2 * l / z;
}
file2.close();//закрытие файла.
}
double find_koef0(double(*f)(double), int m)
{
double so = 0, Io;
for (int i = 0; i < m; i++)
so += f(x0+ h / 2 + i*h);
so = so / l;
Io = so*h;
return Io;
}
double find_koef1(double(*f)(double), int k, int m)
{
double sa = 0, Ia;
for (int i = 0; i < m; i++)
{
sa += f(x0 + h / 2 + i*h)*cos((x0+ h / 2 + i*h)*pi*k / l);
}
sa = sa / l;
Ia = sa*h;
return Ia;
}
double find_koef2(double(*f)(double), int k, int m)
{
double sb = 0, Ib;
for (int i = 0; i < m; i++)
{
sb += f(x0 + h / 2 + i*h)*sin((x0 + h / 2 + i*h)*pi*k / l);
}
sb = sb / l;
Ib = sb*h;
return Ib;
}