|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.11.2013, 00:16 | #1 |
Пользователь
Регистрация: 09.11.2013
Сообщений: 12
|
Аппроксимация функций. Метод Гаусса
Только неделю начал изучать С, как дали вот такую задачку и я немного запутался. Подскажите, в чем косяк
Вот задание: требуется аппроксимировать заданную исходную функцию f(x) многочленом на интервале [а, b]. Задано количество неизвестных параметров n, вид аппроксимации и m - количество точек, в которых задана функция. Таблица исходной функции Yi=f(Xj) вычисляется в точках Xi=a + (i-1)(b-a)/(m -1), i = 1, m. Используя полученную таблицу (Xi, Yi), требуется вычислить значения функций f(Xi), φ(Xj,с) и погрешность d(Xj) = f(Xj)- φ(Xj,с) в точках Xj = а + (j -1 )(b - а)/20; j = 1.21, построить графики и проанализировать качество полученной аппроксимации. Функция F(x) - ex / x3 – sin3(x); a, m, n = 4; b=7; вид аппроксимации - метод Гаусса. Вот, что получается, точнее не получается... #include <stdio.h> #include <math.h> #include <conio.h> int m = 4, n = 4, p; float r, q, s; float a = 4, b = 7; float x[5], y[5], xt[22], c[5]; float g[5][5]; void main( ) { for (int i = 1; i <= m; i++) { x[i] = a + (i - 1) * (b - a) / (m - 1); y[i] = (exp(x[i]) / pow(x[i], 3)) - pow(sin(x[i]), 3); } for (int j = 1; j <= 21; j++) { xt[j] = a + (j - 1) * (b - a) / 20; } for (int i = 1; i <= n; i++) { g[i][1] = 1; } for (int i = 1; i <= n; i++) { for (int k = 2; k <= n; k++) { g[i][k] = g[i][k-1] * x[i]; } } for (int k = 0; k < (n - 1); k++) { p = k; for (int m = (k + 1); m <= n; m++) { if (fabs(g[p][k]) < fabs(g[m][k])) p = m; } for (int j = k; j <= n; j++) { r = g[k][j]; g[k][j] = g[p][j]; g[p][j] = r; } r = y[k]; y[k] = y[p]; y[p] = r; for (int m = (k + 1); m < n; m++) { q = g[m][k] / g[k][k]; y[m] = y[m] - (q * y[k]); for (int i = k; i < n; i++) { g[m][i] = g[m][i] - (q * g[k][i]); } } } x[n] = y[n] / g[n][n]; for (int k = (n - 1); k >= 0; k--) { s = 0; for (int i = (k + 1); i < n; i++) { s = s + g[k][i] * x[i]; } x[k] = (y[k] - s) / g[k][k]; } for (int i = 1; i <= 5; i++) { printf("x[%d] = %f\n", i, x[i-1]); } getchar(); } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
метод простых операций и метод гаусса зейделя | tarasman11 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 23.09.2012 14:46 |
График в делфи с TChart (аппроксимация. метод наименьших квадратов) | dimanoxxy | Фриланс | 3 | 12.06.2012 18:22 |
Delphi: аппроксимация функций методом базиса из финитных функций | Denna | Помощь студентам | 1 | 12.03.2012 19:23 |
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. | Хомяк!!!!! | Помощь студентам | 4 | 08.07.2009 10:08 |
аппроксимация функций | natasha | Общие вопросы Delphi | 6 | 26.08.2008 19:07 |