2014 dxdy logo

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

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




 
 Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 15:24 
Как построить в программе Wolfram Matematica сплайн интерполяцию функции ?
Написал такой код в этой программе
$f[x_] = \sin[x]/((1 + x^6)^2)$
$a = -3.14;$
$b = 3.14;$
$n = 6;$
$h = (b - a)/n;$
$x[i_] = a + ih$
$w[x_, i_] = (x - x[i])/h$

$For[i = 0, i \leqslant n, i++, y[i] = f[x[i]]]$
$A[1] = 4 h;
For[i = 0, i \leqslant n, i++, De[i] = (y[i + 1] - y[i])/h]
B[1] = De[1] - De[0]
For[i = 2, i \leqslant n - 2, i++, A[i] = 4 h - hh/A[i - 1];
 B[i] = De[i] - De[i - 1] - B[i - 1]h/A[i - 1];]
Eps = 4 h;$

$fi = h;
A[n - 1] = Eps - hfi/A[n - 2];
B[n - 1] = De[n - 1] - De[n - 2] - B[n - 2]fi/A[n - 2];
q[n - 1] = B[n - 1]/A[n - 1];
For[i = n - 2, i \geqslant 1, i--, q[i] = (B[i] - hq[i + 1])/A[i]]
q[n] = 0;
q[0] = 0;
Clear[i];$

F[x_, i_] = 
 w[x, i]y[1 + i] + (1 - w[x, i])y[i] + 
  h^2((w[x, i]^3 - w[x, i])
      q[1 + i] + ((1 - w[x, i])^3 - (1 - w[x, i]))q[i])
g3[x_] = Which[-3.14 \leqslant x \geqslant -2.09, F[x, 0], -2.09 \leqslant x \geqslant -1.04, 
   F[x, 1], -1.04 \leqslant x \geqslant 2, F[x, 2]
   ];
Plot[{g3[x], f[x]}, {x, -3, 2}, PlotRange \to All]
Но функция сплайна у меня сильно рассходится с графиком исходным, подскажите, пожалуйста, может в коде где ошибка ?

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 15:37 
Аватара пользователя
Проверьте сами:
1. Проходит ли интерполирующая кривая через узлы интерполяции?
2. Возьмите в качестве тестовой функции степенной многочлен той же степени, что и сплайн. Должно быть точное совпадение.

 
 
 
 Posted automatically
Сообщение24.03.2013, 15:41 
Аватара пользователя
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Околонаучный софт»

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 15:44 
profrotter в сообщении #700814 писал(а):
Проверьте сами:
1. Проходит ли интерполирующая кривая через узлы интерполяции?

Нет, в том то и дело, что значения отличаются, но они отличаются на тысячных.
То есть функция в $x=1$ есть 1.23467, а сплайн 1.23498
Подскажите, где в коде может быть ошибка ?

-- 24.03.2013, 17:00 --

profrotter писал(а):

2. Возьмите в качестве тестовой функции степенной многочлен той же степени, что и сплайн. Должно быть точное совпадение.

Вы правы, взял кубический многочлен в качестве тестовой функции. Сплайн с ним практически сливается. Но почему так не получается для моей функции, которая дана в условии. (Она в 1-ой строчке кода)

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 19:21 
Аватара пользователя
Код ваш в том виде, в котором он наблюдается никто проверять не будет. Поместите его в теги [cоdе][/cоdе]. Я в математике этой не работаю, но кто-нибудь глянет наверняка.

В принципе, как и всякий глобальный метод интерполяции, для некоторых видов функций при большом числе узлов интерполяции сплайн может давать раскачку между узлами интерполяции.

Так что всякое возможно и ошибка в коде и просто непригодность выбранного метода интерполяции для вашей функции.

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 19:32 
profrotter писал(а):
Поместите его в теги [cоdе][/cоdе].

А у меня нет прав на редактирование уже своего поста.

Просьба к модераторам: отредактируйте шапку моей темы, пожалуйста.

Заметил, что многочлены хорошо интерполируются. Функции типа косинуса, синуса, тоже мой код хорошо интерполирует. Пробую интерполировать функции вида $sin(x)/(1+x^6)^k$, где k число. По условию задачи оно 0.5. Пробую его изменять: чем больше это число, тем хуже интерполяция выполняется. А чем меньше, тем лучше.
При моем числе 0.5 уже расхождение сплайна и заданной функции сильные, а при 0.05 они практически сливаются.

-- 24.03.2013, 20:36 --

profrotter писал(а):
просто непригодность выбранного метода интерполяции для вашей функции.

Это врятли, у меня в задании нужно решить эту задачу именно этим методом. Значит уже предполагается, что тут все должно быть нормально.

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 19:38 
Для приближения сплайнами есть функция Interpolation.

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 19:46 
Vince Diesel писал(а):
Для приближения сплайнами есть функция Interpolation.

Вроде в программе Wolfram Matematica такой функции нет.

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 19:59 
Аватара пользователя
Есть такая партия функция. Читайте ref/Interpolation в справке. Также tutorial/ApproximateFunctionsAndInterpolation и guide/CurveFittingAndApproximateFunctions.

 
 
 
 Re: Как построить в программе Wolfram Matematica сплайн ?
Сообщение24.03.2013, 20:07 
Aritaborian писал(а):
Есть такая партия функция..

Даже если есть, то нам нельзя пользоваться ею. Задачу нужно решить чисто математически. Иначе бы я бы тот код в шапке темы не писал. Если кратко, то я использую метод прогонки в том коде. Потом найденные коэффициенты подставляю в функцию и получаю результат.

 
 
 [ Сообщений: 10 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group