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

Аппроксимация тригонометрическим полиномом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти число Фиббоначи с помощью рекурсии http://www.cyberforum.ru/cpp-beginners/thread1143177.html
найти число фиббоначи с помощью рекурсии. заранее спасибо
C++ Недавно начал изучать С++ пояляються трудности с массивами Здравствуйте ! Помогите с решением проблемы в этом коде: #include <iostream.h> #pragma argsused int main() {int k,i,a,b; cout<<"Vvedite razmernost massiva "; cin>>k; int** mas=new int*; http://www.cyberforum.ru/cpp-beginners/thread1143176.html
C++ прога с косячным выводом C++
привет всем) написала прожку, которая должна выводить результаты расчетов в идеальную(!) таблицу, чего я в силу своей криворукости сделать не способна. помогите пожалуйста. вот код: #include <iostream> using namespace std; #include <locale> #include<conio.h> #include<iomanip> #include<math.h> int main () {
C++ Использование std::unique_ptr
Есть в коде подобная конструкция, вылетает исключение на этапе очистки памяти. С чем это может быть связано? template <typename T> class MyVector { public: MyVector() : m_data(nullptr){} ~MyVector(){} void resize(const size_t size) {
C++ Посчитать сумму и количество положительных элементов массива http://www.cyberforum.ru/cpp-beginners/thread1143157.html
Надо еще посчитать сумму и кол-во положительных элементов, помогите я не знаю куда и что писать #pragma hdrstop #pragma argsused #include <iomanip.h> #include <tchar.h> #include <stdio.h> #include <iostream.h>
C++ В одномерном массиве, состоящем из n целых элементов, вычислить сумму элементов массива, между первым и последним нулями В одномерном массиве, состоящем из n целых элементов, вычислить сумму элементов массива, расположенных между первым и последним нулевыми элементами. подробнее

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

Аппроксимация тригонометрическим полиномом - C++

09.04.2014, 13:54. Просмотров 1882. Ответов 4
Метки (Все метки)

Здравствуйте, товарищи программисты! Очень надеюсь на вашу помощь, так как диплом на носу, а этот кусок очень поможет получить заветное "Отл".
В общем, есть некая функция у = f(x), провели ряд измерений и получили n точек x и y.
Нужно найти аппроксимацию данной функции тригонометрическим полиномом. (Если я все правильно понимаю, каждую точку пересчитать с помощью неких формул). Так как раньше никогда не сталкивалась с данного рода задачами, возникли трудности в реализации, точнее даже не знаю с чего начать.
Может кто-то уже сталкивался с подобным или есть какие примеры.
Буду благодарна за любую помощь.

Добавлено через 5 часов 27 минут
Есть вот аппроксимация полиномом n степени по МНК. По сути, если я правильно все понимаю, нам не важно каким полиномом аппроксимировать? То есть я могу степенной полином заменить нужным мне тригонометрическим и все?
Или так не получится?

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
//apprrrrrrrrrrrrr///////////////////////////////
 
double *apr_b, *apr_x, *apr_y, **apr_sums;
int apr_N;
//N - кол-во шагов
//K - степень
 
void allocmatrix(){
 
int i,j;
apr_a = new double[apr_K+1];
apr_b = new double[apr_K+1];
apr_sums = new double*[apr_K+1];
 
for(i=0; i<apr_K+1; i++){
apr_sums[i] = new double[apr_K+1];
 
}
for(i=0; i<apr_K+1; i++){
apr_a[i]=0;
apr_b[i]=0;
for(j=0; j<apr_K+1; j++){
apr_sums[i][j] = 0;
}
}
 
}
 
 
 
void readmatrix(){
int i=0,j=0, k=0;
 
for(i=0; i<apr_K+1; i++){
for(j=0; j<apr_K+1; j++){
apr_sums[i][j] = 0;
for(k=0; k<apr_N; k++){
apr_sums[i][j] += pow(apr_x[k], i+j); то есть эту строку поменять
}
}
}
for(i=0; i<apr_K+1; i++){
for(k=0; k<apr_N; k++){
apr_b[i] += pow(apr_x[k], i) * apr_y[k]; эту тоже
}
}
}
 
 
void diagonal(){
int i, j, k;
float temp=0;
for(i=0; i<apr_K+1; i++){
if(apr_sums[i][i]==0){
for(j=0; j<apr_K+1; j++){
if(j==i) continue;
if(apr_sums[j][i] !=0 && apr_sums[i][j]!=0){
for(k=0; k<apr_K+1; k++){
temp = apr_sums[j][k];
apr_sums[j][k] = apr_sums[i][k];
apr_sums[i][k] = temp;
}
temp = apr_b[j];
apr_b[j] = apr_b[i];
apr_b[i] = temp;
break;
}
}
}
}
}
 
 
void approxn1(){
int i=0,j=0, k=0;
allocmatrix();
//read data from file
readmatrix();
//check if there are 0 on main diagonal and exchange rows in that case
diagonal();
 
for(k=0; k<apr_K+1; k++){
for(i=k+1; i<apr_K+1; i++){
double M = apr_sums[i][k] / apr_sums[k][k];
for(j=k; j<apr_K+1; j++){
apr_sums[i][j] -= M * apr_sums[k][j];
}
apr_b[i] -= M*apr_b[k];
}
}
 
for(i=(apr_K+1)-1; i>=0; i--){
double s = 0;
for(j = i; j<apr_K+1; j++){
s = s + apr_sums[i][j]*apr_a[j];
}
apr_a[i] = (apr_b[i] - s) / apr_sums[i][i]; 
}
 
}
 
//end apprrrr/////////////////////////////////
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru