Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 00:16   #1
kobrin13
Пользователь
 
Регистрация: 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();
}
kobrin13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод простых операций и метод гаусса зейделя 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