2014 dxdy logo

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

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




На страницу 1, 2, 3, 4, 5, 6  След.
 
 Построение интерполяционного сплайна степени 1
Сообщение25.10.2012, 23:01 
Здравствуйте дорогие товарищи!
У меня появился вопрос. У нас есть множество точек
$x_0,\dots,x_n$
и задаём какую нибудь функцию, положим
$f(x)=x^2$

Надо реализовать линейный интерполяционный сплайн для этой функции... И вот что получается, ведь линейный сплайн выражается формулой

$S_j (x) = a_j +b_j  (x-x_j)$
где
$a_j = f(x_j)$

и значение $b_j$ находятся по формуле
$b_{j-1}=\frac{a_j-a_{j-1}}{h}$

легко найти точки $b_j$ по этой функции.
В итоге получается, что интерполяционынй полином первой степени готов к построению....

Но Как мы можем построить эти полиномы ? Ведь это лишь график из пар точек
$(x_j,f(x_j))$

и тогда для чего нужно было искать коэфициенты $b_j$ ???

Короче я немного запутался... Помогите понять, как же тогда построить эти сплайны ?

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение25.10.2012, 23:15 
Аватара пользователя
Линейный сплайн не выражается никакой формулой. Он проводится карандашом, по линеечке.
Так и построить. Вы в своём сообщении подробнейшим образом описали, как.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 00:03 
Т.е. нужно построить график по точкам ? (в wolfram Mathematica)
$(x_i,f(x_i))$
линиями, соединить точки?
и всё ?

Ну это же до боли просто ? Ведь так не может быть :-)

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 00:16 
Аватара пользователя
Да, именно это большие дяди и называют линейным сплайном. Я Вам больше скажу: Вы говорите прозой на языке флективно-синтетического типа, входящем в состав индоевропейской семьи.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 02:48 
Alexeybk5 в сообщении #635916 писал(а):
Ну это же до боли просто ? Ведь так не может быть :-)

Именно поэтому приличные люди называть сплайнами кусочно-линейную интерполяцию как-то не любят. Обычно, говоря о сплайнах, как-то предпочитают требовать хоть какой-то, да гладкости.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 13:49 
ewert в сообщении #635931 писал(а):
Обычно, говоря о сплайнах, как-то предпочитают требовать хоть какой-то, да гладкости.
В данном случае у нас как раз и выполняется максимальная гладкость, достижимая кривыми первого порядка - непрерывность нулевой производной. Хотя можно построить аппроксимирующий сплайн первого порядка по тем же узлам, который будет разрывным, хотя будет обеспечивать ту же точность интерполяции. Это к вопросу о том, что такой
Цитата:
линейный интерполяционный сплайн для этой функции
можно построить далеко не единственным образом. Весь вопрос в терминах - что называть сплайном. Если любую кусочно определенную функцию, тогда все в рамках терминов.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 13:59 
Аватара пользователя
Точность у него тоже максимально возможная: он проходит через все точки. Точнее некуда. Но даже таких - и точных, и непрерывных - много. Тот, который нужен, отличается ещё кое-чем.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 14:12 
ИСН в сообщении #636071 писал(а):
Точность у него тоже максимально возможная: он проходит через все точки. Точнее некуда.
Ну во первых, я не сказал "точнее", я сказал "такой же точности". Во вторых, то, что сплайн проходит через все точки вовсе не гарантирует максимальную точность - это легко показать на любом примере.
UPD Понял что мне не удалось выразить мою мысль - я имею в виду, что для большинства гладких функций можно построить линейный сплайн на той же сетке, который не будет проходить через точки, но будет точнее того, который будет проходить.
ИСН в сообщении #636071 писал(а):
Но даже таких - и точных, и непрерывных - много. Тот, который нужен, отличается ещё кое-чем.
Если вы про аппроксимацию производной в узлах сетки, то те непрерывные линейные сплайны, которые проходят через точки но не аппроксимируют производную скорее всего будут проигрывать в точности.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 14:32 
Аватара пользователя
Не знаю, что такое "большинство гладких функций". Если о функции известны только её значения в конкретных точках, то всё остальное может быть каким угодно.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 14:56 
ИСН в сообщении #636081 писал(а):
Если о функции известны только её значения в конкретных точках
то любые разговоры о точности интерполяции теряют смысл. Однако же они ведутся, просто подразумевается, что набор точек задает некую гладкую функцию с ограниченной нормой и т.д.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 15:03 
Аватара пользователя
Дак это Вы фактически проводите какой-то сплайн более высокого порядка, или вообще не сплайн, а единый полином - и уже по соответствию с ним оцениваете все приближения, сделанные более скудными средствами.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение26.10.2012, 15:09 
Или же с самого начала (как автор в первом посте и писал) мы уже имеем какую-нибудь исходную функцию, но хотим сделать её вычисление скудными средствами - например, потому что не хватает машинных ресурсов для реального времени.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение01.11.2012, 22:54 
дорогие товарищи, здравствуйте.
Увы я не совсем правильно сформулировал вопрос в первый раз.

