2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:13 
Аватара пользователя
Ага! А зачем у Вас их десять? Остальные, они вообще как, нужны? Вроде нужны. Но дак надо их тоже как-то когда-то использовать, э?

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:15 
ИСН в сообщении #639237 писал(а):
Ага! А зачем у Вас их десять? Остальные, они вообще как, нужны? Вроде нужны. Но дак надо их тоже как-то когда-то использовать, э?


Да, но для этого нужна конструкция похожая на это ?

Код:
For[j = 1, j <= n, j++,
If[(x <= z[[j + 1]]) && (x >= z[[j]]),
  s3[x_] :=
   f[z[[j]]]*(x - z[[j + 1]])/(z[[j]] - z[[j + 1]]) +
    f[z[[j + 1]]]*(x - z[[j]])/(z[[j + 1]] - z[[j]])]]

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:19 
Аватара пользователя
szb := Table[{a + (h/m)*k, s2[a + (h/m)*k]}, {k, 0, n}];

Да теперь забудьте, как устроен внутри сплайн, относитесь к нему как к черному ящику.
n1=100000 или n1=10*n
h1=(b-a)/n1
szb := Table[{a + h1*k, s2[a + h1*k]}, {k, 0, n1}];

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:21 
Аватара пользователя
У меня там выше был приведён издевательский код. Допустим, a=0, x=1000, h=17. В силах ли человеческих предсказать, на каком по счёту интервале разбиения окажется наш x, или для этого нужен долгий и упоротый перебор?

-- Пт, 2012-11-02, 20:22 --

TOTAL, Ваш совет будет очень и очень актуален, но - лишь после того, как чёрный ящик станет выдавать правильный результат. Не до.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:29 
TOTAL
Спасибо
ИСН
Да, мы можем и не перебором узнать где лежит 17, но компьютер ведь не может, бес использования, наприме, метода половинчатого деления...

Разве нет простого способа найти до каких точек надо писать эту функцию... ну уже ведь близко)))

-- 02.11.2012, 20:30 --

Это не правильно,
Код:
For[j = 1, j <= n, j++,
If[(x <= z[[j + 1]]) && (x >= z[[j]]),
  s3[x_] :=
   f[z[[j]]]*(x - z[[j + 1]])/(z[[j]] - z[[j + 1]]) +
    f[z[[j + 1]]]*(x - z[[j]])/(z[[j + 1]] - z[[j]])]]


И это не правильно...
Код:
s2[x_] :=
f[z[[1]]]*(x - z[[n + 1]])/(z[[1]] - z[[n + 1]]) +
  f[z[[n + 1]]]*(x - z[[1]])/(z[[n + 1]] - z[[1]])


Но а как же тогда ?
ИСН

п.с. Вы говорили, что если откажусь от того злого цикла, то Вы подскажите ))))

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:32 
Аватара пользователя
А я и подсказываю.
Alexeybk5 в сообщении #639254 писал(а):
Да, мы можем и не перебором узнать где лежит 17
С этого места поподробнее, пожалуйста. Как мы это можем?

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:33 
ИСН в сообщении #639257 писал(а):
А я и подсказываю.
Alexeybk5 в сообщении #639254 писал(а):
Да, мы можем и не перебором узнать где лежит 17
С этого места поподробнее, пожалуйста. Как мы это можем?

ну видим, что 17 лежит ближе к нулю , чем к тысяче
Код:
x0=0
xn=1000
x=17

min[abs[xn-x],abs[x0-x]]


