Аппроксимация Функций. Метод Гаусса

kobrin13

New member
09.11.2013
4
0
#1
Только неделю начал изучать С, как дали вот такую задачку и я немного запутался. Подскажите, в чем косяк
Вот задание:
требуется аппроксимировать заданную исходную функцию 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 = a + (i - 1) * (b - a) / (m - 1);
y = (exp(x) / pow(x, 3)) - pow(sin(x), 3);
}

for (int j = 1; j <= 21; j++)
{
xt[j] = a + (j - 1) * (b - a) / 20;
}

for (int i = 1; i <= n; i++)
{
g[1] = 1;
}

for (int i = 1; i <= n; i++)
{
for (int k = 2; k <= n; k++)
{
g[k] = g[k-1] * x;
}
}

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] = g[m] - (q * g[k]);
}
}
}

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] * x;
}

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();
}