Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.10.2010, 20:44
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
Вопрос Сглаживание сплайнами

Помогите не Chartе сгладить график кубическими сплайнами
пример данных: любой рандомный набор чисел.
Пришлите пожалуйста код вычисления коэфициентов и построения сплайна.
А то две недели уже бьюсь и ваще ноль какие-то загагулины строит.
Буду очень длагодарен. Очень надо.!!!!!!!!!!
Ответить с цитированием
  #2  
Старый 30.10.2010, 21:10
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

не знаю, как насчет Chart'a, но вот мой исходник как раз с кубическими сплайнами. будут вопросы-пиши.
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
  #3  
Старый 31.10.2010, 22:38
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

А напиши пожалуйста как коэфициенты вычисляешь и формулу кодом
Ответить с цитированием
  #4  
Старый 31.10.2010, 23:40
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

в исходнике есть же
Код:
class procedure TInterpolator.Interpolate(na:array of TNode);
var i, j:integer;
    A:TMatrix;
    B:array of extended;
begin
  Done:=false;

  //Проверка числа узлов
  N := Length(na) - 1;
  if N<=2 then
    begin
      Raise Exception.Create('Number of nodes must be greater than 3!') at @TInterpolator.Interpolate;
      Exit;
    end;

  SetLength(Nodes, N+1);
  for i:=0 to N do
    Nodes[i] := na[i];

  SortNodes();  

  //Формирование тридиагональной матрицы
  SetLength(A, N+1);
  for i:=0 to N do
    begin
      SetLength(A[i], N+1);
      for j:=0 to N do
        A[i, j]:=0;
    end;
  A[0, 0] := 1;
  A[N, N] := 1;

  SetLength(B, N+1);
  SetLength(M, N+1);
  M[0]:=0;
  M[N]:=0;
  for i:=1 to N-1 do
    begin
      A[i, i-1]:=h(i-1);
      A[i, i] := 2*(h(i-1) + h(i));
      A[i, i+1] := h(i);
      B[i]:=3*( (f(i+1)-f(i))/h(i) - (f(i)-f(i-1))/h(i-1));
    end;

  //Ищем коэффициенты, решая систему уравнений
  TSLESolver.TridiagonalShuttle(A, B, M);

  Done:=true;
end;

//процедура решения системы линейных уравнений
//S-коэффициенты при Х
//R-правая часть
//X-результат
class procedure TSLESolver.TridiagonalShuttle(S:TMatrix; R:array of extended; var X:array of extended);
var a, b:array of extended;
    n,i:integer;
begin

  n := Length(R);
  SetLength(a, n);
  SetLength(b, n);

  A[1]:=-S[0, 1]/S[0, 0];
  B[1]:=R[0]/S[0, 0];

  for i:=1 to n-2 do
    begin
      A[i+1] := -S[i, i+1]/(S[i, i] +S[i, i-1]*a[i]);
      B[i+1] := (-S[i, i-1]*b[i] + R[i])/(S[i, i] +S[i, i-1]*a[i]);
    end;

  x[n-1] := (-S[n-1, n-2]*b[n-1] + R[n-1])/(S[n-1, n-1] +S[n-1, n-2]*a[n-1]);

  for i:= n-2 downto 0 do
    x[i] := a[i+1]*x[i+1] + b[i+1];
end;
и функция для доступа к готовым сплайнам
Код:
class function TInterpolator.Spline(x:extended):extended;
var i:integer;
begin
  i:=0;
  //Нахождение номера промежутка
  while not ((x >= xi(i)) and (x <= xi(i+1))) do
    if (i+1)<Length(Nodes) then
      inc(i)
    else
      Break;
  Result :=  Spline(i, x);
end;

//Функция кубических сплайнов Эрмита
class function TInterpolator.Spline(i:integer; x:extended):extended;
begin
  Result := ( M[i+1]*Power(x - xi(i), 3) + M[i]*Power(xi(i+1) - x, 3))/(3*h(i)) + (f(i+1)/h(i) - M[i+1]*h(i)/3)*(x-xi(i)) + (f(i)/h(i) - M[i]*h(i)/3)*(xi(i+1)-x);
end;
Разумеется, отдельно работать не будет, там еще "служебные" функции есть
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025