![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Помогите разобраться! Большая часть даже ключевых данных не совпадает, на мой взгляд, все из-за неправильно прописанной функции нахождения коэфициента D, но как исправить - я не знаю =(
вот часть кода: Код:
Function GetH_sp(x0:double):double; // kubi4eskij splain - nahozhdenie 6aga h begin If x0 < X[0] Then Result := (X[1] - X[0]) Else If x0 > X[9] Then Result := (X[9] - X[8]) Else For I := 0 To 8 Do If (x0 > X[i]) and (x0<X[i+1])Then Begin Result := (X[i] - X[i-1]); Break; End; end; Function GetA_sp(x0:double):double; // kubi4eskij splain - nahozhdenie svobodnogo 4isla A begin If x0 < X[0] Then Result := Y[0] Else If x0 > X[9] Then Result := Y[9] Else For I := 0 To 8 Do If (x0 > X[i]) and (x0<X[i+1])Then Begin Result := Y[i]; Break; End; end; Function GetB_sp(x0:double):double; // kubi4eskij splain - nahozhdenie koeficienta B begin If x0 < X[0] Then Result := (Y[2] - Y[0])/(X[2] - X[0]) Else If x0 > X[9] Then Result := (Y[9] - Y[7])/(X[9] - X[7]) Else For I := 0 To 8 Do If (x0 > X[i]) and (x0<X[i+1])Then Begin Result := (Y[i+1] - Y[i-1])/(X[i+1] - X[i-1]); Break; End; end; Function GetC_sp(x0:double):double; // kubi4eskij splain - nahozhdenie koeficienta C Var h:double; begin h:= GetH_sp(x0); If x0 < X[0] Then Result := (Y[0]+Y[2]-2*Y[1])/(h*h) Else If x0 > X[9] Then Result := (Y[7]+Y[9]-2*Y[8])/(h*h) Else For I := 0 To 8 Do If (x0 > X[i]) and (x0<X[i+1])Then Begin Result := (Y[i-1]+Y[i+1]-2*Y[i])/(h*h); Break; End; end; Function GetC_2_sp(x0:double):double; // kubi4eskij splain - nahozhdenie koeficienta C[i-1] Var h:double; begin h:= GetH_sp(x0); If x0 < X[0] Then Result := (Y[0]+Y[2]-2*Y[1])/(h*h) Else If x0 > X[9] Then Result := (Y[7]+Y[9]-2*Y[8])/(h*h) Else For I := 0 To 8 Do If (x0 > X[i]) and (x0<X[i+1])Then Begin Result := (Y[i-2]+Y[i]-2*Y[i-1])/(h*h); Break; End; end; Function GetD_sp(x0:double):double; // kubi4eskij splain - nahozhdenie koeficienta D Var h,c,c2:double; begin h:= GetH_sp(x0); c:=GetC_sp(x0); c2:= GetC_2_sp(x0); Result := (c-c2)/h ; end; function Gety0_sp(x0: double): double; Var a,c,d,b: double; begin a:= GetA_sp(x0); b:= GetB_sp(x0); c:= GetC_sp(x0); d:=GetD_sp(x0); If x0 < X[0] Then Result := (a+b*(x0-X[0])+(c/2)*(x0-X[0])*(x0-X[0])+(d/6)*(x0-X[0])*(x0-X[0])*(x0-X[0])) Else If x0 > X[9] Then Result := (a+b*(x0-X[9])+(c/2)*(x0-X[9])*(x0-X[9])+(d/6)*(x0-X[9])*(x0-X[9])*(x0-X[9])) Else For I := 0 To 8 Do If (x0 > X[i]) and (x0<X[i+1])Then Begin Result := (a+b*(x0-X[i])+(c/2)*(x0-X[i])*(x0-X[i])+(d/6)*(x0-X[i])*(x0-X[i])*(x0-X[i])); Break; end; end; Последний раз редактировалось BinguelBinguel, 06.04.2012 в 13:05. |
#2
|
|||
|
|||
![]() Добавила в программу график, теперь наглядно видно, где кубический сплайн не совпадает с другими видами интерполяции. А вопрос так и остается открытым!
|
#3
|
|||
|
|||
![]() если дело в GetD, то это функция вызывает:
GetH_sp(x0) GetC_sp(x0) GetC_2_sp(x0) ошибка может быть в любой если есть цифры этих коэффициентов для какого-нибудь x0 и массивов X,Y(глобальные переменные), то можно легко найти какая из них врёт Последний раз редактировалось Pyro, 06.04.2012 в 14:11. |
#4
|
|||
|
|||
![]() Проблема в том, что есть такие точки, при которых с=с2, и D автоматом = 0. может неправильно вычисление коефициента С?
|
#5
|
|||
|
|||
![]() может ещё цифры в массивах X,Y не правильные
|
#6
|
|||
|
|||
![]() Разобралась с кодом, тема закрыта
|