MatlabTips
892 subscribers
462 photos
72 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
🔵مدیریت خطا با nargin و nargout🔵
بسیاری از موارد میخواهیم بدانیم که چه تعداد آرگومان ورودی و خروجی برای یک فراخوانی خاص استفاده شده است. توابع nargin و nargout که البته مخفف (number of input argument) و (number of output argument ) هستند، برای تعیین این موضوع استفاده میشوند.
💡توجه: از nargin,nargout تنها در بدنه تابع استفاده میشود.
برای مثال:
function c = addme(a,b)

switch nargin
case 2
c = a + b;
case 1
c = a + a;
otherwise
c = 0;
end


تابع بالا را ذخیره کنید. شخصی ممکن است این تابع را با دو ورودی، یک ورودی و یا هیچی فراخوانی کند. در این برنامه به راحتی با استفاده از nargin توانسته ایم که مدیریت خطا کنیم. مثلا اگر کاربر هیچ ورودی نداد ما خروجی را 0 میکنیم و در این صورت برنامه در اثر پیغام خطا متوقف نمیشود و میشود گفت که برنامه ما رباست(مقاوم) شده است.
همین موضوع برای nargout هم صادق است.
@MatlabTips
برنامه بالا را بدون استفاده از nargin در متلب اجرا میکنیم.
function c = addme(a,b)
c = a + b;

end

اگر در پنجره فرمان من تابع addme را با یک ورودی فراخوانی کنم(به اشتباه یا هر دلیلی) خطای زیر را دریافت میکنم:
>> addme(1)
Not enough input arguments.

Error in addme (line 2)
c = a + b;

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

ans =

2

برنامه متوجه شد که کاربر یک ورودی داده است پس وارد case دوم میشود و ورودی را با خودش جمع میزند.
@MatlabTips
🔵دستور polarplot در متلب 2016🔵
برای رسم نمودار در دستگاه قطبی از دستور polar استفاده میکردیم. این دستور که متناظر دستور plot در دستگاه کارتزین است، دارای امکانات ویرایشی کمی است. مثلا هنگام رسم یک نمودار قطبی گریدهایی را در صفحه مشاهده میکنید که نمیتوانید با دستور grid off آنها را پاک کنید. یا مانند دستور plot که محور x,y,z را محدود میکردیم، در polar چیزی جهت محدود کردن r,theta وجود ندارد.
اما متلب 2016 امکانات زیادی را برای این دستور فراهم کرده است که این بار در قالب دستور polarplot استفاده میشود.
مثال: رسم یک نمودار قطبیبا خطوط قرمز رنگ و مارکرهای دایره ای.
theta = linspace(0,2*pi,25);
rho = 2*theta;
polarplot(theta,rho,'r-o')
Forwarded from Deleted Account
برای نمودار بالا دستور grid on و grid off را امتحان کنید. در نسخه 2016 با این دستورات گریدها حذف و اضافه میشود.
مثال:
در این مثال محور theta را محدود میکنیم به بازه 0 تا پی.
theta = linspace(0,pi);
rho = theta/10;
polarplot(theta,rho)
thetalim([0 180])

در حقیقت در این ورژن متلب برای دستگاه قطبی محور تعریف شده است.
Forwarded from Deleted Account
Forwarded from شبکه توسعه
🔳⭕️پدیده داروینیسم معکوس

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

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

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

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

🖋⭕️تجویز راهبردی:
چه می توان کرد؟ آیا این خطای ذهنی راه درمانی هم دارد؟ بله!
الف) هر آنکس که به شما اطمینان صد درصد می دهد مشکوک باشید. چرا که آنان که در یک رشته خبره هستند زوایا، موانع، عدم قطعیت ها و پیش نیازهایی را می بینند که یک تازه کار خوش خیال نمی بیند.
ب) به جای اعتماد به سخنان افراد به عملکرد گذشته آنان نگاه کنید. صدای اعمال بسیار رساتر از صدای گفتار است.