Нужно оценить апроксимацию функции сплайнами первого порядка. Т.е. "накопление" значений разности по модулю между функцией и соответствующим сплайном $S_j$ на отрезке $x_j,x_{j+1}$ .

Но пока проблема не в этом, а в реализации самой функции сплайна на этих участках.
Да, в узлах сетки, значение сплайна совпадает с функцией, но в промежутках, они различны.
Для того, чтобы посчитать их, я пытаюсь записать функцию, которая будет находить значение j-того сплайна, на интервале $x_j,x_{j+1}$

Код написан в Wolfram Mathematica


Код:
Для функции начальны еданные таковы
a = -10.;
b = 10.;
n = 10.;
f[x_] := Exp[x]

h = (b - a)/n;
X[n_] := Table[{a + h *k, f[a + h*k]}, {k, 0, n}]
X[n] // MatrixForm

в эту функцию надо занести данный из х и она должа записать таблицу со значениями сплайна в этой точке х.



sg1[x_, n0_] := Module[{n = n0, j, X = X[n]},
For[j = 1, j <= n + 1, j++,
If[x < (j)*h && x > (j - 1)*h,
s = Table[{j + 1,
f[X[[j, 2]]]*(x - X[[j + 1, 1]])/(X[[j, 1]] - X[[j + 1, 1]]) +
f[X[[j + 1,
2]]]*((x - X[[j, 1]])/(X[[j + 1]] - X[[j, 1]]))}, {j, 1,
n}]]]
]

x1 = Table[x, {x, a, b, 1/5}];
x1
sg1[x1, n]
s

Но почему-то вместо таблицы, в s заносится лишь одно значение, и то в формате
{***,{***,***}}
вместо {j,s_j()},т.е.{ j-тый сплайн, и значение j сплайна в точке }
как я понял, это из-за того что не выполняется правильно опирация сложения и деления в этой части кода:
"f[X[[j, 2]]]*(x - X[[j + 1, 1]])/(X[[j, 1]] - X[[j + 1, 1]]) +
f[X[[j + 1, 2]]]*((x - X[[j, 1]])/(X[[j + 1]] - X[[j, 1]]))"

Если не трудно, вы не могли бы помочь заставить этоу функцию работать ?

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

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение01.11.2012, 23:24 
В чем могут быть сложности? Исходная функция на отрезке есть, задаете сетку, строите сплайн, анализируете модуль отклонения - хоть график его стройте, хоть максимум ищите, хоть анализируйте график этого максимума в зависимости от частоты сетки...

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение01.11.2012, 23:26 
Аватара пользователя
Перебором находить, между какими натуральными числами находится x/h - это, конечно, тот ещё прикол. Но ладно. Хуже другое: я не понимаю, что должна вычислять функция sg1. Значение сплайна в точке x, что ли? А зачем тогда у неё два аргумента? И зачем Вы пытаетесь сделать так, чтобы она возвращала массив?

 
 
 [ Сообщений: 81 ]  На страницу 1, 2, 3, 4, 5, 6  След.


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