Лабораторная

Лабораторная работа 10 / lab10/LR_10 v/ВМ_10.doc

 

Министерство образования и науки РФ

Санкт-Петербургский государственный электротехнический университет

“ЛЭТИ”

 

кафедра МОЭВМ

 

 

 

 

 

 

 

 

 

Лабораторная работа No10 по дисциплине вычислительная математика

на тему:

«Интерполяционные формулы для равноотстоящих узлов».

   

 

 

 

 

 

 

 

 

 

г. Санкт-Петербург

  1. год

I. Цель работы:

 

Необходимо разработать программу, обеспечивающую вычисление значения функции в заданных точках с использованием подходящих для каждого конкретного случая интерполяционных формул.

Используя подходящую интерполяционную формулу, вычислить в точках x1, x2, x3 значения функции, заданной таблицей, для узлов с равноотстоящим шагом.

 

x1 = 1.3020;

x2 = 1.5690;

x3 = 1.8350

 

X[ 0] = 0.3120

Y[ 0] = -0.3060

X[ 1] = 0.4990

Y[ 1] = -0.0760

X[ 2] = 0.6870

Y[ 2] = 0.0180

X[ 3] = 0.8740

Y[ 3] = 0.0150

X[ 4] = 1.0620

Y[ 4] = -0.0440

X[ 5] = 1.2490

Y[ 5] = -0.1210

X[ 6] = 1.4370

Y[ 6] = -0.1770

X[ 7] = 1.6240

Y[ 7] = -0.1720

X[ 8] = 1.8120

Y[ 8] = -0.0650

X[ 9] = 1.9990

Y[ 9] = 0.1800

X[10] = 2.1870

Y[10] = 0.6080

 

 

 

II. Общие сведения:

Пусть величина является функцией аргумента . Это означает, что любому значению из области определения поставлено в соответствие значение . Однако на практике часто неизвестна связь между и , т. е. невозможно записать эту связь в виде некоторой зависимости . В других случаях при известной зависимости ее использование в практических задачах затруднительно (например, она содержит сложные, трудно вычисляемые выражения).

Наиболее распространенным и важным для практического использования случаем, когда вид связи между параметрами и неизвестен, является задание этой связи в виде некоторой таблицы , в которой дискретному множеству значений аргумента поставлено в соответствие множество значений функции . Эти значения – либо результаты расчетов, либо экспериментальные данные. На практике могут понадобиться значения величины и в других точках, отличных от узлов . Таким образом, приходим к необходимости использования имеющихся табличных данных для приближенного вычисления искомого параметра при любом значении (из некоторой области) определяющего параметра , поскольку точная связь неизвестна.

Этой цели служит задача о приближении (аппроксимации) функций: данную функцию требуется аппроксимировать (приближенно заменить) некоторой функцией так, чтобы отклонение (в некотором смысле) от в заданной области было наименьшим. Функция при этом называется аппроксимирующей.

Для практики важен случай аппроксимации функции многочленом

(1.1)

Этот случай, т. е. приближение многочленами, является одной из задач классического численного анализа. Рассмотрим аппроксимацию этого рода и методы ее реализации в вычислительных процедурах на ЭВМ. Коэффициенты в процедурах подбираются так, чтобы достичь наименьшего отклонения многочлена от данной функции.

Если приближение строится на заданном дискретном множестве точек , то аппроксимация называется точечной. Одним из основных типов точечной аппроксимации является интерполирование, которое заключается в следующем: для данной функции строится многочлен (1.1), принимающий в заданных точках те же значения , что и функция , т. е.

(1.2)

При данной постановке задачи предполагается, что среди значений нет одинаковых: при . Точки называются узлами интерполяции, а многочлен - интерполяционным многочленом. Близость интерполяционного многочлена к заданной функции состоит, таким образом, в том, что их значения совпадают на заданной системе точек (узлов).

Максимальная степень интерполяционного многочлена . В этом случае говорят о глобальной интерполяции, так как один многочлен

(1.3)

используется для интерполяции функции на всем рассматриваемом интервале изменения аргумента . Коэффициенты многочлена (1.3) находят из системы уравнений (1.2). Можно показать, что при () эта система имеет единственное решение.

Возможны два случая задания функции :

- точки располагаются на оси абсцисс неравномерно на различных расстояниях одна от другой - случай неравноотстоящих узлов;

- точки располагаются на оси абсцисс равномерно с фиксированным шагом - случай равноотстоящих узлов.

Если значения функции заданы в точках

с постоянным положительным шагом, то часто используется интерполяционный многочлен Ньютона для интерполяции вперед

, (1.10)

где , а конечные разности , носящие названия нисходящих разностей, находят из соотношений

,

.

Интерполяционный многочлен (1.10) удобно использовать при работе в начале таблицы значений функции и для экстраполяции левее точки .

Интерполяционный многочлен с узлами где , имеет вид

(1.11)

и называется интерполяционным многочленом Ньютона для интерполяции назад. Его удобно использовать при интерполяции в конце таблицы и для экстраполяции правее точки . Входящие в выражение (1.11) значения конечных восходящих разностей находят из соотношений

,

..............................................

.

Если при заданном в таблице значений функции с шагом имеется достаточное число узлов с каждой стороны от , то целесообразно узлы интерполяции выбрать так, чтобы точка оказалась как можно ближе к середине минимального отрезка, содержащего узлы. При этом обычно в качестве берется ближайший к узел, затем за принимается ближайший к узел, расположенный с противоположной от стороны, чем . Следующие узлы назначаются поочередно с разных сторон от и должны быть расположены как можно ближе к . Одной из возможных схем интерполяции в этом случае является схема Стирлинга с интерполяционным многочленом вида