مجتبی لشکربلوکی، معلم دانشگاه
@Dr_Lashkarbolouki
Forwarded from MATLAB
رسم چندین نمودار در یک گراف
هر بار که از دستور plot استفاده میکنیم، ناحیه گرافیکی پاک شده و نمودار جدید رسم میشود. چندین راه وجود دارد که بتوانید چند نمودار را روی هم بیندازید. یک روش استفاده از دستور plot است زمانی که چندین مجموعه را به عنوان ورودی میگیرد. روش دیگر استفاده از hold است.
روش اول:
دستور plot میتواند بیشتر از یک مجموع داده x,y را رسم کند. برای مثال میتوانیم یک موج سینوسی و یک موج کسینوسی را با هم دیگر به عنوان آرگومان plot داده و رسم کنیم.
%% set parameters
Nx=300;
xmax=3*pi;
%% calculate functions
x=linspace(0, xmax, Nx);
y1=sin(x);
y2=cos(x);
%% plot results
plot(x, y1, x, y2); % plots y1 vs x and y2 vs x
grid on
xlabel('x')
ylabel('sin(x), cos(x)')

برای اینکه روشن شود کدام نمودار مربوط به کدام معادله است از legend استفاده میکنند. خیلی اوقات در مقالات یا پایان نامه ها نیاز دارید چند نمودار را جهت مقایسه روی هم بیندازید و باید حتما legend بگذارید.
legend('sin(x)', 'cos(x)');
Forwarded from MATLAB
Forwarded from MATLAB
شما میتوانید به هر اندازه که بخواهید نمودار به plot پاس دهید. به عنوان نمونه میخواهیم خطی عمودی را رسم کنیم که از قعر کسینوس یعنی pi میگذرد(میخواهیم به گونه ای اختلاف فاز بین دو موج را مشاهده کنیم). به کد زیر دقت کنید که چگونه خط عمودی به دو موج دیگر به دستور plot اضافه شده است.
%% set parameters

Nx=100;

xmax=3*pi;

%% calculate functions

x=linspace(0, xmax, Nx);

y1=sin(x);

y2=cos(x);

%% plot results

plot(x, y1,...

x, y2, '--',...

[pi, pi],[-10, 10],'r');

axis([0, xmax, -1, 1]);

xlabel('x')

ylabel('sin(x), cos(x)')

legend('sin(x)', 'cos(x)');

نکته 1:
فرض کنید یک خط کد خیلی طولانی شود، میتوانیم بخشی از کد را در یک سطر نوشته، در ادامه آن ... وارد کنیم و با فشردن اینتر به سطر بعد برویم که ظاهر کد نویسیمان خوشگل بماند.
نکته 2: برای رسم یک خط عمودی من از دو نقطه استفاده کردم(قبلا گفتم که نقاط بهم متصل میشود و بنابراین با دو نقطه یک خط راست تشکیل میشود)
نکته 3: با دستور axis محورهای مختصات را محدود کردم. سعی کنید برنامه را بدون این خط اجرا کنید و تفاوت را ببینید.
نکته 4: اگر جایی متوجه نشدید بپرسید.
Forwarded from MATLAB
Forwarded from MATLAB
اما استفاده از hold چه برتری دارد؟
یک برتری عمده hold این است که شما میتوانید نمودارهای مختلف (نمودارهایی که الزاما با دستور plot رسم نمیشوند) را با هم رسم کنید. در مثال زیر یک سری داده تصادفی تولید میکنیم با استفاده از تابع randn. این تابع اعداد تصادفی با توزیع نرمال را تولید میکند. میخواهیم نمودار هیستوگرام این داده ها را رسم کنیم و سپس منحنی توزیع نرمال را نیز با توجه به فرمولی که دارد به آن اضافه کنیم.
%% set parameters for data
Ndata=10000;
q0=1.5; % mean of q data
sigmaq=0.25; % standard deviation of q data
qmin=0.0; % min and max for plotting
qmax=2.5;
nbins=25; % number of bins for histogram
%% generate simulation data
qdata=q0+sigmaq*randn(1,Ndata);
%% plot histogram of data
[nq, qs]=hist(qdata, nbins); % returns histogram
% data without plotting
bar(qs, nq); % makes histogram plot
xlabel('Value of q')
ylabel('Number of data points in bin')
axis([qmin, qmax, 0, inf]);
%% overlay plot of normal distribution function
Nq=200;
qa=linspace(qmin, qmax, Nq);
Pq=max(nq)*exp( -(qa-q0).^2/(2*sigmaq^2));
hold on
plot(qa, Pq, 'k', 'LineWidth', 2)
hold off

