AKazak писал(а):
Спасибо!
Мне нужно найти монотонное дополнение искомой функции до нуля, но нужно "сшить" по производным это дополнение с исходной функцией и иметь возможность менять характер дополнения в окрестности нуля (например как x, exp(x), ln(1+x) и т. д.).
Кубический сплайн хорошо "сшивается" с исходной функцией, но я не знаю как менять его поведение в окрестности нуля...
Какие ещё будут предложения? Может есть какая-нибудь грамотная и толковая литература по теме?
Для кубического сплайна можно сконструировать граничное условие общего вида для т.н. "кубического выхода" функции (т.е. Вы считаете что через т.0 проходит кубический полином).
Вот одна из п/п для кубического сплайна из "КУБИС - пакет прикладных программ для интерполяции и дифференцирования функций с помощью сплайнов третьей степени (кубических сплайнов), Препринт ИАЭ им. И.В. Курчатова №3273/16, М. 1980, Авт. Катковский Е.А. и др."
(Наклоны в терминологии сплайнов - это аналоги первых производных)
Код:
SUBROUTINE SUEVLC
C***************
C ПOДПPOГPAMMA ДЛЯ PACЧETA HAKЛOHOB
C HEПEPИOДИЧECKOГO KУБИЧECKOГO CПЛAЙHA
C C ПEPEMEHHЫM ШAГOM
C***************
C ПAPAMETPЫ OБPAЩEHИЯ K ПOДПPOГPAMME :
C XZ1 , MACCИB ЗHAЧEHИЙ HAKЛOHOB B УЗЛAX CETKИ
C PAЗMEPHOCTЬЮ M ;
C Y , MACCИB OPДИHAT ПPИБЛИЖAEMOЙ
C ФУHKЦИИ PAЗMEPHOCTЬЮ M ;
C Z , MACCИB AБCЦИCC PAЗMEPHOCTЬЮ M ;
C C1 , УKAЗATEЛЬ TИПA KPAEBЫX УCЛOBИЙ HA ЛEBOЙ ГPAHИЦE :
C C1 = 0.-ЗAДAHA ПEPBAЯ ПPOИЗBOДHAЯ ;
C C1 < 0.-ЗAДAHA BTOPAЯ ПPOИЗBOДHAЯ ;
C C1 > 0.-ЗAДAHO KPAEBOE УCЛOBИE OБЩEГO TИПA ;
C Y121 , KPAEBЫE УCЛOBИЯ HA ЛEBOЙ ГPAHИЦE ;
C AM , УKAЗATEЛЬ TИПA KPAEBЫX УCЛOBИЙ HA ПPABOЙ ГPAHИЦE :
C AM = 0.- ЗAДAHA ПEPBAЯ ПPOИЗBOДHAЯ ;
C AM < 0.- ЗAДAHA BTOPAЯ ПPOИЗBOДHAЯ ;
C AM > 0.- ЗAДAHO KPAEBOE УCЛOBИE OБЩEГO TИПA ;
C Y12M , KPAEBЫE УCЛOBИЯ HA ПPABOЙ ГPAHИЦE ;
C M , ЧИCЛO УЗЛOB CETKИ CПЛAЙHA .
C***************
*( XZ1 , Y , Z , C1 , Y121 , AM , Y12M , M )
DIMENSION Y( 1 ) , Y121( 1 ) , XZ1( 1 )
*, Z( 1 ) , Y12M( 1 )
IF ( C1 ) 1 , 2 , 3
1 XZ1( 1 ) = ( Y( 2 )-Y( 1 ) )/( Z( 2 )-Z( 1 ) )
* *1.5-( Z( 2 )-Z( 1 ) )*Y121( 1 )*0.25
Q1 = -0.5
GO TO 4
2 XZ1( 1 ) = Y121( 1 )
Q1 = 0.0
GO TO 4
3 XZ1( 1 ) = 0.5*Y121( 1 )
Q1 = -0.5*Y121( 1 )
4 N = M-1
QK = Q1
IF ( N .LE.1 ) GO TO 55
DO 5 K = 2,N
ZM = Z( K+1 )-Z( K-1 )
ZF = Z( K+1 )-Z( K )
ZA = Z( K-1 )-Z( K )
ZLJ = ZF/ZM
Q1 = ZLJ*Q1+2.0
ZMJ = ZA/ZM
DK = ( ( Y( K-1 )-Y( K ) )*ZLJ/ZA+
* ( Y( K )-Y( K+1 ) )*ZMJ/ZF )*3.0
XZ1( K ) = ( DK-ZLJ*XZ1( K-1 ) )/Q1
5 Q1 = ZMJ/Q1
55 IF ( AM ) 6 , 7 , 8
6 XZ1( M ) = ( ( Y( M )-Y( M-1 ) )/ZF*3.0 +ZF*Y12M( 1 )
* *0.5 -XZ1( M-1 ) )/( Q1+2.0 )
GO TO 9
7 XZ1( M ) = Y12M( 1 )
GO TO 9
8 XZ1( M ) = ( Y12M( 1 )-Y12M( 2 )*XZ1( M-1 ) )
* /( Q1*Y12M( 2 )+2.0 )
9 XZ1( M-1 ) = Q1*XZ1( M )+XZ1( M-1 )
IF ( N .LE.1 ) RETURN
DO 10 L = 2,N
K = M-L
Q1 = QK
IF ( K .LE.1 ) GO TO 10
DO 110 J = 2,K
ZM = Z( K+1 )-Z( K-1 )
ZF = Z( K+1 )-Z( K )
ZA = Z( K-1 )-Z( K )
ZLJ = ZF/ZM
Q1 = ZLJ*Q1+2.0
ZMJ = ZA/ZM
110 Q1 = ZMJ/Q1
10 XZ1( K ) = XZ1( K+1 )*Q1+XZ1( K )
RETURN
END
Из книг посоветую:
1. Классика:
Алберг Дж.,Нильсон Э.,Уолш Дж. Теория сплайнов и ее приложения. М Мир 1972г. 318с.
2. Очень доступное изложение с примерами:
Завьялов Ю. С. и др. Методы сплайн-функций. / Ю. С. Завьялов, Б. И. Квасов, В. Л. Мирошниченко, Под ред. Н. Н. Яненко -- М.: Наука. Гл. ред. физ.-мат. лит. 1980г. 352 с.