• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите, пожалуйста, доделать на Си

Natashka

Ученик
Регистрация
30 Сен 2012
Сообщения
8
Реакции
0
Баллы
0
Помогите, пожалуйста, доделать на Си

Что нужно сделать что-бы функция вводилась, а потом аппроксимировалась?

Аппроксимация функций, заданных аналитически,
многочленами Чебышева.

В головной программе необходимо:
1. описать прототип функции:
void approks_Chebyshev(int n, float x1, float x2, float q[n+1], float cheb[n+1], float r[n+1][n+1], float *eps);
2. ввести значение переменной n – степень аппроксимирующего полинома,
3. описать массивы:
float q[n+1]; // вектор коэффициентов
// аппроксимирующего полинома
// по возрастающим степеням
float cheb[n+1]; // массив коэффициентов
// при аппроксимирующих многочленах Чебышева
float r[n+1][n+1]; // массив коэффициентов
// многочленов Чебышева
4. ввести значения переменных x1 и x2 – левая и правая границы аппроксимации,
5. создать функцию float function(float x) , в которой описать аппроксимируемую функцию как f=f(x), например:
float function(float x)
//
// Описание аппроксимируемой функции в виде f=f(x)
//
{
float f;
f=log(x);
return f;
}
6. обратиться к программе вычислений коэффициентов аппроксимирующего полинома:
approks_Chebyshev(n, x1, x2, q, cheb, r, &eps);
7. вывести на экран терминала (в текстовый файл) векторы коэффициентов q[n+1] и cheb[n+1], массив r[n+1][n+1] и абсолютную погрешность аппроксимации eps в средине интервала.
Пример: аппроксимировать кубическим полиномом функцию:

на интервале от x1=1,0 до x2=2,0.
Головная программа:
#include <stdio.h>
#include <math.h>
#include <conio.h>

void approks_Chebyshev(int n, float x1, float x2, float q[n+1], float cheb[n+1], float r[n+1][n+1], float *eps);

int main(int argc, char **argv)
{
int n; // степень аппроксимирующего полинома
float x1, x2; // границы интервала аппроксимации
float eps; // абсолютная погрешность аппроксимации
// в середине заданного интервала (x1, x2)
int i, j; // рабочие переменные
printf("\n stepen approks. polinoma n = ");
scanf("%d", &n);
float q[n+1]; // массив коэффициентов
// аппроксимирующего полинома
// по возрастанию степеней
float cheb[n+1]; // массив коэффициентов при
// аппроксимирующих многочленах Чебышева
float r[n+1][n+1]; // массив коэффициентов
// многочленов Чебышева
printf("\n levaja granica approks. x1 = ");
scanf("%f", &x1);
printf("\n pravaja granica approks. x2 = ");
scanf("%f", &x2);

approks_Chebyshev(n, x1, x2, q, cheb, r, &eps);

printf("\nKoefficienty approks. polinoma:\n");
for (i=0; i<n+1; i++)
printf("%12.6f", q);
printf("\n");
printf("\nKoefficienty chebyshev. approksim.:\n");
for (i=0; i<n+1; i++)
printf("%12.6f", cheb);
printf("\n");
printf("\nKoefficienty mnogochlenov chebysheva:\n");
for (i=0; i<n+1; i++)
{
for (j=0; j<n+1; j++)
printf("%10.2f", r[j]);
printf("\n");
}
printf("\n");
printf("\nAbsoljutnaja pogreshn. approksimacii: %e\n", eps);
return 0;
}
Описание аппроксимируемой функции:
float function(float x)
//
// Описание аппроксимируемой функции в виде f=f(x)
//
{
float f;
f=log(x);
return f;
}
 
Назад
Сверху