تبلیغات آموزش مطلب
وبلاگ من
نویسنـــدگان :
امین باشی (73)
موضــــوع ها :
figure (14)
line (1)
uicontrol (1)
uipanel (1)
axes (2)
Organization of Graphics Objects (2)
uimenu (2)
خودم (7)
image (2)
surface (1)
patch (1)
text (5)
light (1)
plot object (2)
area (3)
bar (2)
convolution (1)
errorbar (2)
plot (1)
surf (1)
برازش منحنی (1)
workspace (1)
evalin (1)
GUIDE (1)
dsolve (1)
لاپلاس (1)
سری فوریه (3)
حل عددی IVP (2)
حل معادلات دیفرانسیل پاره ای وابسته به زمان در یک بعد (1)
BVP (1)
حل معادلات خطی (1)
solve (1)
حل pde (5)
subs (1)
آرشیـــو :
خرداد 1388 (1)
مرداد 1386 (1)
بهمن 1385 (2)
دی 1385 (2)
آذر 1385 (1)
شهریور 1385 (6)
مرداد 1385 (6)
تیر 1385 (5)
خرداد 1385 (1)
اردیبهشت 1385 (3)
فروردین 1385 (9)
اسفند 1384 (9)
شهریور 1384 (14)
مرداد 1384 (10)
تیر 1384 (3)
لینكدونی :
MATLAB Wiki
History of Iran
لورن
آرشیو لینكدونی
لینكستان :
متمتیکا
مهندسی صنایع - مهندس امیر
مهندسی شیمی ایران
اخبار نجوم
دانلود رایگان کتاب فیزیک به زبان فارسی
وبلاگ فیزیک ایران
مجله نجوم
انجمن علمی پژوهشی نجم شمال
ماه نو
مطلب نوین
آموزش متلب
میكرو روباتیك
معماری بی نظیر
انجمن مهندسی شیمی ایران
تکنولوژی برتر
گلچین دنیای اینترنت
پروژه های جالب الكترونیك
جادوهای ویندوز
Mathworks
وب كلاس
جنون اینترنت
فرهنگستان زبان و ادب پارسی
جسنجو :
خبرنامه :
نظر سنجی :
امروز :
بازدید های امروز :
بازدید های دیروز :
كل مطالب :
كل نظرها :
كل بازدید ها :
ایجاد صفحه : - ثانیه
guide
guide
در مورد گرافیک در مطلب خیلی صحبت کردم اما بدون صحبت از guide مطالبم ناقص است.
ویرایشگر رابط گرافیکی(guide) که از این پس ویرایشگر نامیده می شود ساده ترین راه برای ایجاد رابط گرافیکی است .توسط این ویرایشگر شبیه تمام زبانهای ویژوال کافی است که مکان تکمه ها، نمودارها، منوها و ... انتخاب کرده و رابط گرافیکی خوتان را ایجاد کنید.
اگر از ویرایشگر مطلب 7.0 استفاده کنید نمی توانید از رابط ایجاد شده در نسخه های پایین تر مطاب استفاده کنید. البته امکان ذخیره کردن رابط به صورت m-file که در نسخه های پایین تر قابل استفاده باشد نیز وجود دارد اما ترچیح می دهم که این کار را نکنم و در صورت لزوم رایط گرافیکی را مستقیما با نوشتن دستورات مطلب ایجاد کنم.
ویرایشگر رابط گرافیکی ایجاد شده را در دو فایل ذخیره می کند.یک fig-file و یک m-file . چیدمان نمودارها و .... در fig-file ذخیره می شود و m-file برای برنامه نویسی استفاده می شود.
اولین کار برای ایجاد رابط - پیدا کردن یک تیکه گچ ، کشیدن رابط و ... رابط اسم یک بازی است که قدیما از صبح تا شب بازی می کردیم - کشیدن یک طرح از پنجره مورد نظر روی کاغذ است .بعد از این کار دستور guide را اجرا کرده و طرح خود را در ویرایشگر می کشیم .
بعد از این کار باید ویژگی های اشیا قرار داده شده را تنظیم کنیم.مهمترین ویژگی که باید تنظیم شود ویژگی tag است.برای دسترسی به لیست ویژگی ها روی شئ مورد دوبار کلیک کنید.
در قسمت tag یک اسم یکتا را وارد کنید، اگر در لیست باز شده به قسمت callback (اگر وجود داشته باشد) نگاه کنید خواهید دید که در مقابل عبارت automatic ذکر شده است.معنی این عبارت این است که در m-file ایجاد شده یک تابع به اسم tag_Callback ایجاد می شود گه به جای tag اسمی که وارد کردید قرار می گیرد(البته گاهی بهتر است که برای گروهی از اشیا یک اسم انتخاب کنید).
پس از ذخیره یرنامه m-file آن باز می شود. در m-file ایجاد شده توضیحات کامل برای کار آن توسط مطلب قراردهده شده است .در اینجا مقداری از آنها را برسی می کینم.
ویرایشگر را باز کنید و یک Edit Text، یک Static Text . یک Push Bottun در صفحه باز شده قرار دهید(در منو سمت چپ می توانید اینها را پیدا کنید).بر روی هرکدام از این اشیا کلیک کرده تا لیست ویژگی های هرکدام باز شود.می بنید که برای ویژگی tag مربوط به Edit Text عبارت edit1 نوشته شده است.می توانید هر عبارت دیگری را بنوسید اما من تغیری در آن و در tag مربوط به دیگر اشیا نمی دهم.
من برنامه را به اسم guitest ذخیره کرده ام در m-file باز شده 6 تابع دیده می شود.
guitest
guitest_OpeningFcn
guitest_OutputFcn
نظیر این سه تابع در همه رابطهایی که با ویرایشگر ایجاد می شود وجود دارد و توابع دوم و سوم تابع داخلی تابع guitest (اسمی که رابط با آن ذخیره شده است) می باشند.
سه تابع دیگر در این m-file دیده می شود
edit1_Callback
edit1_CreateFcn
pushbutton1_Callback
در اینجا با تابع edit1_CreateFcn کاری نداریم در لیست ویژگی های Edit text در مقابل CreateFcn عبارت automatic نوشته شده است اگر این عبارت را پاک کنید این تابع ایجاد نخواهد شد.عملکرد این تابع همانند تابع guitest_OpeningFcn است .
در زیرتابع edit1_Callback این عبارات دیده می شود.
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
عبارت edit1 همان عبارتی است که در مقابل ویژگی tag شئ Edit Text نوشتیم و hobject دستگیره مربوط به این شئ است.
eventdata در حال حاضر در مطلب کاربرد ندارد
handles یک متغیر از نوع structure است.در این متغیر دستگیره تمام اشیا موجود در رابط قرار دارند.شما می توانید هر داده مورد نیاز را در آن قرار دهید.
و اما guidata
با کمک این دستور می توان متغیر handles به عنوانguidata ( داده های مورد نیاز تابع guitest) تعریف کرد و در هر قسمت از این تابع به این داده ها دسترسی پیدا کرد. با این کار نیازی به استفاده از متغیرهای سراسری و یا دستورات مشابه نیست.
این دستورات را به تابع edit1_Callback اضافه کنید
input = str2double(get(hObject, 'String'));
handles.metricdata.input = input;
guidata(hObject,handles)
دستور اول رشته موجود در شئ edit1 را به عدد تبدبه عنوان guidataیل می کند.دستور دوم این عدد را در متغیر handles ذخیره می کند و دستور سوم این متغیر را به عنوان guidata تعریف می کند.
شکل استفاده از دستور guidata به این صورت است.
guidata(object_handle, data)
آرگومان object_handle دستگیره رابط گرافیکی است ولی می توان دستگیره هر کدام از اشیا موجود در رابط را به جای به کار برد.
در زیر تابع pushbutton1_Callback دستورات زیر را اضافه کنید.
output = handles.metricdata.input * 3;
set(handles.text1, 'String', output);
واضح است که دستور اول عدد وارد شده در edit1 را در 3 ضرب کرده و در متغیر output قرار می هد.
برای دسترسی به دستگیره یک شئ کافی است به متغیر handles و فیلدی به اسم tag ان شئ مراجعه کیند.
لینکهای زیر رابط گرافیکی ایجاد شده برای این برنامه و یکی از مثالهای مطلب می باشد.که با مطلب 7.0 درست شده اند.
http://amin.bashi.googlepages.com/Guitest.rar
http://amin.bashi.googlepages.com/Guitest2.rar
evalin
در پست قبلی با فضای کار(workspace) در مطلب آشنا شدیم، امروز دستور evalin را برسی می کنیم.این دستور نیز برای کار کردن با فضای کار می باشد.
در اکثر زبانهای برنامه نویسی مفهومی به اسم متغیر سراسری و متغیر محلی وجود دارد.در مطلب برای تعریف نتغیر سراسری از دستور global استفاده می شود.استفاده از متغیرهای سراسری ساده ترین کار در هنگام کار با فضای حالت است اما همیشه ساده ترین راه قشنگ ترین راه نیست.
توابعی که در پست قبلی استفاده کردیم را با کمی تغیر دوباره مورد استفاده قرار می دهیم
function b=testcaller
testcurrent
m=67;
r=m+l
-------------
function testcurrent
assignin('caller','b',23)
assignin('base','t',33)
m=34;
evalin('base','b=t+2') % 1
evalin('caller','l=b+2') % 2
r= evalin('base','b+3')+evalin('caller','b+2')+m %3
دستور 1 متغیر b را برابر با جمع t و 2 قرار می دهد (این متغیرها در فضای base- فضای کار اصلی مطلب- قرار دارند)
دستور2 متغیر b را که در فضای کار تابع testcaller قرار دارد با 2 جمع کرده و در متغیر l قرار می دهد.
دستور 3 متغیر b که در base قرار دارد را با نتغیر b که در caller قرار دارد و متغیر محلی m را جمع کرده و در r قرار می دهد.
حال دستور h=testcaller را اجرا کنید بعد از پایان برنامه باید متغیرهای t,h,b در فضای base وجود داشته باشند.
Worcspace
حافظه ای که برای ذخیره متغیرها اختصاص داده می شود فضای کار نام دارد.چند نوع فضای کار در مطلب وجود دارد.فضایی به نام base که مروبط به فضای کار اصلی مطلب است فضایی به نام current که مربوط به فضای کاری جاری است؛ و فضای کاری parent یا caller .
برای روشن شدن مطلب فایلهای زیر را درست کنید
function testcurrent
assignin('caller','b',23)
assignin('base','t',33)
m=34
و فایل
function b=testcaller
testcurrent
m=67
هر تابع برای خود یک فضای کاری مسقل دارد یعنی اگر در درون دو تابع یک متغیر وجود داشته باشد مقدار این متغیر در دو تابع برابر نخواهد بود.
حالا د رخط فرمان دستور h=testcaller را اجرا کنید.
با اجرای این دستور تابع testcaller اجرا می شود.این تابع خود تابع testcurrent را فراخوانی می کند؛ در این حالت فضای کاری تابع testcaller به عنوان caller فضای کاری تابع testcurrent در نظر گرفته می شود.
با اجرای تابع testcurrent دستورات این تابع اجرا می شوند. با اجرای دستور اول متغیر b به درون فضای تابع testcaller فرستاده می شود.با اجرای دستور دوم متغیر t به فضای کاری base فرستاده می شود.
خروجی تابع testcaller متغیر b است که مقدار آن در متغیر h ذخیره می شود.
fit
fit
معمولا پدیده های انتقال (انتفال جرم و حرارت و مکانیک سیالات) پیچیده تر از آن هستند که روابط حاکم بر آنها از طریق تئوری بدست آوریم؛ و از طریق آزمایش و ایجاد داده های تجربی، روابطی برای آنها بدست می آید.معمولا بعد از هر آژمایش نیاز به اختصاص دادن یک فرمول به داده های ایجاد شده است.استفاده از نرم افزار Excel ساده ترین راه این کار است اما در محیط مطلب نیز این کار قابل انجام است.
کار دستور fit برازش منحنی برای داده های موجود است .
fresult = fit(xdata,ydata,'ltype')
آرگومان ltype مربوط به نوع مدلی است که برای برازش انتخاب می کنیم.منظور خطی، درجه دوم، درجه سوم، سینوسی و ...... می باشد.حتی می توانید مدل خاص خودتان را تعریف کنید.
فرض کنید که
x=[1.1000 2.2000 2.9000 3.8000 5.0000]';
y=[ 0.9000 2.1000 3.0000 4.0000 5.0000]';
یادتون باشه که x,y حتما باید ستونی باشند.
حالا باید نوع برازش را مشخص کنیم.تعدادی از مدلهای موجود در سطور زیر آورده شده اند.
poly1
Y = p1*x+p2
poly2
Y = p1*x^2+p2*x+p3
poly3
Y = p1*x^3+p2*x^2+...+p4
...
poly9
Y = p1*x^9+p2*x^8+...+p10
برای دیدن لست کامل مدل های موجود کافی است دستور cflibhelp را اجرا کنید.
دستور fit امکانات بسیار زیادی دارد که اگر وقت کنم بطور کامل توضیح خواهم داد.
fit1=fit(x,y,'poly1')
با اجرای این دستور خروجی زیر حاصل می شود.
fit1 =
Linear model Poly1:
fit1(x) = p1*x + p2
Coefficients (with 95% confidence bounds):
p1 = 1.069 (0.92, 1.217)
p2 = -0.2056 (-0.6934, 0.2822)
خروجی این دستور به صورت structure است.یعنی اگر بخواهیم مقدار p1 را بدانیم کافی است بنویسیم
fit1.p1
نگانیو کردن عکس
اگر
بخواهیم یک
عکس سیاه و
سفید را
نگاتیو کنیم
چی کار باید
کرد؟
با
تمام نرم
افزراهای
پردازش تصویر
به راحتی میتوانید
این کار را
انجام
دهید.امروز میخوایهم
یاد بگیریم با
مطلب این کارو
انجام بدیم.
اولین
کار ایجاد یک
پنچره برای
این کاره
figure('unit','pixel','pos',[50 100 950 600])
a1=axes('unit','pixel','pos',[50
150 400 400],'vis','off');
a2=axes('unit','pixel','pos',[500
150 400 400],'vis','off');
uicontrol('unit','pixel','pos',[225
50 50 25],'string','start','callback','alg(x,a2)');
uicontrol('unit','pixel','pos',[675
50 50 25],'string','exit','callback','close all');
من
این پنجره را
برای وضوح 1024*768
تنظیم
کردم.حالا
باید عکس مورد
نظر را وارد محیط
مطلب کنیم.
x=imread('pic.bmp');
مطلب
تصویر را به
دو حالت ذخیره
می کند.الان با
حالت RGB کار میکنیم. سه
خط بعدی تصویر
را به حالت RGB
تبدیل میکنند.
if ~isrgb(x)
x=ind2rgb(x);
end
و
حالا نمایش
تصاویر
y=x;
image('parent',a1,'cdata',x)
image('parent',a2,'cdata',y);
حالا
باید یک تابع
بنویسیم که
تبدیل مورد
نظر رو روی
عکس انجام
بدهد.
function alg(x,a2)
[m,n,k]=size(x);
yy=[];
hy=image('cdata',yy,'parent',a2);
for i=1:m
for j=1:n
if x(i,j,1)== 0 & x(i,j,2)== 0
x(i,j,3)== 0;
yy(i,j,=[1
1 1];
else
yy(i,j,=[0
0 0];
end
end
set(hy,'cdata',yy,'parent',a2)
drawnow
حتما همه میدانید
که دستورات
بالا مربوط به
یک فایل جداگانه
به اسم alg.m است.
در
حالت RGB هر تصویر
به صورت یک
ماتریس m*n*3
ذخیره میشود.m,n
شماره پیکسل
است.در هر m,n سه
درایه وجود
دارد که رنگ
پیکسل است.
خط
سوم یک تصویر
تهی تعریف می
کند و خط
چهارم آن را
نمایش میدهد.با
کمک این تصویر
نگاتیو شدن
تصوی را به
صورت سطر به
سطر نمایش
دهیم.حتی میتوانیم
به صورت پیکسل
به پیکسل این
کار را انجام
دهیم اما
برنامه کند میشود.
چون
تصویر ما سیاه
و سفید است می
توانستیم شرط
برنامه را به
صورت
if
x(i,j,1)== 0
بنوسیم،
اما در حالت
کلی باید شرط
را بطور کامل
نوشت.
میشود
الگوریتمهای
سریعتری
برای این کار
نوشت اما اصول
کار همین مطالبی
است که یاد
گرفتیم.
نوشته های پیشین ...
هرگونه استفاده تجاری از مــطالب این سایت بصورت
كتاب٬ نشریه٬ وب و ... ممنوع میباشد
All right
reserved©2005
Amin Bashi