|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.04.2014, 08:37 | #1 |
Новичок
Джуниор
Регистрация: 09.04.2014
Сообщений: 4
|
Аппроксимация тригонометрическим полиномом. C++
В общем, есть некая функция у = f(x), провели ряд измерений и получили n точек x и y.
Нужно найти аппроксимацию данной функции тригонометрическим полиномом. (Если я все правильно понимаю, каждую точку пересчитать с помощью неких формул). Может кто-то уже сталкивался с подобным или есть какие примеры. Буду благодарна за любую помощь. |
09.04.2014, 10:26 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
гугл - интерполяция тригонометрическим полином - куча ссылок
Первая ж ссылка со всеми подробностями, что вам не хватило? |
09.04.2014, 10:42 | #3 |
Новичок
Джуниор
Регистрация: 09.04.2014
Сообщений: 4
|
Насколько мне известно, интерполяция и аппроксимация - это немного разные вещи.
Собственно, помощь требуется в следующем. У меня уже есть написанная аппроксимация полиномом n степени. Можно ли его просто переделать в аппроксимацию тригономертическим полиномом. То есть просто составить новую систему уравнений, только уже с синусами/косинусами, а вычислять коэф-ты, решая систему Методом Гаусса. Или получится бред. //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///////////////////////////////// Последний раз редактировалось Vnuchka; 09.04.2014 в 10:54. |
09.04.2014, 13:03 | #4 |
Новичок
Джуниор
Регистрация: 09.04.2014
Сообщений: 4
|
Выше представленная аппроксимация считается по МНК. По сути, если я правильно все понимаю, нам не важно каким полиномом аппроксимировать? То есть я могу степенной полином заменить нужным мне тригонометрическим и все?
|
11.04.2014, 13:08 | #5 |
Новичок
Джуниор
Регистрация: 09.04.2014
Сообщений: 4
|
Попробовала аппроксимировать рядом Фурье.
Что-то получается, но есть ошибки. а0 не верно считает, и возможно коэфф-ты не верны. может что толкового посоветуете? Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с полиномом C# | JinAnton | Помощь студентам | 12 | 07.06.2011 08:56 |
работа с полиномом! C# | JinAnton | Помощь студентам | 0 | 04.06.2011 16:57 |
Интерполяция полиномом Ньютона | Igolka6662 | Помощь студентам | 1 | 26.11.2010 19:22 |
CRC c полиномом MODBUS | Gawwws | Microsoft Office Excel | 2 | 27.02.2010 00:10 |
Помогите....с полиномом! | alisa87 | Общие вопросы C/C++ | 1 | 26.05.2009 16:13 |