Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kyrsovaya_po_IT_Buyanov_final9.docx
Скачиваний:
9
Добавлен:
10.05.2015
Размер:
349.59 Кб
Скачать

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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]