Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Interpol_drobju(n, x, y, q, b, d);




printf("\nKoefficienty interpol. cepnoy drobi:\n");

for (i=0; i<n; i++)

printf("%10.3f", q[i]);

printf("\n\n");

printf("\nKoefficienty chislit. interpol. drobi:\n");

for (i=0; i<n; i++)

printf("%10.3f", b[i]);

printf("\n\n");

printf("\nKoefficienty znamenat. interpol. drobi:\n");

for (i=0; i<n; i++)

printf("%10.3f", d[i]);

printf("\n\n");

c=getch();

return 0;}

Результат решения задачи:

Таким образом, интерполяционная цепная дробь имеет вид:

3 +

Интерполяционная рациональная дробь имеет вид:

(-6 – x + 2x2) / (-2 – x + x2)

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

В головной программе необходимо:

1. описать прототип функции:

void approks_polinomom(int m, int n, float x[m], float y[m], float q[n+1], float *s0);

2. ввести значение переменной m – количество узлов аппроксимации,

3. ввести значение переменной n – степень аппроксимирующего полинома (n<=m-1),

4. описать массивы:

float x[m], y[m]; // значения аргумента и функции

// в узлах аппроксимации

float q[n+1]; // вектор коэффициентов

// аппроксимирующего полинома

// по возрастающим степеням

5. ввести массивы x [m], y[m],

6. обратиться к программе вычислений коэффициентов аппроксимирующего полинома:

approks_polinomom(m, n, x, y, q, &s0);

7. вывести на экран терминала (в текстовый файл) вектор коэффициентов q[n+1] и среднеквадратическую погрешность аппроксимации s0.

Пример: аппроксимировать кубическим полиномом функцию, заданную таблицей ее значений:

x   0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0
y 2.5 0.75 -1.15 -2.75 -3.85 -4.15 -3.55 -2.25 -0.15 2.15 4.55

 

В этом случае m=11, n=3.

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

void approks_polinomom(int m, int n, float x[m], float y[m], float q[n+1], float *s0);

int main(int argc, char **argv)

{

int m; // количество узлов аппроксимации

int n; // степень аппроксимирующего полинома, n<m

float s0; // среднеквадратическая погрешность аппроксимации

int i; // рабочая переменная для ввода исходных данных

Char c0;

printf("\nUzlov approksimacii m= ");

scanf("%d", &m);

printf("\nSteprn approks. polinoma n (n<m)= ");

scanf("%d", &n);

float x[m], y[m]; // исходные узлы аппроксимации

float q[n+1]; // массив коэффициентов

// аппроксимирующего полинома

// по возрастанию степеней

printf("\nVvedite vector argumenta (%d znacheniy):\n", m);

for (i=0; i<m; i++)

scanf("%f", &x[i]);

printf("\n");

printf("\nVvedite vector funkcii (%d znacheniy):\n", m);

for (i=0; i<m; i++)

scanf("%f", &y[i]);

printf("\n");

printf("\nApproksimacija polinomom\n");

approks_polinomom(m, n, x, y, q, &s0);

printf("\nKoefficienty approks. polinoma po vozrast. stepeney:\n");

for (i=0; i<n+1; i++)

printf("%10.5f", q[i]);

printf("\n");

printf("\nSrednekvadr. pogreshn. approksimacii: %e\n", s0);

c0=getch();

Return 0;

}

Результат работы программы:

Таким образом, аппроксимирующий полином имеет вид:

2,848 – 13,529x + 6,528x2 + 0,374x3

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

В головной программе необходимо:

1. описать прототип функции:

void approks_summoj_funkc(int m, int n, float x[m], float y[m], float q[n+1], float *s0);

2. ввести значение переменной m – количество узлов аппроксимации,

3. ввести значение переменной n – количество слагаемых аппроксимирующей функции (n<=m-1),

4. описать массивы:

float x[m], y[m]; // значения аргумента и функции

// в узлах аппроксимации

float q[n+1]; // вектор коэффициентов

