کلیدستان

نسخه‌ی کامل: برنامه ی سری فوریه
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
واقعا سایت مفیدی دارید ،خوشحالم که عضو شدم.
من یه سواله نه چندان سخت داشتم خواستم اینجا مطرح کنم تا هر کی که میتونه کمک کنه...
سوال :یک تابع رو داخل mfile بنویسیم ،ضرایب اویلر رو با حلقه for بنویسیم در نهایت سری فوریه تابع رو به ما بده...اگر بتونیم برنامرو طوری بنویسیم که تابع رو هم از ورودی بگیره امتیازه بیشتری داره...مثلا ما تابع f(x)=x^2 رو بدیم و سری فوریه این تابعو بگیریم
 
سلام.
خیلی ممنون.
مبحث زیر را بخوانید :

http://www.kelidestan.com/matlab/matlab-103.php

برای دریافت مقادیر در ورودی، می توانید از دستور input استفاده کنید. برای آشنایی با دستور input ، مبحث زیر را بخوانید :

http://www.kelidestan.com/matlab/matlab-88.php

 
ممنون از راهنماییتون
جوابتون درست ،اما سوال اینه که سری فوریرو برگردونه نه مقدار عددیه اون رو!خودمم برنامرو تغییر دادم که هم تابعو بگیره و هم سری رو به صورت متغیر بگردونه (نه عدد)،کلی ارور داد [img=21x31]images/smilies/huh.gif[/img]
می توانید عبارت را به صورت سمبلیک تعریف کنید (شامل جملات سری و ضرایب، مثلا با 10 جمله ابتدایی)، سپس مطابق کد همان مبحث، مقدار ضرایب را به دست آورید و سپس با دستور subs ، در آن عبارت، مقادیر ضرایب را جایگزین کنید (البته می توانید بگردید شاید روش ساده تری هم باشه).
منظورتون اینه که a-n و b-n و a-0 رو نمادیی بدم؟
بازم ارور داد!!!!!!!
کدهاتون رو اینجا بنویسید تا بررسی کنم.
 
کد:
clear all
clc
syms x a-n b-n
f(x)=input('Please insert f(x)=')
l=input('Please enter l=')
N=10;
a_0=(1/2l)*int(f(x),-l,l)
for n=1:N
a_n(n)=(1/l)*int(f(x)*cos(((n*pi)/l)*x),-l,l);
b_n(n)=(1/l)*int(f(x)*sinn(((n*pi)/l)*x),-l,l);
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)

 
خوب کاری به هدف برنامه نداریم و نکاتی که دیدم رو تذکر میدم :

کد:
a_0=(1/2l)*int(f(x),-l,l)

در کد بالا، عبارت 2l را نوشته اید که غلط است و باید علامت * را در میان آنها به کار ببرید.

نکته بعدی :

کد:
syms x a-n b-n

در کد بالا، سعی کرده اید که دو متغیر با نام های  a-n و b-n ، به صورت سمبلیک، تعریف کنید، در صورتی که این دو نام، نام های غیرمجاز برای متغیرها می باشند (ایجاد خطا می کند). نام های a_n و b_n را باید انتخاب کنید.

نکته سوم :

کد:
f(x)=input('Please insert f(x)=')

کد بالا غلط است و شما باید تنها نام f را برای تابع انتخاب کنید، یعنی به صورت زیر :

کد:
f=input('Please insert f(x)=')

نکته چهارم :
در جایی از برنامه، تابع sin را به صورت sinn نوشته اید.

من 4 خطا را تصحیح کردم. اما لطفا بحث خطایابی را جدی بگیرید و با سماجت، به دنبال یادگیری آن باشید.

کدها با رفع 4 خطای بالا، به صورت زیر خواهد بود :

کد:
clear all
close all
clc

