Artificial Intelligence - هوش مصنوعی

Artificial Intelligence - هوش مصنوعی (http://artificial.ir/intelligence/)
-   نرم افزار MATLAB (http://artificial.ir/intelligence/forum64.html)
-   -   ترفندهاي متلب! (http://artificial.ir/intelligence/thread397.html)

Astaraki ۰۷-۱۵-۱۳۸۸ ۰۹:۵۰ قبل از ظهر

ترفندهاي متلب!
 
ترفند متلب: ترسیم منحنی های سه بعدی در متلب

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

در اینجا قصد داریم، نمودار مربوط به تابع زیر را در متلب ترسیم نماییم:


فرض کنید که بازه تغییرات متغیرهای x و y ، هر دو بین 2- و 2 باشد. به این منظور تعریف می کنیم:

كد:

>> x=-2:0.2:2;
>> y=-2:0.2:2;

برای ترسیم منحنی های سه بعدی، می بایست تمام نقاط موجود در بردار x، با تمام نقاط موجو در بردار y ترکیب شوند و مقدار تابع در نقطه به دست آمده، محاسبه شود. برای این منظور، از تابع meshgrid به صورت زیر استفاده می کنیم:

كد:

>> [X,Y]=meshgrid(x,y);
حال مختصات بعد سوم را به صورت زیر محاسبه می کنیم:

كد:

>> Z=exp(-(X.^2+Y.^2));
داده های مورد نیاز برای ترسیم انواع منحنی های سه بعدی، آمده شده اند. می توانیم با فراخوانی دستورهای مربوطه، منحنی های مختلفی را ترسیم نماییم. نمونه ای از دستورهای قابل اجرا بر روی داده های به دست آمده، به همراه نمودارهای مربوط به هر دستور، در ادامه آمده اند:

دستور mesh:

این دستور برای ترسیم نمودارهای شبکه ای (اسکلتی) سه بعدی به کار می رود. برای اجرای این دستور این عبارت را وارد می کنیم:

كد:

>> mesh(X,Y,Z);
http://www.matlabsite.net/images/tip..._tips_mesh.png

دستور surf:

این دستور برای ترسیم نمودارهای سه بعدی سطحی (اسکلت به همراه سطح رنگی) به کار می رود. برای اجرای این دستور این عبارت را وارد می کنیم:

كد:

>> surf(X,Y,Z);
http://www.matlabsite.net/images/tip..._tips_surf.png

دستور contour:

این دستور سطح کانتوری مربوط به داده های سه بعدی را ترسیم می کند. هر چند نمودار به دست آمده پس از اجرای این تابع، یک نمودار دو بعدی است، اما برای ترسیم آن، می بایستی داده های سه بعدی ایجاد شده باشد. همچنین می توانید از دستورهای meshc و surfc برای ترکیب این نوع از نمودار با نمودارهای mesh و surf اسفتفاده نمایید. برای فراخوانی تابع contour این عبارت را وارد می کنیم:

كد:

>> contour(X,Y,Z);
http://www.matlabsite.net/images/tip...ps_contour.png

در آینده منتظر ترفندها و نکات آموزشی بیشتری در این زمینه و سایر زمینه های برنامه نویسی متلب باشید.
;)

Astaraki ۰۷-۱۵-۱۳۸۸ ۰۹:۵۳ قبل از ظهر

نکته ای برای افزایش سرعت اجرای برنامه ها

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

یکی از اشتباه هایی که بسیاری از برنامه نویسان متلب مرتکب می شوند، عدم تخصیص فضای مناسب برای آرایه ها و ماتریس ها، قبل از مقدار دهی است. زبان هایی مانند C یا #C (بخوانید سی شارپ)، در هنگام تعریف آرایه ها، اندازه آرایه ها را به صورت اجباری از برنامه نویس می خواهند و هر گاه در طول اجرای برنامه، بخواهیم که مقدار آرایه را در جایی که بیش از طول آرایه است، تغییر دهیم، برنامه خطا می دهد. اما متلب، از آن جا که سادگی را به عنوان محور اولیه در نظر گرفته است، چنین ضرورت هایی را به برنامه نویسی تحمیل نمی کند. اما مشکل دقیقا از همین جا شروع می شود. برای آرایه های کوچک، همه چیز به خوبی و خوشی تمام می شود. اما وقتی آرایه ها، از یک حد بزرگ تر می شوند، ایم مسأله واقعا دردسر ساز می شود.

در متلب، برای تخصیص فضای اولیه (Pre-Allocation)، از توابع مختلفی استفاده می شود. ازمیان این توابع، پر کاربردترین آن ها، تابع zeros است. این تابع ابعاد ماتریس مورد نظر را می گیرید، و بخشی از حافظه را به همان اندازه، برای آرایه موزذ نظر تخصیص می دهد. این کار، در زبان C، با تابع malloc انجام می شود. برای آگاهی بیشتر از چگونگی کارکرد این تابع، به راهنمای آن در هلپ متلب، مراجعه کنید.

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

برنامه اول:

كد:

clear;
n=300000;
x(1)=0;
x(2)=1;
for k=3:n
    x(k)=x(k-1)+x(k-2);
end

برنامه دوم:

كد:

clear;
n=300000;
x=zeros(1,n);    % Pre-Allocation
x(1)=0;
x(2)=1;
for k=3:n
    x(k)=x(k-1)+x(k-2);
end

این دو برنامه، فقط در مورد تخصیص اولیه (خط سوم از برنامه دوم)، با هم اختلاف دارند. اما جالب است بدانید که مدت اجرای برنامه اول، در حدود 4 دقیقه بود. در حالی برنامه دوم، در کمتر از یک ثانیه اجرا می شود.
حال فرض کنید که در یک برنامه بزرگ، این مشکلات چقدر می تواند حادتر و شدیدتر باشد.:)

امیدوارم این نکته آموزشی، برایتان مفید باشد. منتظر نکات بعدی باشید.;)

