سلام ، آیا این بازدید اول شماست ؟ یا
تبلیغات در این انجمن
×
+
سفارش تبلیغات
صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از شماره 1 تا 10 از مجموع 13

موضوع: آموزش برنامه نویسی در Matlab

  1. #1
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش برنامه نویسی در Matlab

    مقدمه:

    سلام

    من مهدی دیلمانی هستم. دانشجوی کارشناسی ارشد دانشگاه شهید چمران اهواز. من هم مثل خیلی ها به برنامه نویسی علاقه مندم. مخصوصا با استفاده ازMATLAB . دلیل آن هم کاملا روشن است. زیرا MATLAB یک زبان برنامه نویسی سطح بالا دارد؛ یعنی شما با تایپ یک دستور ساده می توانید بسیاری از عملیاتی که در زبان های قدیمی تر در چندین خط بلند و پیچیده انجام می شد را در جا انجام دهید. ولی این به معنای ساده تر شدن کار نیست. زیرا با وجود این امکانات توقع ما هم بالاتر می رود و انتظار کارهای بزرگتر و پیچیده تری را از برنامه داریم.

    MATLAB یکی از بزرگترین و پرکاربرد ترین نرم افزارهای مهندسی است و دارای قسمت های زیادیست که برنامه نویسی به عنوان قلب آن مطرح است و مربوط به تمام رشته ها می شود. در درجه ی بعد بسته نرم افزار های زیر مجموعه وجود دارند که هر کدام به رشته ی خاصی مربوط می شود مثل simpower که مربوط به رشته ی مهندسی برق قدرت می شود.

    در اینجا قصد دارم اطلاعات و تجارب خود را در زمینه های مختلف این نر م افزار با دیگر دوستان علاقه مند در میان بگذارم. در ابتدا گذری بر برنامه نویسی در سطح مقدماتی خواهم داشت که بر اساس جزوه ایست که برای تدریس در کلاس برنامه نویسی دانشگاه آماده کرده بودم. امیدوارم مفید واقع شود. منتظر نظرات و پیشنهادات شما هستم.
    The Best or nothing

  2. کاربران : 5 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  3. #2
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab -قسمت اول

    پنجره ی انصل MATLAB ، command window نام دارد. یک خط دستور را در این قسمت تایپ می کنید و با زدن Enter آن دستور اجرا می شود. اگر در پایان دستور از ; استفاده کنید نتیجه ی دستور نشان داده نمی شود. در ابتدا برای شناختن دستور ها از این پنجره استفاده می کنیم. در درجه ی بعد برای برنامه نویسی از Editor استفاده می کنیم.
    ماتریسها

    متغیر را به صورت زیر تعریف می کنیم:

    a=2

    یعنی مقدار 1 را به متغیر a بده. به همین سادگی! نیازی به تعیین نوع متغیر نیست. در ادامه

    b=2

    c=a+b

    در نتیجه مقدار 3 در متغیر c ذخیره می شود. در اینجا متغیر های a,b,c را به صورت ماتریسهای 1×1 تعریف کرده ایم. می توانیم a را به صورت یک بردار تعریف کنیم:

    a=[1 2 3 4]

    بین درایه های ماتریس فاصله قرار می دهیم. این بردار 4 درایه دارد پس یک ماتریس 1×4 است. حال یک ماتریس 2×3 :

    b=[1 2 3 ;4 5 6]

    همانطور که دیده می شود برای جدا کردن سطرها از ; استفاده شده است. این کاراکتر کاربرد دیگری نیز دارد. اگر در پایان دستوری قرار داده شود، برنامه نتیجه ی محاسبه ی آن دستور را نمایش نمی دهد ولی محاسبات انجام می شود. اگر دستور های بالا را اجرا کرده باشید تا به حال باید متوجه ی این قضیه شده باشید.

    هر بردار یک طول دارد. برای مشخص کردن طول یک بردار از دستور length به شکل زیر استفاده می شود:

    l=length(a)

    بنابراین طول بردار a که 4 است در متغیر l قرار می گیرد. یعنی l برابر 4 می شود. دستور دیگر size است. ابعاد یک ماتریس را مشخص می کند.

    [x,y]=size(b)

    → x=2 , y=3

    حال برای آدرس دهی ماتریس:

    z=b(2,3)

    یعنی مقدار درایه ی سطر دوم و ستون سوم ماتریس b را در متغیر z قرار بده. خواب! z چند می شود؟ اگر به ماتریس b نگاهی بیندازید، معلوم است که z برابر 6 می شود. حال z یک ماتریس 1*1 است و مقدار آن 6 است.

    به نظر شما دستور زیر چه می گوید؟

    b(2,1)=b(2,3)+b(2,2)*2;

    یعنی درایه ی (2,3) ماتریس b را با حاصل ضرب 2 در درایه ی (2,2) ماتریس b جمع کن و مقدار حاصل را در درایه ی (2,1) ماتریس b قرار بده. بنابراین ماتریس b به صورت زیر درمی آید:

    b=1 2 3

    16 5 6

    و دستور زیر:

    b(2,1)=b(2,1)+1;

    →b=1 2 3

    17 5 6

    همانطور که متوجه شدید اگر مقداری را به یک متغیر نسبت دهیم مقدار قبلی آن پاک می شود.

    چند نکته:

    1- نام متغیر به حروف کوچک و بزرگ حساس است. یعنی متغیر M و m با هم متفاوتند.

    2- دستور whos تمام متغیر های تعریف شده با مشخصات آن ها را لیست می کند.

    3- دستور clc صفحه ی command را پاک میکند بدون اینکه متغیر ها حذف شوند.

    4- دستور clear تمام متغیر ها را پاک می کند.

    به ادامه ی مطلب باز می گردیم. دستور زیر تمام درایه های ستون دوم ماتریس b را در متغیر z1 ذخیره می کند:

    z1=b(:,2)

    . دستور زیر تمام درایه های سطر دوم ماتریس b را در متغیر z2 ذخیره می کند:

    z2=b(2,:)

    بنابراین

    z1=2

    5

    z2=17 5 6

    دستور زیر یعنی تمام سطرها ولی ستونهای 2 تا3

    z3=b(:,2:3)

    → z3=2 3

    5 6

    فرض کنیم:

    a=[2 3 4]

    b=[5 6 7]

    حال تعریف می کنیم:

    c=[a;b]

    باید بتوانید حدس بزنید c به چه شکلی است:

    c=2 3 4

    5 6 7

    حال:

    c=[a b]

    →c=2 3 4 5 6 7

    X=length(c)

    → x=6

    حال می خواهیم ستون های دوم تا پنجم ماتریس c را حذف کنیم:

    c(:,2:5)=[]

    → c=2 7
    The Best or nothing

  4. کاربران : 5 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  5. #3
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab -قسمت دوم

    دو دستور کاربردی:

    اگر بخواهیم یک ماتریس تولید کنیم که از اعداد پشت سر هم تشکیل شده باشد:

    p=1:5

    →p=1 2 3 4 5

    حال دستور را کاملتر می کنیم. فاصله ی بین اعداد را نیز مشخص می کنیم:

    P=1:.5:5

    →p=1 1.5 2 2.5 … 4.5 5

    ولی اگر داشته باشیم:

    p=1:.9:5

    در نتیجه عدد آخر بردار p برابر 4.6 می شود. در این دستور مهم این است که هر عدد از عدد قبلی به اندازه ی 5. فاصله داشته باشد و عدد آخر از 5 بزرگتر نشود. اگر آخر بازه برایمان مهم باشد از دستور زیر استفاده می کنیم:

    p=linspace(1,5,6)

    یعنی بین اعداد 1 تا 5 شش عدد قرار بده.

    P=1 1.8 2.6 3.4 4.2 5

    بنابراین فاصله ی بین دو عدد متوالی:

    x=(5-1)/(6-1)=0.8

    عملیات روی ماتریسها

    فرض کنیم:

    a=[2 3 4;5 6 7]

    دستور زیر یعنی b ترانهاده ی a باشد:

    b=a’

    →b=2 5

    3 6

    4 7

    عملیات روی ماتریس ها در MATLAB به دو صورت نقطه ای و ماتریسی است که در ادامه توضیح داده می شود.

    دترمینان و معکوس فقط برای ماتریس های مربعی تعریف می شود. می خواهیم ماتریس a را که 2*3 است را با اضافه کردن یک سطر به آن مربعی کنیم:

    a(3,:)=[8 9 10]

    → a=2 3 4

    5 6 7

    8 9 10

    مقدار دترمینان a را در z قرار می دهیم:

    z=det(a)

    → z=0

    بنابراین معکوس این ماتریس تعریف نشده است.

    حال a را کمی تغییر می دهیم:

    a(1,1)=a(1,1)+2

    → a=4 3 4

    5 6 7

    8 9 10

    حال دستور را دوباره تکرار می کنیم:

    z=det(a)

    → z=-6

    معکوس a را حساب کرده و در b قرار می دهیم:

    b=a^-1 یا b=inv(a)

    →b=.5 -1 .5

    -1 -1.33 1.33

    .5 2 -1.5

    عملیات نقطه ای یعنی روی آرایه به آرایه ی نظیر. بنابراین شرط این عملیات این است که دو ماتریس هم اندازه باشند. یعنی تعداد سطر و سطون مساوی داشته باشند. به عنوان مثال:

    c=a.*b

    →c=2 -3 2

    -5 -8 9.33

    4 18 -15

    ولی اگر قبل از عملگر ضرب نقطه نگذازیم، عملیات تبدیل به ضرب ماتریسی می شود:

    c=a*b

    →c=1 0 0

    0 1 0

    0 0 1

    جواب ماتریس واحد شده است. زیرا a و b معکوس هم هستند.

    حال باید فرق بین a^2 و a.^2 را بدانید. a.^2 تک تک درایه های a را به توان 2 می رساند در حالی که a^2 ماتریس a را در خودش ضرب نقطه ای می کند. حال 2.^a چه می کند. امتحان کنید! جواب زیر را خواهید دید:

    a=[0 1 2;1 2 3;3 2 1]

    →2.^a=1 2 8

    2 4 8

    8 4 2

    1./a را نیز امتحان کنید. ولی دستور 1/a با خطا متوقف می شود. چرا؟
    The Best or nothing

  6. کاربران : 3 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  7. #4
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab -قسمت سوم

    آشنایی با چند دستور

    دستور sum

    روند زیر را دنبال کنید:

    a=[1 2 3 4];

    b=sum(a)

    →b=10

    a=[1 2 3;4 5 6;7 8 9];

    b=sum(a)

    → b=12 15 18

    بنابراین درایه ی iام جواب دستور sum برابر مجموع درایه های ستون iام ماتریس a است.

    دستور cumsum

    به روند زیر دقت کنید و عملکرد این دستور را بیابید:

    c=cumsum(a)

    → c=1 2 3

    5 7 9

    12 15 18

    بنابراین هر درایه ی ستون iام ماتریس c برابر مجموع درایه های قبل از آن در ستون hام ماتریس a است.

    دستور find

    روند زیر را دنبال کنید:

    a=[-1 2 3 -4 2 -.5];

    b=find(a<=0)

    →b=[1 4 6]

    یعنی درایه های 1 و 4 و 6 ماتریس a در شرط دستور find صدق می کنند. حال می توانیم بنویسیم:

    b=a(b)

    →b=-1 -4 -0.5

    دستور repmat

    برای ساختن ماتریس هایی با آرایه های تکراری استفاده می شود. مثلا:

    a=repmat(-1,2,3)

    یعنی ماتریس a یک ماتریس 2*3 است که تمام درایه های آن -1 هستند. و یک مثال دیگر:

    k=[2;3;4];

    a=repmat(k,1,3)

    حدس می زنید a به چه شکل شود؟ معلوم است دیگرر:

    a=2 2 2

    3 3 3

    4 4 4

    یعنی a یک ماتریس1*3است که تمام درایه های آن k است. بنابراین نهایتا a یک ماتریس 3*3 است.

    تعریف چند ماتریس از قبل تعریف شده:

    ماتریس واحد:

    a=eye(3)

    یعنی یک ماتریس 3*3 واحد.

    a=ones(2,3)

    یعنی یک ماتریس 2*3 که تمام درایه های آن 1 است.

    a=zeros(2,3)

    یعنی یک ماتریس 2*3 که تمام درایه های آن صفر است.

    فرض کنیم:

    a=[1 2 3;4 5 6;7 8 9]

    b=diag(a)

    →b=1

    5

    9

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

    c=diag(b’)

    →c=1 0 0

    0 5 0

    0 0 9

    در قسمت بعد به رسم نمودار می پردازیم...
    The Best or nothing

  8. کاربران : 4 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  9. #5
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab - قسمت چهارم

    رسم نمودار

    می خواهیم نموداری رسم کنیم که از نقاط زیر بگذرد:

    (1,7) (2,5) (3,2) (4,2.5) (5,0)



    برای این کار دو ماتریس تعریف می کنیم. ماتریس محور x و y:

    x=[1 2 3 4 5];

    یا x=1:5;

    y=[7 5 2 2.5 0];

    Plot(x,y)

    با اجرای دستور plot نمودار رسم می شود.

    حال به فرمت زیر دقت کنید:



    این دستور نقطه ی (a1,b1) را به (a4,b4) وصل می کند. نقطه ی (a2,b2) را به (a5,b5) وصل می کند. نقطه ی (a3,b3) را به (a6,b6) وصل می کند.

    مثال:

    Plot([1 2 3;1 2 3],[0 0 0;1 2 3])

    نتیجه:



    در واقع سطر اول ماتریس دوم کف نمودار و سطر دوم سقف نمودار و ماتریس اول محور xها را نشان می دهد.

    حال می خواهیم نمودار y=x^2 را در بازه ی 10- تا 10 رسم کنیم. به شکل زیر عمل می کنیم.

    نقاط محور xها:

    x=-10:0.5:10;

    عملیات نقطه ای:

    y=x.^2;

    Plot(x,y)


    یا به طور مستقیم:

    Plot(x,x.^2)

    اگر دستور plot را دوباره اجرا کنیم، نمودار قبلی پاک شده و نمودار جدید رسم می شود. اگر بخواهیم دو نمودار را روی هم رسم کنیمباید قبل از وارد کردن دستور plot دوم دستور زیر را وارد کنیم:

    Hold on

    یعنی نمودار قبلی را نگه دار. حال می خواهیم نمودار y=x.^3 را نیز روی نمودار قبلی رسم کنیم. به شکل زیر عمل می کنیم:

    Hold on

    Plot(x,x.^3);

    یا اینکه می توانستیم از همان اول دو نمودار را با هم رسم کنیم. به شکل زیر:

    Plot(x,x.^2,x,x.^3);

    خواب! حالا می خواهیم با استفاده از مطالب گفته شده، به عنوان تمرین، مساحت بین دو نمودار sin(x) و cos(x) را در بازه ی pi/2 تا pi را با ده خط پر کنیم. سعی کنید به دستورها دقت کنید،روند کار ساده است :

    >> t=linspace(0,2*pi,1000);

    >> plot(t,sin(t),t,cos(t));

    >> hold on

    ابتدا دو نمودار و cos(x) و sin(x) را رسم کرده ایم و با دستور hold on آنها را روی صفحه نگاه می داریم. سپس:

    >>t2=linspace(pi/2,pi,10);

    >> plot([t2;t2],[sin(t2);cos(t2)],'k')

    متغیر t2 به صورت 10 عدد در بازه ی pi/2 تا pi تعریف شده است. در دستور plot دوم ‘k’ به این معناست که همه ی خطوط را به رنگ سیاه بکش. کاربرد دو ماتریس اول نیز مشخص است. در واقع سطر اول ماتریس دوم کف نمودار و سطر دوم سقف نمودار و ماتریس اول محور xها را نشان می دهد.



    دستور fill

    این دستور برای پر کردن فضای بین دو نمودار است و فرمت خاص خود را دارد که با کمی دقت می توان آن را فرا گرفت و به کار برد. در ابتدا دستور fliplr را معرفی می کنیم. فرض کنید:

    a=[a11 a12 a13

    a21 a22 a23]

    b=fliplr(a)

    → b=[a31 a12 a11

    a23 a22 a21]

    یعنی ستون اول به آخر و ستون دوم به ستون یکی مانده به آخر و همینطور تا آخر منتقل می شود.

    مثال:

    x=1:3;

    x=[x fliplr(x)]

    → x=1 2 3 3 2 1

    حال می خواهیم مساحت بین دو نمودار sin(x) و cos(x) را در بازه ی pi/2 تا pi را پر کنیم. سعی کنید به دستورها دقت کنید،روند کار ساده است :

    >> t=linspace(0,2*pi,1000);

    >> plot(t,sin(t),t,cos(t));

    ابتدا دو نمودار و cos(x) و sin(x) را رسم کرده ایم و با دستور hold on آنها را روی صفحه نگاه می داریم. حال باید با چند نقطه از نقطه ی pi/2 روی نمودار sin (چون در این بازه بالاتر است) حرکت کرده و تا نقطه ی pi پیش رویم و بعد دوباره روی نمودار cos برگردیم تا به pi/2 برسیم. با این کار فضا را به طور کامل مشخص کرده ایم.بنابراین خواهیم داشت:

    >>t2=linspace(pi/2,pi,10);

    >>fill([t2 fliplr(t2)],[sin(t2) fliplr(cos(t2))],'r')

    در دستور fill دوم ‘r’ به این معناست که مساحت تعیین شده را با رنگ قرمز پر کن، وجود این علامت در این دستور الزامی است. با استفاده از توضیحات بالا باید کمی تا حدودی متوجه شوید که چرا دستور را به این شکل نوشتیم. البته این یک فرمت خاص است.



    حال یک سوال. آیا می توان دستور را به شکل زیر نوشت؟

    >>fill([t2 fliplr(t2)],[sin(t2) cos(fliplr(t2))],’r’)
    The Best or nothing

  10. کاربران : 4 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  11. #6
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab -قسمت پنجم

    وارد کردن اطلاعات و نمایش نتایج

    متغیر می تواند عدد نباشد. می تواند یک رشته ی عددی باشد که به آن string گفته می شود. مثلا:

    a=’heello123’

    وجود علامت ‘ الزامی است. a در واقع یک ماتریس 1*8 است. مثال:

    a(1,1:3)=hel

    حال به ماتریس زیر دقت کنید:

    a=[‘hello’ ‘Abas’];

    → a=helloAbas

    حال فرض کنید:

    a=123

    a یک عدد است. با استفاده از روش زیر a را به رشته (string) تبدیل می کنیم:

    a2=num2str(a)

    → a2=123

    ولی a2 یک رشته است.

    دستور input

    می خواهیم به کاربر برنامه دهیم که یک عدد را وارد کند. به این شکل عمل می کنیم:

    x=input(‘Enter a Number>’)

    وقتی دستور اجرا می شود خط زیر را مشاهده می کنیم:

    Enter a Number>

    کاربر یک عدد را وارد می کند و آن عدد در متغیر x ذخیره می شود. x می تواند یک ماتریس باشد.

    اگر بخواهیم کاربر یک رشته وارد کند بدون اینکه دوطرف آن را ‘ قرار دهد، دستور را به شکل زیر وارد می کنیم:

    x=input(‘Enter your name>’,’s’)

    S یعنی ورودی را به عنوان یک رشته در نظر بگیر.

    دستور disp

    برای نمایش خروجی می توان از این دستور استفاده کرد.

    مثال:

    فرض کنیم خروجی برنامه در متغیر m ذخیره شده است و مقدار آن 2 است. ولی ما از این متغیر اطلاع نداریم. برای نمایش آن به روش زیر عمل می کنیم:

    Disp([‘your answer is’ num2str(m) ‘.’]);

    با اجرای دستور پیغام زیر را مشاهده می کنیم:

    Your answer is 2 .

    دستور fprinf

    این دستور همانند disp برای نمایش نتایج است ولی کاربرد بیشتری دارد زیرا قابلیت بیشتری دارد. برای توضیح کاربرد آن به مثال زیر دقت کنید.

    فرض کنید خروجی برنامه در یک ماتریس به شکل زیر ذخیره شده است:

    Measured=[12.214 20.34567 12.3567];

    ولی درک اینکه این اعداد نمایانگر چه پارامترهایی است، برای کاربر مشکل است و فقط برای برنامه نویس قابل فهم است. بنابراین قصد داریم با استفاده از دستور disp خروجی به شکل زیر نمایان شود. دستور disp را در واقع در پایان برنامه ی مورد نظر قرار می دهیم.

    Weight=12 kg

    Length=20.34 cm

    Height=12.356 cm

    برای این کار دستور fprintf را به صورت زیر وارد می کنیم:

    Fprintf(1,’weight=%2.0f kg\n length=%2.2f cm\n height=%2.3f cm’,measured)

    %a.bf در دستور به این معناست که a عدد قبل از ممیز و b تعداد اعداد بعد از ممیز است.

    \n یعنی برو سطر بعد. ماتریس حاوی اطلاعات را نیز در پایان اضافه می کنیم. دستور اعداد را به صورت ستون ستون برداشت می کند.

    مطالب گفته شده شاید کمی گنگ باشد زیرا این دستور فرمتی خاص دارد و با کمی تمرین می توان بر آن مسلط شد. برای توضیح بیشتر به مثال زیر دقت کنید:

    مثال:

    فرض کنید می خواهیم نتیجه به صورا زیر نمایش داده شود:

    x(1)=4

    x(2)=5

    x(3)=6

    دستور به صورت زیر خواهد بود:

    Fprintf(1,’x(%1.0f)=%1.0f\n’,[1 2 3;4 5 6])
    The Best or nothing

  12. کاربران : 2 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  13. #7
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab - قسمت ششم

    تعریف function

    برنامه ها را در قالب فایل هایی با پسوند .m با نام Mfile می سازیم. هر برنامه در واقع می تواند یک تابع باشد و چند ورودی و چند خروجی داشته باشد.




    وجود ورودی و خروجی الزامی نیست.

    برنامه یا همان تابع همیشه با کلمه ی function آغاز می شود. مثال:

    Function y=hello(x)

    Y=x+2;

    End

    در این برنامه ی ساده x ورودی وy خروجی است. Hello اسم اختیاری برنامه است. برنامه را با همین اسم ذخیره می کنیم. برای اجرای برنامه بعد از ذخیره سازی در پنجره ی command تایپ می کنیم:

    M=hello(2)

    در نتیجه m=4 می شود. در اینجا ذکر این نکته الزامی است که x و y متغیر های محلی خود برنامه هستند و ربطی به بیرون از برنامه ندارند.

    حال مثال زیر را در نظر بگیرید که برنامه دو متغیر ورودی و دو متغیر خروجی دارد:

    Function [x,y]=hello2(x,y)

    Y=x+w;

    Z=x-w;

    End

    بعد از ذخیره سازی برنامه با نام hello2، برای اجرای آن در پنجره ی command تایپ می کنیم:

    [m,n]=hello2(1,2)

    با اجرای دستور n=3 و m=-1 می شود.

    برنامه نویسی

    حال به صورت جدی تر وارد مبحث برنامه نویسی می شویم.

    چهار دستور کلیدی for و while و if و switch را در اینجا معرفی می کنیم.

    ابتدا condition را تعریف می کنیم. عبارتی است که می تواند صفر یا 1 باشد. مثال:

    A=-1;

    B=2;

    X=[-4 -1 1 4];

    Out=x.*(a<=x & x

    عبارت درون پرانتز یک condition است. و برابر است با:

    (a<=x & x)

    در واقع شرط درون پرانتز روی تک تک عناصر ماتریس x امتحان می شود، اگر برقرار بود نتیجه 1 و در غیر این صورت 0 می شود. نتیجه همانور که دیده می شود یک ماتریس با ابعاد ماتریس x است. حال اگر ماتریس حاصل در x ضرب نقطه ای شود نتیجه به صورت زیر خواهد بود:

    Out=[0 -1 1 0]

    همانصور که می دانیم اگر از علامت نقطه استفاده نشود با مشکل مواجه خواهیم شد زیرا ضرب ماتریسی دو ماتریس 1*4 و 1*4 تعریف نشده است. قبلا نمونه ی یک condition را در دستور find داشتیم.

    حلقه ی while

    ساختار آن به شکل زیر است:

    While (condition);

    Statement;

    End

    Statement در واقع یک دستور یا یک برنامه است و در صورتی اجرا می شود که condition یک باشد. اگر صفر بود برنامه مستقیم به end می رود. در صورتی که statement اجرا شد و به خط end رسیدیم برنامه دوباره به while بازمی گردد و شرط دوباره چک می شود و همینطور حلقه تکرار می شود تا اینکه شرط صفر شده و از حلقه خارج شویم. توضیح با یک مثال روشن می شود:

    مثال: می خواهیم برنامه ای بنویسیم که از کاربر عددی را بین 5- و 5 راطلب کند. اگر کاربر عددی خارج از بازه را وارد کند برنامه پیغام ‘INCORRECT, Enter a number between -5 & 5’ را نشان دهد و دوباره عدد جدید درخواست کند. این کار همین طور تکرار می شود تا اینکه کاربر عدد درست را وارد کند.با وارد کردن عدد درست پیغام ‘Yes, that is right!’ ظاهر می شود. برنامه را به صورت یک تابع بدون ورودی و خروجی تعریف می کنیم و برای اجرای آن کافی است نام آن را در پنجره command تایپ کرده و enter کنیم:

    function check

    x=input('Enter a Number between -5 & 5>');

    while (x<-5 | x>5);

    x=input('"INCORRECT",Enter a Number between -5 & 5>');

    end

    disp('Yes,That s right!!')
    The Best or nothing

  14. کاربران : 2 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  15. #8
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    پیش فرض آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab -قسمت هفتم

    دستور if

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

    ساختار کلی:

    If (condition1)

    Statement1

    Elseif (condition2)

    Statement2

    Else

    Statement3

    end

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


    function example

    x=input('Enter a number>');

    if x==real(x);

    disp('It is a real number.');

    else

    disp('It is a complex number.');

    end

    end

    برنامه ورودی و خروجی ندارد. علامت == یک عبارت شرطی است و چک می کند که آیا دو طرف علامت با هم مساوی هستند یا خیر.

    حلقه ی for

    برای اینکه یک دستور به دفعات مشخصی تکرار شود از این دستور استفاده می شود. ساختار آن به صورت زیر است:

    For variable=expression

    Statement

    End

    مثال: با استفاده از برنامه ی زیر یک ترسیم زیبا را خواهیم داشت. ورودی آن تعداد خطی است که باید رسم شود.

    function plottt(x)

    for i=1:x;

    plot([0 x-i],[i 0])

    hold on

    end

    end

    اگر x=7 انتخاب کنیم نتیجه ی زیر را خواهیم داشت:




    دستور switch

    برای این دستور فقط یک مثال می زنم زیرا بسیار ساده است:

    function switchexample

    x=input('Enter a number>');

    switch x

    case -1

    disp('negative one.')

    case 0

    disp('zero')

    case 1

    disp('positive one.')

    otherwise

    disp('other value.')

    end

    end
    The Best or nothing

  16. کاربران : 2 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  17. #9
    عضو انجمن
    تاریخ عضویت
    Jan 2012
    ارسال ها
    811
    محل سکونت
    Edmunds Planet
    محصول امنیتی
    Microsoft Security Essential
    تشکر تشکر کرده 
    362
    تشکر تشکر شده 
    1,453
    اعتبار کاربر
    1

    Exclamation آموزش مقدماتی برنامه نویسی با استفاده با نرم افزار matlab - قسمت هشتم (قسمت آخر)

    حال برای تمرین بیشتر چند مثال ساده را بررسی می کنیم.

    مثال 1: برنامه زیر مانند دستور find عمل می کند و ورودی آن یک بردار است و خروجی آن محل قرارگیری عناصری از ورودی است که در شرط صدق می کنند. مثلا اگر ورودی[1 3 -4 5 -6] باشد خروجی با شرط ورودی کوچکتر از صفر (x<0) به صورت [3 5] خواهد بود. یعنی عناصر سوم و پنجم در شرط صدق می کنند.

    function index=myfind(vector)

    n=1;

    x=length(vector);

    for i=1:x;

    if vector(1,i)<=0;

    index(1,n)=i;

    n=n+1;

    end

    end

    n در این برنامه یک شمارنده است و برای ساختن ماتریس خروجی به کار می رود. یعنی هر گاه یکی از عناصر ورودی در شرط صدق کند، یکی بیشتر می شود. استفاده از این تکنیک بسیار متداول است. به دلیل اینکه تعداد دفعات تکرار مشخص است و برابر طول بردار ورودی است از حلقه ی for استفاده می شود. حا اگر به جای دستور index(1,n)=i داشته باشیم:

    Index(1,n)=vector(1,i)

    خروجی چه می شود؟

    مثال 2: می خواهیم قابلیت برنامه قبل را برای ورودی ماتریس افزایش دهیم. فرض کنید می خواهیم خروجی همان ورودی باشد ولی به جای عناصری که در شرط صدق نمی کنند صفر داشته باشیم. حال احتیاج به دو حلقه ی for داریم. یکی تعداد سطرها و دیگری تعداد سطون ها را بشمارد.

    function index=myfind2(mat);

    [x,y]=size(mat);

    for i1=1:x;

    for i2=1:y;

    if mat(i1,i2)<=0;

    index(i1,i2)=mat(i1,i2);

    else;

    index(i1,i2)=0;

    end

    end

    end

    مثال 3: همان مثال قبل ولی می خواهیم خروجی را کمی تغییر دهیم. می خواهیم خروجی یک n*2 باشد که n و تعداد درایه های ماتریس ورودی است که در شرط صدق می کنند. ستون اول شماره سطر و ستون دوم شماره ی ستون درایه ی مورد نظر باشد. به عنوان مثال اگر ورودی به شکل زیر باشد:

    Input=[-1 2

    3 -2]

    و شرط کوچکتر از صفر بودن باشد، خروجی به شکل زیر باشد:

    Output=[1 1

    2 2]

    مشخص است که نیاز به یک شمارنده داریم و دو حلقه ی for برای بررسی تمام عناصر ماتریس ورودی و یک دستور if که شرط را چک کند. برنامه به صورت زیر خواهد بود:

    function index=myfind3(mat);

    n=1;

    [x,y]=size(mat);

    for i1=1:x;

    for i2=1:y;

    if mat(i1,i2)<=0;

    index(n,1)=i1;

    index(n,2)=i2;

    n=n+1;

    end

    end

    end

    مثال 4 : برنامه ی معادل دستور sum :

    ورودی یک ماتریس و خروجی یک بردار که عنصر ستون iام آن برابر وجموع عناصر ستون iام ماتریس ورودی.

    function v2=mysum(v)

    x=length(v);

    v2(1,1)=v(1,1);

    for i=2:x;

    v2(1,i)=v2(1,i-1)+v(1,i);

    end

    مثال 5: می خواهیم برنامه ای بنویسیم که انتگرال یک تابع را در بازه ای مشخص را به دست آورد. از قوائد اولیه ی انتگرال گیری استفاده می کنیم. همانطور که می دانید در این روش مساحت زیر تابع در بازه ی مورد نظر را به چند مستطیل تقسیم کرده و مساحت آنها را حساب کره و با هم جمع می کنیم. هر چه تعداد این مستطیل ها بیشتر باشد جواب دقیق تر خواهد بود ولی حجم محاسبات بیشتر می شود. ولی ما نگران بالا رفتن حجم محاسبات نیستیم.




    بازه ی a تا b را به n بخش تقسیم می کنیم. عرض هر مستطیل برابر (b-a)/n و ارتفاع مستطیل iام برابر f(a+i*(b-a)/n) است. برنامه به صورت زیر خواهد بود:

    function myintegral(a,b,n)

    function y=f(x)

    y=sin(x);

    end

    w=(b-a)/n;

    s=0;

    for i=1:n;

    s=s+w*f(a+(i-1)*w);

    end



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

    حال می خواهیم برنامه را به گونه ای تغییر دهیم تا تابع انتگرال رسم شود:

    function myintegral(a,b,n)

    function y=f(x)

    y=sin(x);

    end



    w=(b-a)/n;

    s=0;

    for i=1:n;

    s(1,i+1)=s(1,i)+w*f(a+(i-1)*w);

    x(1,i+1)=a+(i-1)*w;

    end

    plot(x,s)

    بر خلاف برنامه ی قبلی s را به صورت یک ماتریس تولید می کند که مقدار درایه ی iام آن برابر مجمع مستطیل های اوا تا iام. در این حلقه عناصر محور x هم برای رسم نمودار ساخته می شوند.

    مثال 6: می خواهیم مشتق یک تابع را در بازه ای تعیین شده رسم کنیم. بازه را به n زیر بازه تقسیم می کنیم و تابع را در هر زیر بازه را با یک خط تقریب می زنیم و مشتق تابع در نقطه ی ابتدای این زیر بازه برابر شیب این خط است. برنامه به صورت زیر است:

    function difff(a,b,n)

    w=(b-a)/n;

    for i=1:n;

    x(1,i)=a+w*(i-1);

    y(1,i)=(f(a+w*i)-f(a+w*(i-1)))/w;

    end

    plot(x,y)
    The Best or nothing

  18. کاربران : 3 تشکر کرده اند از شما Architect برای ارسال این پست سودمند:


  19. #10
    عضو معمولی
    تاریخ عضویت
    Sep 2012
    ارسال ها
    1
    تشکر تشکر کرده 
    0
    تشکر تشکر شده 
    0
    اعتبار کاربر
    1

    پیش فرض

    با سلام من ویندوز 64 بیتی دارم . اگر Matlab R2011 که 32 بیتی هست را نصب کنم درست کار میکنه؟
    با تشکر

صفحه 1 از 2 12 آخرینآخرین

اطلاعات تاپیک

Users Browsing this Thread

در حال حاضر 1 در حال مشاهده این موضوع می باشد.. (0 کاربر و 1 مهمان در این انجمن حضور دارند)

برچسب برای این موضوع

بوک مارک ها

بوک مارک ها

مجوزهای ارسال و ویرایش

  • شما نمی توانید موضوع جدید ارسال کنید
  • شما نمی توانید به پست ها پاسخ دهید
  • شما نمی توانید فایل پیوست ضمیمه کنید
  • شما نمی توانید پست های خود را ویرایش کنید
  •