Но как это поможет ?
т.е. как это поможет понять какие точки писать в функцию
Код:
s2[x_] :=
f[z[[1]]]*(x - z[[n + 1]])/(z[[1]] - z[[n + 1]]) +
  f[z[[n + 1]]]*(x - z[[1]])/(z[[n + 1]] - z[[1]])

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:36 
Аватара пользователя
Ничего не понял. Ответ какой? На каком по счёту отрезке разбиения лежит x=1000? На первом? Двадцать первом? Сто двадцать первом?

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:36 
Аватара пользователя
Alexeybk5 в сообщении #639254 писал(а):
Это не правильно,
Код:
For[j = 1, j <= n, j++,
If[(x <= z[[j + 1]]) && (x >= z[[j]]),
  s3[x_] :=
   f[z[[j]]]*(x - z[[j + 1]])/(z[[j]] - z[[j + 1]]) +
    f[z[[j + 1]]]*(x - z[[j]])/(z[[j + 1]] - z[[j]])]]


Попробуйте так, пусть хотя бы с перебором правильный результат выдаст.
(Все равно то, что вы там придумываете, поможет только на равномерной сетке.)

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:38 
TOTAL в сообщении #639264 писал(а):
Alexeybk5 в сообщении #639254 писал(а):
Это не правильно,
Код:
For[j = 1, j <= n, j++,
If[(x <= z[[j + 1]]) && (x >= z[[j]]),
  s3[x_] :=
   f[z[[j]]]*(x - z[[j + 1]])/(z[[j]] - z[[j + 1]]) +
    f[z[[j + 1]]]*(x - z[[j]])/(z[[j + 1]] - z[[j]])]]


Попробуйте так, пусть хотя бы с перебором правильный результат выдаст.
(Все равно то, что вы там придумываете, поможет только на равномерной сетке.)


Да, но так увы не равботает )))) в s3 почему-то ничего не заносится)))

-- 02.11.2012, 20:39 --

ИСН в сообщении #639263 писал(а):
Ничего не понял. Ответ какой? На каком по счёту отрезке разбиения лежит x=1000? На первом? Двадцать первом? Сто двадцать первом?


Вы наводите на мысль о нахождении минимума методом половинчатого деления ?

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:39 
Аватара пользователя
Вообще да. Если планируете в дальнейшем обобщать это на неравномерные сетки, то тайны деления нам не помогут, и придётся оставить так.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:42 
ИСН в сообщении #639268 писал(а):
Вообще да. Если планируете в дальнейшем обобщать это на неравномерные сетки, то тайны деления нам не помогут, и придётся оставить так.

Да, но даже если положить, не важно какую сетку. Так увы не работает))) в s3 не заносятся значения...

Код:
a = -1.;
b = 1.;
n = 10.;
m = 15;
f[x_] := Exp[x]
h = (b - a)/n;
z := Table[a + h*k, {k, 0, n}];
z

Код:
For[j = 1, j <= n, j++,
If[(x <= z[[j + 1]]) && (x >= z[[j]]),
  s3[x_] :=
   f[z[[j]]]*(x - z[[j + 1]])/(z[[j]] - z[[j + 1]]) +
    f[z[[j + 1]]]*(x - z[[j]])/(z[[j + 1]] - z[[j]])]]

Код:
In[42]:= s3[3]

Out[42]= s3[3]

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:45 
Аватара пользователя
Alexeybk5 в сообщении #639267 писал(а):
Да, но так увы не равботает )))) в s3 почему-то ничего не заносится)))
Т.е. теперь понятно, как делать. А с языком программирования разбирайтесь сами, коли уж выбрали такой язык.

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:53 
Аватара пользователя
Так присваивать нельзя. Перепишите нормально через s3=Function[x,...]
Ещё две мелочи: n целое число (10, а не 10 с точкой), и двойные неравенства можно записывать в строчку, типа If[z[[j]]<=x<z[[j + 1]],...]

 
 
 
 Re: Построение интерполяционного сплайна степени 1
Сообщение02.11.2012, 19:57 
ИСН в сообщении #639276 писал(а):
Так присваивать нельзя. Перепишите нормально через s3=Function[x,...]
Ещё две мелочи: n целое число (10, а не 10 с точкой), и двойные неравенства можно записывать в строчку, типа If[z[[j]]<=x<z[[j + 1]],...]

так ведь For и If должны быть для выполнения этой задачи "снаружи" как это совместить)))?

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


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