// аппроксимирующей функции

5. описать слагаемые аппроксимирующей функции:

void slagaemye(float x, float f[])

//

// Описание слагаемых суммы линейно независимых функций

//

// Слагаемые описываются как элементы массива f[n+1]:

// n - количество слагаемых;

// нулевой элемент массива обязательно равен 1.0:

// f[0]=1.0;

// все остальные элементы - аппроксимирующие функции-слагаемые с аргументом x,

// например:

// f[0]=1.0; - свободный член - обязательно!

// f[1]=sin(x);

// f[2]=exp(2.0*x);

// и т.д.

//

{

}

6. ввести массивы x [m], y[m],

7. обратиться к программе вычислений коэффициентов аппроксимирующей функции:

approks_summoj_funkc(m, n, x, y, q, &s0)

8. вывести на экран терминала (в текстовый файл) вектор коэффициентов q[n+1] и среднеквадратическую погрешность аппроксимации s0.

Пример: аппроксимировать функцию, заданную таблицей ее значений:

x   0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0
y 2.5 0.75 -1.15 -2.75 -3.85 -4.15 -3.55 -2.25 -0.15 2.15 4.55

следующей функцией:

f(x)=q0 + q1sin(x) + q2cos(x) + q3sin(2x) + q4cos(2x)

В этом случае m=11, n=4 (количество линейно независимых слагаемых).

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

void approks_summoj_funkc(int m, int n, float x[m], float y[m], float q[n+1], float *s0);

int main(int argc, char **argv)

{

int m; // количество узлов аппроксимации

int n; // количество линейно независимых слагаемых
// в аппроксимирующей функции

float s0; // среднеквадратическая погрешность аппроксимации

int i; // рабочая переменная для ввода исходных данных

Char c0;

printf("\nUzlov approksimacii m= ");

scanf("%d", &m);

printf("\nKolichestvo approks. funkc. n (n<m) = ");

scanf("%d", &n);

float x[m], y[m]; // исходные узлы аппроксимации

float q[n+1]; // массив коэффициентов при слагаемых

// аппроксимирующей функции

printf("\nVvedite vector argumenta (%d znacheniy):\n", m);

for (i=0; i<m; i++)

scanf("%f", &x[i]);

printf("\n");

printf("\nVvedite vector funkcii (%d znacheniy):\n", m);

for (i=0; i<m; i++)

scanf("%f", &y[i]);

printf("\n");

printf("\nApproksimacija summoj funkcij\n");

approks_summoj_funkc(m, n, x, y, q, &s0);

printf("\nKoefficienty pri approks. funkcijah:\n");

for (i=0; i<n+1; i++)

printf("%10.5f", q[i]);

printf("\n");

printf("\nSrednekvadr. pogreshn. approksimacii: %e\n", s0);

c0=getch();

Return 0;

}

Описание слагаемых аппроксимирующей функции:

void slagaemye(float x, float f[])

//

// Описание слагаемых суммы линейно независимых функций

//

// Слагаемые описываются как элементы массива f[n+1]:

// n - количество слагаемых;

// нулевой элемент массива обязательно равен 1.0: // f[0]=1.0;

// все остальные элементы - аппроксимирующие функции-

// слагаемые с аргументом x,

// например:

// f[0]=1.0; - свободный член - обязательно!

// f[1]=sin(x);

// f[2]=exp(2.0*x);

// и т.д.

//

{

f[0]=1.0;

f[1]=sin(x);

f[2]=cos(x);

f[3]=sin(2.0*x);

f[4]=cos(2.0*x);

}

Результат работы программы:

Таким образом, аппроксимирующая функция имеет вид:

f(x)=0,687 + 1,763 sin(x) – 1,145 cos(x) – 4,906 sin(2x) + 2,964cos(2x)

 

 

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

В головной программе необходимо:

1. описать прототип функции:





Поделиться с друзьями:


Дата добавления: 2017-03-11; Мы поможем в написании ваших работ!; просмотров: 337 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2488 - | 2300 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.