|
Текст подпрограммы и версий ( Фортран ) ip03r.zip , ip03d.zip |
Тексты тестовых примеров ( Фортран ) tip03r.zip , tip03d.zip |
|
Текст подпрограммы и версий ( Си ) ip03r_c.zip , ip03d_c.zip |
Тексты тестовых примеров ( Си ) tip03r_c.zip , tip03d_c.zip |
|
Текст подпрограммы и версий ( Паскаль ) ip03r_p.zip , ip03e_p.zip |
Тексты тестовых примеров ( Паскаль ) tip03r_p.zip , tip03e_p.zip |
Полиномиальная интерполяция функции двух переменных, заданной на прямоугольной сетке, по модифицированной схеме Невилла.
Пусть заданы узлы неравномерной прямоугольной сетки:
X1A = { x1(1), x2(1), ..., xM(1) } ; X2A = { x1(2), x2(2), ..., xN(2) }
и значения функции f (x(1), x(2))
в узлах этой сетки: YA (I, J) = f (X1A(I), X2A(J)) ,
I = 1, 2, ..., M ; J = 1, 2, ..., N .
Предполагается, что
x1(1) < x2(1) < ... < xM(1) и x1(2) < x2(2) < ... < xN(2).
Подпрограмма IP03R вычисляет значение Y = f (X1, X2) в заданной точке плоскости с координатами (X1, X2) и оценку ошибки DY полученного значения. При этом по горизонтальному направлению используется интерполяционный полином степени MP, а по вертикальному направлению - интерполяционный полином степени NP. Вычисление соответствующих значений интерполяционных полиномов осуществляется по модифицированной схеме Невилла.
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
SUBROUTINE IP03R (X1A, X2A, YA, M, N, MP, NP, X1, X2, Y, DY,
YM, YN, C, D, IERR)
Параметры
|
X1A - X2A | вещественные векторы длины M и N, содержащие узлы { x1 (1), x2 (1), ..., xM (1) } и { x1 (2), x2 (2), ..., xN (2) } соответственно; |
| YA - | вещественный двумерный массив размеров M на N, содержащий значения интерполируемой функции двух переменных в узлах заданной сетки; |
| M, N - | длины векторов X1A и X2A соответственно, M ≥ MP + 1, N ≥ NP + 1 (тип: целый); |
| MP, NP - | заданные степени интерполяционных полиномов, MP ≥ 1, NP ≥ 1 (тип: целый); |
| X1, X2 - | координаты заданной точки на плоскости, в которой ищется значение интерполируемой функции (тип: вещественный); |
| Y - | вещественная переменная, содержащая значение интерполируемой функции в заданной точке плоскости; |
| DY - | вещественная переменная, содержащая оценку ошибки вычисленного значения интерполируемой функции; |
| YM, YN - | вещественные векторы длины M и N соответственно, используемые в подпрограмме в качестве рабочих; |
| C, D - | вещественные векторы длины max (MP + 1, NP + 1), используемые в подпрограмме в качестве рабочих; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом |
| IERR=65 - | когда по крайней мере два узла сетки по какому - либо направлению совпадают; |
| IERR=66 - | когда число узлов сетки по какому - либо направлению меньше или равно степени соответствующего интерполяционного полинома. |
Версии
| IP03D - | полиномиальная интерполяция функции двух переменных, заданной на прямоугольной неравномерной сетке, по модифицированной схеме Невилла в режиме удвоенной точности; при этом параметры X1A, X2A, YA, X1, X2, Y, DY, YM, YN, C, D должны иметь тип DOUBLE PRECISION. |
Вызываемые подпрограммы
| IP02R - | вычисление значения интерполяционного полинома в заданной точке по модифицированной схеме Невилла; используется в подпрограмме IP03R; |
| IP02D - | вычисление значения интерполяционного полинома в заданной точке по модифицированной схеме Невилла в режиме удвоенной точности; используется в подпрограмме IP03D. |
Замечания по использованию
| Заданная точка на плоскости не обязательно должна лежать внутри заданной прямоугольной сетки. В этом случае подпрограмма IP03R и IP03D выполняют полиномиальную экстраполяцию двух переменных. |
DIMENSION X1A(15), X2A(10), YA(15, 10), YM(15),
* YN(10), C(6), D(6)
M = 15
N = 10
R = 0.0
DO 1 I = 1, M
X1A(I) = R
1 R = R + 0.1
R = 0.0
DO 2 I = 1, N
X2A(I) = R
2 R = R + 0.1
DO 3 I = 1, M
DO 3 J = 1, N
3 YA(I, J) = SIN(X1A(I))*SIN(X2A(J))
MP = 5
NP = 4
X1 = 0.55
X2 = 0.65
CALL IP03R (X1A, X2A, YA, M, N, MP, NP, X1, X2, Y, DY, YM,
* YN, C, D, IERR)
Результаты:
Y = 0.316323
DY = 0.616967E-07
IERR = 0