| Предыдущая тема :: Следующая тема |
Полищук Андрей
Зарегистрирован: 09.11.2006 Сообщения: 49 Откуда: Ижевск
|
Добавлено: Сб Мар 20, 2010 2:40 am Заголовок сообщения: Как задать периодическую функцию |
|
|
|
Ситуация такая. Задаю массив точек. Зависимость от угла параметров механизма, конкретно, приведённые момент инерции и момент. Проинтерполирую. Получаю зависимости. Теперь это нужно подставить в диффуравнение. А для этого показать, что функции периодические с периодом 2*Pi.
Как это сделать? Давно не брал а руки шашки...
|
|
| Вернуться к началу |
|
|
Kitonum
Зарегистрирован: 31.12.2008 Сообщения: 586 Откуда: г. Пенза
|
Добавлено: Вс Мар 21, 2010 9:16 am Заголовок сообщения: Re: Как задать периодическую функцию |
|
|
|
| Полищук Андрей писал(а): | Ситуация такая. Задаю массив точек. Зависимость от угла параметров механизма, конкретно, приведённые момент инерции и момент. Проинтерполирую. Получаю зависимости. Теперь это нужно подставить в диффуравнение. А для этого показать, что функции периодические с периодом 2*Pi.
Как это сделать? Давно не брал а руки шашки... |
Для получения аппроксимирующей функции используйте метод наименьших квадратов (команда CurveFitting[LeastSquares]), указав в качестве опции тригонометрический полином, которым хотите приблизить. Количество точек в Вашем массиве должно быть не менее количества коэффициентов (параметров) этого полинома. Тогда Вы автоматически получаете функцию периодическую с периодом 2*Pi и ничего не надо показывать.
|
|
| Вернуться к началу |
|
|
Kitonum
Зарегистрирован: 31.12.2008 Сообщения: 586 Откуда: г. Пенза
|
Добавлено: Вс Мар 21, 2010 2:59 pm Заголовок сообщения: |
|
|
|
Если количество точек в массиве будет равно числу параметров, то тригонометрический полином пройдёт в точности через все точки. Пример:
A:=CurveFitting[LeastSquares]([2*Pi/5,4*Pi/5,6*Pi/5,8*Pi/5,2*Pi],[1,2.5,3,5,2],x,curve=a+b*sin(x)+c*cos(x)+d*sin(2*x)+e*cos(2*x));
A := 2.700000000 - 0.2381966010 cos(x) - 0.4618033989 cos(2. x)
- 1.639247476 sin(x) - 0.7502451005 sin(2. x)
B:=plot(A,x=0..4*Pi,color=blue):
C:=plots[pointplot](<2*Pi/5,4*Pi/5,6*Pi/5,8*Pi/5,2*Pi>,<1,2.5,3,5,2>,color=red,symbolsize=20,symbol=circle):
plots[display](B,C);
|
|
| Вернуться к началу |
|
|
Полищук Андрей
Зарегистрирован: 09.11.2006 Сообщения: 49 Откуда: Ижевск
|
Добавлено: Вс Мар 21, 2010 11:52 pm Заголовок сообщения: |
|
|
|
Спасибо, не учел!
Но есть ли метод указать, что функция, которую я задаю, периодическая в общем случае? Это уже, так сказать, спортивный интерес.
|
|
| Вернуться к началу |
|
|
Kitonum
Зарегистрирован: 31.12.2008 Сообщения: 586 Откуда: г. Пенза
|
Добавлено: Пн Мар 22, 2010 1:41 am Заголовок сообщения: |
|
|
|
| Полищук Андрей писал(а): | Спасибо, не учел!
Но есть ли метод указать, что функция, которую я задаю, периодическая в общем случае? Это уже, так сказать, спортивный интерес. |
Есть, конечно! Следующая процедура PP осуществляет периодическое продолжение функции f, заданной на отрезке [0,T], на всю числовую ось с периодом T:
PP:=proc(f,T)
local g;
assign(g,x->piecewise(0<=x and x<=T,f(x),f(x-floor(x/T)*T)));
g;
end proc:
Пример:
g:=PP(x->piecewise(0<=x and x<=1,x^3,2-x),2)(x):
plot(g,x=-2..6,scaling=constrained,thickness=2);
|
|
| Вернуться к началу |
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|