محاسبه ضرایب سری فوریه یک تابع متناوب در متلب
با استفاده از ضرایب سری فوریه یک تابع متناوب، می توانیم آن تابع را بر حسب مجموعه ای از توابع پایه تقریب بزنیم. فرض کنید تابع f(x) دارای دوره تناوب باشد. در این صورت این تابع را می توانیم بر حسب ضرایبی از sin و cos به دست آوریم. این ضرایب به صورت زیر محاسبه می شوند :
\[ a_n={1 \over \pi}\int_{-\pi}^{\pi} f(x)cos(nx)\,dx, ~~~~~ n \geq 0 \] \[ b_n={1 \over \pi}\int_{-\pi}^{\pi} f(x)sin(nx)\,dx, ~~~~~ n \geq 1 \]
نکته مهم این است که برای به دست آوردن ضرایب سری فوریه، تابع f(x) حتما باید در بازه دوره تناوب خود، انتگرال پذیر باشد.
تابع f(x) را نیز به وسیله این ضرایب می توانیم به صورت زیر تقریب بزنیم :
\[ (S_Nf)(x)={a_0 \over 2} + {\sum_{n=1}^N [a_ncos(nx)+b_nsin(nx)],} ~~~~~ N \geq 0 \]
حال می خواهیم با متلب برنامه ای بنویسیم که ضرایب سری فوریه تابعی دلخواه را برای ما به دست آورده و همچنین مقدار تقریب زده شده این تابع به وسیله این ضرایب سری فوریه را در یک x مشخص حساب کند. فرض می کنیم تابع به صورت f(x)=sin(x) باشد و کدهای زیر را می نویسیم :
clc
syms x
f=sin(x);
N=10;
a_0=(1/pi)*int(f*cos(0*x),-pi,pi)
for n=1:N
a_n(n)=(1/pi)*int(f*cos(n*x),-pi,pi);
b_n(n)=(1/pi)*int(f*sin(n*x),-pi,pi);
end
a_n
b_n
f_new=a_0/2;
for n=1:N
f_new=f_new+a_n(n)*cos(n*x)+b_n(n)*sin(n*x);
end
subs(f_new,x,5)
subs(f,x,5)
تابع f_new که بر حسب ضرایب سری فوریه به دست می آید، تقریبی از تابع f می باشد. دستور subs(f_new,x,5) ، در تابع f_new ، مقدار x=5 را جایگذاری می کند. همچنین در خط بعدی، مقدار subs(f,x,5) را محاسبه کرده ایم تا بتوانیم مقدار تقریبی f_new(5) را با مقدار f(5) مقایسه کنیم.
نتیجه :
0
a_n =
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
b_n =
[ (5734161139222659*pi)/18014398509481984, 0, 0, 0, 0, 0, 0, 0, 0, 0]
ans =
-0.9589
ans =
-0.9589
مشاهده می کنید که دو مقدار، دقیقا با هم برابر شده اند.
سلام
ممنون از سایت خوبتون ولی در اجرای این کد مشکلی وجود داره. برخلاف خروجی ای که توی سایت گذاشتین، وقتی کد اجرا میشه دو خط آخر که محاسباته اجرا نمیشه و فقط مینویسه (5)sin
مشکلش چیه؟
سلام.
محاسبات صحیح است، اما نتیجه نهایی به صورت یک عدد صحیح یا عدد اعشاری نمایش داده نشده.
برای اینکه نتیجه را به صورت یک عدد صحیح یا عدد اعشاری داشته باشیم، می توانیم از دستور vpa در متلب (MATLAB) استفاده نماییم () (در صورت تمایل، برای تعیین تعداد رقم اعشاری، توضیحات نوشته شده در کلید مورد نظر را بخوانید).
بنابراین کدهای متلب (MATLAB) مورد نظر را به صورت زیر می نویسیم :
نتیجه اجرای کد متلب (MATLAB) بالا :
خیلی ممنون از توضیحات کاملتون
ممنون از توضییحات کامل و دقیق تون که با قلمی شیوا بیان شده است