نکته اول: علامت % یک خط را کامنت مکیکند. یعنی متلب آن را اجرا نمیکند و شما برای خوانایی بیشتر کد از آن استفاده میکنید.
نکته دوم: %% برای سکشن بندی است و یکی از کاربردهای آن برای زیبایی کد است.
نکته سوم: خط نهم qdata داده هایی تصادفی با میانگین q0 و واریانس sigmaq هستند. با این حساب شما میتوانید داده هایی با توزیع نرمال با میانگین و واریانس دلخواه ایجاد کنید.
تابع hist داده های هیستوگرام را میسازد.
تابع bar برای رسم نمودار میله ای از آن استفاده میشود. از خروجی تابع hist به عنوان ورودی های تابع bar استفاده شده است.
نهایتا از دستور hold برای اضافه کردن منحنی توزیع نرمال به نمودار میله ای استفاده شده است.
Forwarded from MATLAB
🔵سیلی با طعم واقعیت🔵

خیلی از ماها برای اینکه پولدار تر شویم همیشه به فکر راههای جدید و بهتری هستیم و قطعا می دانیم با حقوق های اندکی که میگیریم یا کاسبی های کوچکی که داریم نمی توانیم به راحتی به خیلی از رویاهایی که داریم، برسیم. هر روز افراد زیادی را می بینیم که با تلاش کمی پول زیادی بدست می آورند: اگر بخشی که این پول را به طرق غیر متعارف بدست می آورند کنار بگذاریم می ماند افرادی که ایده های خوبی داشته اند و کسب کار خوبی به پا کرده اند. نمی خواهم در مورد همه چیز بحث کنم به همین خاطر به حوزه کوچکی می پردازم. مدتی است که افراد زیادی با من تماس می گیرند و به دنبال پیاده سازی یک ایده "ناب" برای یک آپلیکیشن موبایل هستند. از من می خواهند که ایده را برایشان پیاده کنم و پولدار شوند! عده ی دیگری که تعداشان به مراتب کمتر است خودشان یک قدم جلوتر می گذارند و برنامه نویسی آندروید یا آی او اس یاد می گیرند. خیلی از این افراد با دیدن برنامه های کاربردی ساده و با ایده های ابتدایی که پولهای خوبی در می آورند به فکر می افتند که "مگر از آن ها چه کم دارند!"
اگر معتاد خواندن مجلات یا کتاب های موفقیت هستید شاید بهتر باشد همینجا خواندن را متوقف کنید چون میخواهم آمار را برایتان رو کنم. بسیاری از این ایده های "ساده و موفق" پر از پیچیدگی های زیادی هستند که تنها با قواعد خشک و بی رحم بازار قابل درک هستند. تصورات ابتدایی و ساده از اینکه چند نفر در یک اتاق ایده ای به ذهنشان رسیده و بعد طی یک هفته آن را پیاده سازی کردند و پس از قرار دادنش در اینترنت میلیاردر شده اند تنها به درد فیلم های هالیوودی آبکی مانند فیلم "استیو جابز" می خورد. در عمل بسیاری از پروژه های این چنینی به شکست منجر می شوند و زمان و انرژی زیادی از افراد را به هدر می دهد. شما با قوانین قضایی، مافیا های مختلف و افراد و جریاناتی سر و کار خواهید داشت که تمام حرکت شما برایشان در حد یک نویز ساده است.
در زندگی روزمره چون موفقیت بیش از ناکامی به چشم می آید، دایما شانس موفقیت خودت را بیش از اندازه تخمین می زنی. رسانه ها علاقه ای به نبش قبر در قبرستان افراد ناموفق ندارند و این اصلا کار آن ها نیست. پشت سر هر نویسنده موفق صد نویسنده دیگر پیدا می کنی که کتاب هایشان هرگز به فروش نمی رسد. پشت سر آن ها هم صد نویسنده ی دیگر هست که ناشری پیدا نکرده اند. پشت سر آن ها هم صدها نفر هستند که دست نوشته های ناتمام شان زیر تاقچه خاک می خورد و باز هم صد ها نفر پشت آن ها که ایده های عالی برای نوشتن کتاب دارند. این قواعد صد البته جهانی هستند. بر طبق BUSINESS insider 93 درصد استارت آپ ها در سال اول در آمریکا شکست می خورند. از آنهایی که جان سالم بدر می برند با احتمال 10 درصد به سرمایه 40 میلیون دلار میرسند و بیشتر این شرکت ها مجبور به فروختن شرکت خود برای جلوگیری از ضرردهی می شوند.
منظور از این نوشته چیست؟ دست روی دست بگذاریم؟ قطعا اینطور نیست. وارد شدن در یک کسب کار یک کار علمی با هزاران پیچیدگی است. دست یازیدن به ایده های کاذب و تخیلی مانند انرژی های مثبت، جاذبه و قورت دادن غورباغه شکست شما را گارانتی و شما را به سمت توده های شکست خورده هل می دهد. "اسطوره موفقیت" ساز و کار سیستمی است که بدبختی اکثریت را به قیمت رفاه اقلیت توجیه می کند. برای شروع اولین قدم "توهم زدایی" از مسیر کسب کار و مشورت با افرادی است که در این باره مطالعات علمی انجام داده و تجربیات فراوان دارند. با تمام این ها باید باز هم پذیرفت که شانس نقش مهمی در مسیر دارد و قوانین مستقل از افکار ما عمل میکنند. به طور خلاصه: انتظار آنکه دنیا با شما عادلانه رفتار کند چون شما آدم خوبی هستید مانند این است که وقتی شیری جلوی شماست انتظار داشته باشید که او شما را نخورد چون شما او را نمی خورید!
Forwarded from MATLAB
🔵نمودار میله ای🔵
ممکن است مقادیر ذخیره شده در یک بردار را در قالب یک چارت میله ای بخواهید رسم کنید. فرمان bar(v) یک نمودار میله ای از مقادیر بردار v تولید میکند.
%%set data
temperatures=[71, 80, 73, 72, 78, 81, 73, 76];
%% plot data as bar chart
bar(temperatures);
xlabel('Measurement');
ylabel('Temperature(F)');
grid on;
Forwarded from MATLAB
حالا همین داده ها را میخام طور دیگه رسم کنم. اول مرتبشون میکنم و سپس محور افقی را طوری اسکیل میکنم که تفاوت بین مقادیرم محسوس شود. برای مرتب کردن از دستور sort و برای اسکیل کردن محور از دستور axis استفاده میکنیم که قبلا گفتم.
%% set data
temperatures=[71, 80, 73, 72, 78, 81, 73, 76];
sortedTemps=sort(temperatures);
Tmin=65;
Tmax=85;
%% plot data as bar chart
bar(sortedTemps);
xlabel('Measurement')
ylabel('Temperature (F)');
grid on
% axis([0, length(temperatures)+1, Tmin, Tmax]);

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