2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Кто-нибудь имел дело с БЧА МГУ, Подпрограмма: IAC1R?
Сообщение03.07.2017, 15:48 


25/06/14
5
Кто-нибудь имел дело с БЧА МГУ, Подпрограмма: IAC1R? ( http://num-anal.srcc.msu.ru/lib_na/cat/i/iac1r.htm )
"Вычисление сетки и коэффициентов аппроксимирующего кубического сплайна по заданным значениям функции одной переменной и краевым условиям на заданной (возможно неравномерной) сетке."

SUBROUTINE IAC1R (X, NX, FX, LX, MXA, FXA, MXB, FXB, TX, CX)

Можете НА ПАЛЬЦАХ объяснить смысл 4-го аргумента LX ? ("LX - заданное число, порядок аппроксимирующих формул, 0 ≤ LX ≤ 1")

В описании есть ссылка на "Гребенников А.И. Метод сплайнов и решение некоррректных задач теории приближений. M.: Изд - во МГУ, 1983"
Две недели ушло на поиски этого манускрипта. А там 200 стр. убористых формул и терминов таких нет. Это еще минимум две недели на копание и не факт. Нет, чтобы по людски инструкции писать, если уж подпрограмму предлагаешь.

Спасибо.

 Профиль  
                  
 
 Re: Кто-нибудь имел дело с БЧА МГУ, Подпрограмма: IAC1R?
Сообщение03.07.2017, 17:58 
Заслуженный участник


23/07/08
10646
Crna Gora
Посмотрел текст программы и на Фортране, и на C, и на Паскале. Во всех вариантах порядок аппроксимации LX — целочисленный параметр (как и большинство «порядков»). Тогда $0\leqslant $ LX $\leqslant 1$ непонятно.

 Профиль  
                  
 
 Re: Кто-нибудь имел дело с БЧА МГУ, Подпрограмма: IAC1R?
Сообщение03.07.2017, 20:03 


25/06/14
5
svv

"Тогда $0\leqslant $ LX $\leqslant 1$ непонятно."

По тексту этой подпрограммы и её внутренних - LX = 0 / 1. Проблема - когда и для чего LX=0 и LX=1 ?

 Профиль  
                  
 
 Re: Кто-нибудь имел дело с БЧА МГУ, Подпрограмма: IAC1R?
Сообщение03.07.2017, 21:54 
Заслуженный участник


23/07/08
10646
Crna Gora
Взял для примера подпрограмму IAC1R1 на C и постарался, не меняя алгоритм, упростить её как можно больше. Например, выбросил операторы, обеспечивающие совместимость индексов с фортрановской нумерацией. Так, чтобы можно было легко увидеть, что, собственно, там делается. Вот что получилось.
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
double iac1r1_c(double *t, double *c, int lx, int j)
{
   if (lx==0)
      return c[j];
   if (lx==1)
   {
      double
         p = t[j+1] - t[j-1],
         q = t[j+1] - t[j  ],
         r = t[j  ] - t[j-1];
      return (p*p/(q*r) * c[j] - q*q/(r*p) * c[j-1] - r*r/(q*p) * c[j+1]) / 3.;
   }
   if (lx>1)
      return (438*c[j] - 112*(c[j-1] + c[j+1]) + 13*(c[j-2] + c[j+2])) / 240.;
}
 

Там есть ветвь, которая при LX $\in\{0,1\}$ вообще никогда не должна выполняться. И такое впечатление, что три ветви, соответствующие LX=0, LX=1 и LX>1, реализуют три совершенно разных подхода.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group