Ряд Фурье

Форум пользователей пакета Maple

Модератор: Admin

Zombare
Сообщения: 2
Зарегистрирован: Ср дек 07, 2011 10:18 pm

Ряд Фурье

Сообщение Zombare » Чт дек 08, 2011 7:06 pm

Помогите, пожалуйста, с программой.
Не выводит график сумм ряда на рисунок.
Не могу найти ошибки.

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Ряд Фурье с OrthogonalExpansions

Сообщение Markiyan Hirnyk » Чт дек 08, 2011 7:31 pm

Zombare писал(а):Помогите, пожалуйста, с программой.
Не выводит график сумм ряда на рисунок.
Не могу найти ошибки.
Не занимайтесь кустарщиной. Используйте http://www.maplesoft.com/applications/v ... ?SID=33406

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Ряд Фурье

Сообщение Kitonum » Чт дек 08, 2011 8:54 pm

Zombare писал(а):..Не могу найти ошибки...

Нашёл ошибки в трёх местах и исправил (болдом)

Fourier:=proc(f::algebraic,n::integer)
local a,b,k,l,p,S,sf:
a[0]:=(1/(2*Pi))*(int(f(x),x=-Pi..Pi));
s[0]=a[0];
for k from 1 to n do
a[k]:=(1/Pi)*int(f(x)*cos(k*x),x=-Pi..Pi);
b[k]:=(1/Pi)*int(f(x)*sin(k*x),x=-Pi..Pi);
S[k]:=a[0]+add(a[l]*cos(l*x)+b[l]*sin(l*x),l=1..k);
sf[k]:=unapply(S[k],x);
p[k]:=plot(sf[k](x),x=-2*Pi..2*Pi,color=COLOR(RGB,k/n,1-k/n,0));
od;
p[n+1]:=plot(f(x),x=-Pi..Pi,thickness=2,color=blue,discont=true);
plots[display](seq(p[k],k=1..(n+1)),view=[-2*Pi..2*Pi,-0.3..2.3]);
end proc;


Не понял зачем вызван пакет plottools да и plots нецелесообразно загружать ради одной команды. Если хотите применять процедуру к разным функциям, то диапазон по вертикальной оси надо сделать зависящим от f .

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Output

Сообщение Markiyan Hirnyk » Чт дек 08, 2011 9:09 pm

st := time(); Fourier(x, 4); time()-st
228.969
Изображение

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Output

Сообщение Kitonum » Чт дек 08, 2011 10:12 pm

Markiyan Hirnyk писал(а):st := time(); Fourier(x, 4); time()-st
228.969

Да, Вы правы! Работает слишком медленно. Не заметил ещё одну неточность. В тексте кода процедуры везде надо заменить f(x) на f . Тогда будет работать быстро!

Zombare
Сообщения: 2
Зарегистрирован: Ср дек 07, 2011 10:18 pm

Сообщение Zombare » Чт дек 08, 2011 11:06 pm

Большое спасибо!
:D

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Умная мысля приходит опосля

Сообщение Markiyan Hirnyk » Чт дек 08, 2011 11:09 pm

Kitonum писал(а):Да, Вы правы! Работает слишком медленно. Не заметил ещё одну неточность. В тексте кода процедуры везде надо заменить f(x) на f . Тогда будет работать быстро!
А Вы продумали как вводить множители cos(k*x)и sin(k*x)в интегралы для коэффициентов Фурье?

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Умная мысля приходит опосля

Сообщение Kitonum » Чт дек 08, 2011 11:59 pm

Markiyan Hirnyk писал(а):
Kitonum писал(а):Да, Вы правы! Работает слишком медленно. Не заметил ещё одну неточность. В тексте кода процедуры везде надо заменить f(x) на f . Тогда будет работать быстро!
А Вы продумали как вводить множители cos(k*x)и sin(k*x)в интегралы для коэффициентов Фурье?

Не понял смысл вопроса!

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Разьяснение

Сообщение Markiyan Hirnyk » Пт дек 09, 2011 12:16 am

Как понимать
a[k]:=(1/Pi)*int(f*cos(k*x),x=-Pi..Pi); ?

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Разьяснение

Сообщение Kitonum » Пт дек 09, 2011 12:55 am

Markiyan Hirnyk писал(а):Как понимать
a[k]:=(1/Pi)*int(f*cos(k*x),x=-Pi..Pi); ?

В процедуре f задана как выражение, а не как функция! Поэтому не вижу никаких противоречий:

f:=x^2: k:=3:
a[k]:=(1/Pi)*int(f*cos(k*x),x=-Pi..Pi);

a[3] := -4/9

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Разьяснение

Сообщение Markiyan Hirnyk » Пт дек 09, 2011 8:49 am

Kitonum писал(а):В процедуре f задана как выражение, а не как функция! Поэтому не вижу никаких противоречий:

Вы правы:
st := time(); Fourier1(x, 4); time()-st
0.078