آموزش متلب (MATLAB)
۵۷۸ آموزش
نمایش دسته بندی ها (۵۷۸ آموزش)

محاسبه ضرایب سری فوریه یک تابع متناوب، در متلب (MATLAB)

با استفاده از ضرایب سری فوریه یک تابع متناوب، می توانیم آن تابع را بر حسب مجموعه ای از توابع پایه تقریب بزنیم. فرض کنید تابع 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) باشد و کدهای زیر را می نویسیم :

تابع f_new که بر حسب ضرایب سری فوریه به دست می آید، تقریبی از تابع f می باشد. دستور subs(f_new,x,5) ، در تابع f_new ، مقدار x=5 را جایگذاری می کند. همچنین در خط بعدی، مقدار subs(f,x,5) را محاسبه کرده ایم تا بتوانیم مقدار تقریبی f_new(5) را با مقدار f(5) مقایسه کنیم.

نتیجه :

مشاهده می کنید که دو مقدار، دقیقا با هم برابر شده اند.

نویسنده علیرضا گلمکانی
شماره کلید 103
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 4 4 0
hamid
۱۳۹۸/۱۰/۲۵
۱۴:۱۲

سلام
ممنون از سایت خوبتون ولی در اجرای این کد مشکلی وجود داره. برخلاف خروجی ای که توی سایت گذاشتین، وقتی کد اجرا میشه دو خط آخر که محاسباته اجرا نمیشه و فقط مینویسه (5)sin
مشکلش چیه؟

admin
۱۳۹۸/۱۰/۲۵
۱۵:۳۵

سلام.
محاسبات صحیح است، اما نتیجه نهایی به صورت یک عدد صحیح یا عدد اعشاری نمایش داده نشده.
برای اینکه نتیجه را به صورت یک عدد صحیح یا عدد اعشاری داشته باشیم، می توانیم از دستور vpa در متلب (MATLAB) استفاده نماییم (کلید شماره 26435) (در صورت تمایل، برای تعیین تعداد رقم اعشاری، توضیحات نوشته شده در کلید مورد نظر را بخوانید).
بنابراین کدهای متلب (MATLAB) مورد نظر را به صورت زیر می نویسیم :

PHP Code:
<?php 
clear all
close all
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

value_1
= vpa(subs(f_new,x,5))
value_2 = vpa(subs(f,x,5))

نتیجه اجرای کد متلب (MATLAB) بالا :

PHP Code:
<?php 
a_0
=

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]


value_1 =

-
0.95892427466313852817614113118698


value_2
=

-
0.95892427466313846889315440615599


Flower

hamid
۱۳۹۸/۱۰/۲۶
۰۷:۳۹

خیلی ممنون از توضیحات کاملتون  Heart

zahra
۱۴۰۱/۰۷/۲۹
۲۲:۵۷

ممنون از توضییحات کامل و دقیق تون که با قلمی شیوا بیان شده است

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)