syms x a_n b_n
f=input('Please insert f(x)=')
l=input('Please enter l=')
N=10;
a_0=(1/2*l)*int(f,-l,l)
for n=1:N
    a_n(n)=(1/l)*int(f*cos(((n*pi)/l)*x),-l,l);
    b_n(n)=(1/l)*int(f*sinn(((n*pi)/l)*x),-l,l);
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(X)=sin(x رو دادیم خروجی به صورت تابعی از x باشه
sin(x)=8/pi+sikm 1 ta 10(4/pi(1/1-4 pi^2)cos(2nx))
من فقط میدونم دستور pretty(a) به صورت دست نویس نشون میده!شاید استفاده  ی این دستور در آخرش کافی باشه ولی نمیدونم چطور باید استفاده کنم؟؟
منظورم اینه که هم مقدارو اول نشون بده هم خط آخر خروجی مثل دست نویس باشه نه این که مقدار کسینوسو حساب کنه
قبلا تذکر دادم که تعریف متغیری با نام زیر، غلط است :

کد:
f(x)

بلکه باید متغیر را با نام f تعریف کنید، هر وقت هم که خواستید عبارت معادل f در خروجی نمایش داده شود، تنها کافی است که حرف f را در یک خط از کدها بنویسید، آنگاه عبارت معادل آن، به صورت سمبلیک نمایش داده می شود.

در کد زیر، با 3 روش، یک f دلخواه را در خروجی نمایش می دهیم :

کد:
clear all
close all
clc

syms x
f = sin(x);

f
pretty(f)
disp(f)

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

کد:
f =

sin(x)


  sin(x)
sin(x)
این موضوع رو متوجه شدم،من منظورم داخل Command window بود! میگم اونجا که f(x) رومیدیم آخرسر که جواب رو برگردوند به صورت دسی بنویسه!
نمیدونم چطوری اینجا بنویسم؟ علامت سامنشنو نمیدونم چطور بذارم؟
مثلا اگر توی مثال زیر َa ی مورد نظر همون سری فوریه باشه به صورت دستی بنویسه!

کد:
syms n
a=(sin(n*x)^2*cos(n*x)^2/3)/(5*tan(n*x))
pretty(a)

که خروجیش اینه

a =
 
(cos(n*x)^2*sin(n*x)^2)/(15*tan(n*x))
 
 
          2         2
  cos(n x)  sin(n x)
  -------------------
      15 tan(n x)

امیدوارم منظورمو متوجه بشید
کل کدها را اینجا بنویسید (کد و نتیجه) تا من کد و خروجی رو ببینم.
بعد به طور واضح توضیح بدهید که چه می خواهید و مشکل چیست.
با حوصله بنویسید !
نمیتونم اون چیزی که میخوام رو تایپ کنم،یه پی دی اف پیدا کردم که خروجیش به اونی که میخوام نزدیک تره، اما اونم یکم باید تغییرش بدم
ازتون ممنونم که کمک کردید ک اوله برنامرو درست کردم بیشتر امتیازش همون ورودیش بود...خروجیشم بیشتر وقت میزارم برنامم که کامل شد میزارم!
فقط نمیدونم اون پی دی افو چطور ضمیمه کنم.... که بقیه هم استفاده کنند
 
مثل تصویر عمل کنید یا در سایتهایی که امکان آپلود فایل را فراهم میکنند مثل www.4shared.com استفاده کنید.
 
ممنون
 
فایل ضمیمه شده، اطلاعات جدیدی نمی دهد. برای نمایش خروجی، دستورات همان هایی است که خدمتتان عرض کردم (روش های مختلفی که گفتم). اگر عبارت به صورت سمبلیک باشد، در خروجی متلب نیز به صورت سمبلیک نمایش داده خواهد شد. حالا مثلا شما ترجیح می دهید از دستور pretty استفاده کنید.
فکر می کنم این گره، تنها به دست خودتان باز می شود زیرا تنها خودتان می دانید که چه می خواهید. آنقدر کد بنویسید تا به آنچه می خواهید برسید.
موفق باشید.
 
ممنون