Astaraki ۰۷-۲۹-۱۳۸۸ ۱۲:۲۳ بعد از ظهر

وارد کردن دیتا با استفاده از دستور tdfread و textscan
 
وارد کردن دیتا با استفاده از دستور TDFREAD و TEXTSCAN

با متلب تقریبا همه جور فایلی رو میشه وارد (import) یا خارج (export) کرد . فایل های باینری ، فایل های نوشتاری (text) یا حتی فایل های تصویری مثل عکس یا ویدئو برای عملیاتی مثل پردازش تصویر . در واقع میشه یه سری دیتا رو از طریق یه فایل text وارد متلب کرد و یه سری پردازش های روی اون اطلاعات انجام داد و بعد نتایج حاصل رو در یه فایل دیگه ذخیره کرد. پس قبل از هرکاری احتیاج داریم این فایل حاوی اطلاعات رو یه جوری تو متلب بخونیمش ، برای این کار هم دستورهای مختلفی وجود داره که هر کدوم از اون ها معایب و محاسن خودشون رو دارن ، اما دو تا دستور هستن که بیشتر استفاده میشن ، یکی tdfread و دیگری textscan . کار خودمون رو با tdfread شروع میکنیم و به سراغ دومین دستور یعنی textscan میریم.

فرض کنید یه سری دیتا داریم در دو فرمت مختلف به این صورت :

The data as .txt
كد:

Region  State  Sales  Head Count
North  North Dakota    80078  81
North  Montana 90608  391
North  Michigan        4598    27
North  Wisconsin      11622  36
South  Florida 9788    73
South  Georgia 86456  385
South  Alabama 94766  91
South  Mississippi    13004  61
East    North Carolina  612    25
East    Virginia        85508  233
West    California      84419  262
West    Washington      92682  97
West    Oregon  53185  51

The data in .csv format:
كد:

i,Region,State,Sales,Head Count
1,North,North Dakota,80078,81
2,North,Montana,90608,391
3,North,Michigan,4598,27
4,North,Wisconsin,11622,36
5,South,Florida,9788,73
6,South,Georgia,86456,385
7,South,Alabama,94766,91
8,South,Mississippi,13004,61
9,East,North Carolina,612,25
10,East,Virginia,85508,233
11,West,California,84419,262
12,West,Washington,92682,97
13,West,Oregon,53185,51

یه توضیح کوچولو هم بدم که با برنامه excel میشه اطلاعات رو با فرمت cvs خارج کرد که تو این مثال ما از این فرمت استفاده کردیم. شما میتونید فایل های نمونه رو با فرمت txt از اینجا و با فرمت cvs از اینجا دریافت کنید.


استفاده ازTDFREAD

خیلی دستور ساده و در عین حال کارآمدی هست که به این صورت استفاده میشه : خروجی در متغیر quanData از نوع struct ذخیره میشن

quanData =

Region: [13x5 char]
State: [13x14 char]
Sales: [13x1 double]
Head_Count: [13x1 double]
در این قسمت دیتا به راحتی وارد متلب شد و آماده است تا هر جا که احتیاج باشد ، پردازش شود . همونطور که میبینید این دستور کار رو بسیار ساده کرده ، اما متاسفانه در اینجا نوشته شده که از ورژن R2007b بالاتر این دستور توسط متلب ساپورت میشه .

استفاده از TEXTSCAN

این دستور هم مثل قبلی راحته ( اما نه با اندازه ی اون ) و دیگه مشکل ساپورت رو نداره ، این بار توسط این دستور فایل با فرمت cvs رو ایمپرت میکنیم : باز هم دیتا در یک سل ذخیره شد و میتونیم ازش استفاده کنیم :

كد:

robData =

    [13x1 double]    {13x1 cell}    {13x1 cell}    [13x1 double]    [13x1 double]

بهترین روش کدومه ؟

اصلا بهتر از این راه ، راه دیگه ای هم هست ؟ راستش رو بخواید باید بگم نه !! فکر نکنم از این راه ساده تر باشه ، شاید بهتره اول با استفاده از دستورات csvread, dlmread, load, importdata, tdfread خودتون تست بکنید ، تا به این نتیجه برسید ! البته بسته به نوع دیتایی که دارین ممکنه بعضی از پنج دستور کارتون رو راه نندازه و با مشکل مواجه بشید ، اما در آخر سر به نظر من دستور textscan بهترین نتیجه رو میده ، این دستور خیلی انعطاف پذیره و فرمت های زیادی رو ساپورت میکنه

ibrahim habibi ۰۸-۱۶-۱۳۸۸ ۰۸:۵۴ بعد از ظهر

tashsakkor az reyhane

shmail ۰۹-۱۹-۱۳۸۸ ۱۰:۰۹ قبل از ظهر

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

Astaraki ۰۹-۱۹-۱۳۸۸ ۰۷:۱۶ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله shmail (پست 3099)
سلام خسته نباشی ریحانهٰ میشه در خصوص آموزش متلب فیلم یا کتابی معرفی یا ارائه کنید .با تشکر فراوان

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

کتابهاي فارسي آموزش Matlab


زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۰۲:۲۲ قبل از ظهر ميباشد.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.