В этом выражении учитывается, что дано нечетное число значений функции , где . Обычно эту формулу целесообразно использовать при .

 

 

III. Порядок выполнения работы:

 

1) Составить вспомогательные функции для вычисления факториала, количества перестановок, а также нисходящих и восходящих разностей.

2) Составить функцию для инициализации массивов, содержащих таблицу задания функции.

3) Составить функции для вычисления значений функции с помощью интерполяционного многочлена Ньютона для интерполяции назад и схемы Стирлинга, содержащие обращения к вспомогательным функциям.

4) Составить головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.

5) Провести вычисления по программе:

 

 

IV. Выполнение работы:

 

    Точки х2 и х3 лежат в конце таблицы, поэтому для определения значений функций в этих точках нам следует воспользоваться интерполяционным многочленом Ньютона для интерполяции назад.

Точка х1 лежит в середине таблицы. Кроме того

,

т. е. .

    Поэтому для нахождения значения функции в точке х1 целесообразно использовать схему Стирлинга.

Для того, чтобы выполнить эту задачу, нам необходимо совершить следующие действия:

 

1) Составим вспомогательные функции для вычисления факториала, количества перестановок, а также нисходящих и восходящих разностей.

 

////////////////////////////////////////////////////////////////

int fact(int i)

{

if (i<=1) return 1;

else return (i*fact(i-1));

}

////////////////////////////////////////////////////////////////

int C(int j, int k)

{

return (fact(k)/(fact(j)*fact(k-j)));

}

////////////////////////////////////////////////////////////////

double down_dif(int r, int k, float* F)

{

double sum=0;

 

for(int j=0; j<=r; j++)

sum+=pow(-1,j)*C(j,r)*F[kj];

return (sum);

}

////////////////////////////////////////////////////////////////

double up_dif(int r, int k, float* F)

{

return (down_dif(r,k-r,F));

}

////////////////////////////////////////////////////////////////

double down_dif_St(int r, int k, float* F)

{

double sum=0;

 

for(int j=0; j<=k; j++)

sum+=pow(-1,j)*C(j,k)*F[k-j];

return (sum);

}

////////////////////////////////////////////////////////////////

 

2) Составим функцию для инициализации массивов, содержащих таблицу задания функции.

 

void mas_init(float* X, float* F)

{

X[0]=0.3120; F[0]=-0.3060;

X[1]=0.4990; F[1]=-0.0760;

X[2]=0.6870; F[2]=0.0180;

X[3]=0.8740; F[3]=0.0150;

X[4]=1.0620; F[4]=-0.0440;

X[5]=1.2490; F[5]=-0.1210;

X[6]=1.4370; F[6]=-0.1770;

X[7]=1.6240; F[7]=-0.1720;

X[8]=1.8120; F[8]=-0.0650;

X[9]=1.9990; F[9]=0.1800;

X[10]=2.1870; F[10]=0.6080;

}

 

3) Составим функции для вычисления значений функции с помощью интерполяционного многочлена Ньютона для интерполяции назад и схемы Стирлинга, содержащие обращения к вспомогательным функциям.

 

////////////////////////////////////////////////////////////////

double back_Newton(float x, float* X, float* F)

{

double sum=F[n], q, a;

 

q=(x-X[n])/h;

a=q;

for(int i=1; i<=n; i++, a*=(q1))

sum+=a*up_dif(i,n,F)/fact(i);

return (sum);

}

////////////////////////////////////////////////////////////////

double Stirling(float x, float* X, float* F)

{

double sum, q, a;

 

q=(x-X[6])/h;

sum=F[6];

a=1;

for(int i=1; i<=n; i++, a*=(q*q-i+1))

sum+=q*a*(down_dif_St(2*i-1,i,F)+down_dif_St(2*i,i-1,F))/(fact(2*i-1)*2)+q*q*a*down_dif_St(2*i,i,F)/fact(2*i);

return (sum);

}

////////////////////////////////////////////////////////////////

 

4) Составим головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.

 

////////////////////////////////////////////////////////////////

void main()

{

void mas_init(float*,float*);

double back_Newton(float,float*,float*);

double Stirling(float,float*,float*);

float X[n+1], F[n+1];

double Ln1, Ln2, Ln3;

 

float const x1=1.2230,

x2=1.6830,

        x3=1.7640;

 

mas_init(X,F);

Ln1=Stirling(x1,X,F);

Ln2=back_Newton(x2,X,F);

Ln3=back_Newton(x3,X,F);

printf(Ln(x1) = %f ,Ln1);

printf(Ln(x2) = %f ,Ln2);

printf(Ln(x3) = %f ,Ln3);

getch();

}

////////////////////////////////////////////////////////////////

 

5) Проведем вычисления по программе:

Ln(x1) = -0.107157

Ln(x2) = 0.033976

Ln(x3) = 0.129582   

 

 

 

V. Вывод:

 

Проанализировав результаты работы программы, мы можем сделать вывод, что в том случае, если точка, значение функции в которой нам необходимо найти, лежит в конце таблицы задания функции, то для решения задачи мы можем воспользоваться интерполяционным многочленом Ньютона для интерполяции назад. Если же точка лежит в середине таблицы и , то целесообразнее воспользоваться схемой Стирлинга.