MatlabTips
891 subscribers
462 photos
73 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
🔵دستور ezplot🔵
پیش نیاز: آشنایی مقدماتی
برای: همه
سطح پیچیدگی: 🌓🌑🌑🌑🌑
📝هدف از این پست: تشریح دستورات بکار رفته در پست شیپور گابریل

در پست بالا (شیپور گابریل)از این دستور استفاده کردیم که یک تابع با متغیرهای سیمبولیک را رسم کند.
دو حرف اول این دستور که تلفظی شبیه easy به معنی آسان دارد، این مفهوم را منتقل میکند که شما میتوانید به راحتی یک نمودار را رسم کنید بدون اینکه درگیر تعریف بازه و ... شوید.
ورودی ها:
1⃣می توانید یک تابع بی نام تعریف کنید و با این دستور رسم کنید:
f = @(x) sin(x);
ezplot(f)

2⃣می توانید یک تابع سیمبولیک تعریف کنید و با این دستور رسم کنید:
syms x
f = sin(x);
ezplot(f)

3⃣می توانید تابع را درون یک رشته به این دستور ورودی دهید:
ezplot('sin(x)')

البته یه نکته خیلی خوب در مورد این تابع رسم توابع ضمنی هستش.
ezplot('sin(x)+cos(y)')

اگر به شکل ها دقت کنید متوجه میشوید که برای پی بردن به این نکته که بازه رسم در این دستور از منفی 2pi تا 2pi است به کسی مدال افتخار تعلق نمیگیرد. در صورتی که میخواهید بازه غیر این باشد میتوانید به صورت زیر بازه را تغییر دهید.
ezplot('sin(x)',[1,10])

#For_all, #plot
@MatlabTips
🔵برنامه نویسی سمبلیک🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: متوسط و پیشرفته

شاید خیلی از افراد مانند من که سابقه حل مساله روی کاغذ در ریاضی را دارند وقتی برای اولین بار با یک زبان برنامه نویسی مواجه می شوند تجربه ناخوشآیندی را داشته باشند. دلیل آن هم ساده است. بسیاری از چیز هایی که شما قبلا در ریاضی خوانده اید معادل های به کلی متفاوتی در کامپیوتر دارند. به طور مثال متغیر دیگر آن معنای سابق خود را ندارد. یا علامت تساوی معنای دیگری را دارد. همه چیز گسسته است و وقتی یک متغیر را تعریف می کنید همیشه باید در ذهن داشته باشید که این فضایی در حافظه من را گرفته است و قس علی هذا.
شاید اولین ایده ساخت زبان برنامه نویسی سمبلیک را استفان ولفرام در بسته نرم افزاری Mathematica پیاده سازی کرد. شاید تجربه او از فیزیک نظری با ریاضیات محض او را به این نتیجه رساند. به هر روی ایده او به زبان های برنامه سازی دیگر مانند متلب هم راه پیدا کرد و در این زبان ها هم میبینیم که می توان به دنیای تخیلی ریاضیات باز هم برگردیم (تخیلی به معنای وجود بی نهایت واقعی و دیگر ایده هاست). تابع sym و syms به ما کمک می کند که متغیر به معنای ریاضیاتی آن داشته باشیم. همانطور که در ریاضیات خوانده ایم اعداد حقیقی، طبیعی و غیره هستند (بر خلاف کامیپیوتر که مجبور هستیم از float، int و امثالهم استفاده کنیم) بنابراین شما قادر خواهید بود نوع عددتان را هم تعریف کنید. قطعه کد زیر سه متغیر را تعریف می کنند:

>> x = sym('x');
>> y = sym('y');
>> z = sym('z');


یا به طور خلاصه تر:

>> syms x y z;


وقتی نوعی بیان نمی شود (که معمولا هم همین کار را می کنیم) نوع را حقیقی در نظر می گیرد. می توان به صورت دلخواه هم تعریف کرد:

syms x y integer


حتی اعداد اعشاری را هم می توان به این طریق به صورت فرم کسری آشناتر تبدیل کرد:

>> a = sym(4.12) 
a =
103/25


می توان با توابع هم آن ها را ترکیب کرد و مقدار تابع را محاسبه نمود:

>> f = x + y - z;
>> subs(f,{x y z},{1 2 3})
ans =
0


و می توان معادلات را به صورت زیر حل کرد:

>> solve('sin(x) = 1')
ans =
pi/2

>> x = solve('2*x-8 = 10')
x =
9


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

>> [x y z] = solve('x+y-z=4','x-2*y+3*z=-6','2*x+3*y+z=7')
x =
1
y =
2
z =
-1


اما قضیه زمانی جالب تر می شود که شما بتوانید به صورت پارامتری معادله را حل کنید یعنی زمانی که معادلات از متغیر ها کمتر باشند. در این حالات جواب های شما عدد نیستند بلکه متغیر هم دارند:

>> [x y] = solve('x+y-z=4','x-2*y+3*z=-6','x,y')
x =
2/3 - z/3
y =
(4*z)/3 + 10/3

>> [x z] = solve('x+y-z=4','x-2*y+3*z=-6','x,z')
x =
3/2 - y/4
z =
(3*y)/4 - 5/2


در قسمت بعدی بیشتر از این ابزار جالب استفاده می کنیم. مثلا مشتق گرفتن یا انتگرال گیری نامعین را مورد بررسی قرار می دهیم.
@MatlabTips
#Symbolic_Programming , #Symbolic_math
🔵کپی کردن از پنجره figure🔵
برای: همه
سطح پیچیدگی:🌑🌑🌑🌑🌑

شاید خیلی مبتدی به نظر برسد، ولی کپی کردن از پنجره figure یک سری آپشن دارد که عناوین خود توضیح دهنده هستند. همین آپشن های ساده ممکن است به زیباسازی گزارش شما کمک کند. به جای استفاده از پرینت اسکرین یا snipping tool میتوانید از منوی edit گزینه copy figure را انتخاب کنید، تصویر در clip board کپی شده است و می توانید در word با فشردن ctr+v نمودار را پیست کنید.
به تصویر بالا نگاه کنید👆👆👆
#Copy_figure
@MatlabTips
الگوریتم اقلیدس پدربزرگ تمام الگوریتم هاست، زیرا قدیمی ترین الگوریتم مهمی است که تا به امروز زنده مانده است. (دونالد کنوث)
خرم آن نغمه که مردم بسپارند به یاد...

از دیرباز افراد زیادی به دنبال اکسیر حیات ابدی انواع روش های عجیب و خطرناک را پیش می گرفتند البته آرزوی جاودانگی را خاکیان همه به گور می بردند در این میان آنچه می ماند اثر و کار افراد بود که البته باز هم تعداد کمی این شانس را داشتند که کارشان در طول زمان رنگ نبازد و از اعتبارش کاسته نشود. شاید یکی از عجیب ترین موارد اقلیدس باشد که کارهای او تا مدت ها پر تاثیر بود. سخت است تصور این که ایده ای 300 سال پیش از آنکه حتی مسیح به دنیا آمده باشد امروز همچنان یکه تاز باشد و در قلب پیچیده ترین سیستم های رمز نگاری ای قرار بگیرد که مسئول انتقال میلیون ها دلار به صورت امن در بستر اینترنت است. الگوریتم بزرگترین مقسوم علیه مشترک (ب.م.م) یا GCD (که در مدرسه به نام روش نردبانی میشناختیم) اولین بار توسط اقلیدس ارائه شد و در طول چند صد سال اخیر تمام دانش آموزان دنیا آن را فرا گرفته اند (و خواهند گرفت)، الگوریتم ساده ای است که در طول این 2000 سال با وجود تلاش بسیار زیاد ریاضیدانان و دانشمندان علوم کامپیوتر رقیب جدی ای از لحاظ کارایی و زیبایی برایش یافته نشده است. به این ترتیب این الگوریتم اکسیر جاودانگی اقلیدس شد!
@MatlabTips
🔵در راستای پست قبلی🔵
پست قبلی که آقای زندیه گذاشت مثل الباقی پست ها برای علاقه مندان به ریاضیات جذاب بود. باعث افتخاره که یک متخصص data mining از شریف در کنار ما فعالیت دارند.
اما بد نیست که در راستای پست قبلی، برنامه ای هم برای محاسبه ب.م.م بنویسیم.

اگرچه الگوریتم بسیار پرکاربرد و کارآمد است، اما با روابط ساده ای بیان میشود. خیلی از شاهکارهای تاریخ به این صورت بوده است. فرمول معروف جرم به انرژی انشتاین، مجموعه مندلبرات، ژولیا و ... .
فلوچارت این الگوریتم در زیر آورده شده است.
Forwarded from Deleted Account
به راحتی این فلوچارت به کد تبدیل میشود.
% Clears screen and deletes all the variables in the workspace
clear; clc
% Asks the user for input and takes only positive numbers into account
a = input('First number: ');
b = input('Second number: ');
a = abs(a);
b = abs(b);
% This is the real trick, normally performed a number of times
r = mod(a,b);
% Repeats the operation until updates of a equal updates of b
while r ~= 0
a = b;
b = r;
r = mod(a,b);
end
% Displays the result

GCD = b
البته خود متلب هم تابعی به نام gcd دارد که همین کار را انجام میدهد. جالب است بدانید که مهندسی که این تابع را برای مث ورک نوشته است، رفرنس به مقاله آقای "کنوث" داده است. همان شخصی که آن جمله قصار در مورد دانشمند شهیر اقلیدس گفته است(در پست قبل).
رفرنس مقاله:
[1] Knuth, D. "Algorithms A and X." The Art of Computer Programming, Vol. 2, Section 4.5.2. Reading, MA: Addison-Wesley, 1973.
#Gcd, # Euclidian_algorithm
@MatlabTips
🔵برنامه نویسی سمبلیک(ادامه)🔵
سطح پیچیدگی:🌕🌕🌕🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: متوسط و پیشرفته

همانطور که دیدیم برنامه نویسی سمبلیک به اندازه برنامه نویسی عددی جالب و جذاب است. در این قسمت چند مثال دیگر می آوریم. مثال هایی که می آوریم ممکن است برای بسیاری از شما تازگی داشته باشد. چون قبلا تصور نمی کردید می توانید با کامپیوتر نه تنها تمرینهای محاسبات عددی بلکه بقیه کارها را هم انجام دهید!
ساده کردن عبارات جبری کاری است که چند سال از تحصیل ریاضی ما را به خود مشغول کرد.
⚠️توصیه می شود این ابزار به دوستانی که هنوز در حال آموزش هستند یاد داده نشود⚠️
متلب می تواند این کار را برای شما انجام دهد. مثلا :

simplify((x - 1)*(x + 1)*(x^2 + x + 1)*(x^2 + 1)*(x^2 - x + 1)*(x^4 - x^2 + 1))
>>
ans =x^12-1


یا اینکه عبارت های مثلثاتی را ساده کنید:

combine(2*sin(x)*cos(x) + (1- cos(2*x))/2 + cos(x)^2,'sincos')
>>
ans =sin(2 x)+1



همچنین تجزیه برایش کاری ندارد!

factor(y^6-x^6)
>>
ans = (-1 x-y x+y x^2+xy+y^2 x^2-xy+y^2 )


همچنین می توانید مشتق گیری کنید:

diff(sin(x))
ans = cos(x)


حد گیری:

limit(tan(x),x,pi/2,'left')
ans = ∞


یا محاسبه بسط تیلور:


syms x 
T = taylor(sin(x)/x)
>>
T =
x^4/120-x^2/6+1



این ها تنها شمه ای از قدرت این ابزار هستند. شما می توانید تعداد بیشتری از این قابلیت ها را در help متلب جستجو کنید. به این شیوه برنامه سازی computational mathematics هم می گویند که شاخه ای به شدت در حال رشد است. نتایج ریاضی و فلسفی زیادی بر این نگرش به "محاسبه" مترتب است که در پست های بعدی در قالب خلاصه کتاب آورده می شود.

@MatlabTips
#Symbolic_Programming #Computational_Mathematics
بحثی که در قسمت قبل در مورد برنامه نویسی سمبولیک آغاز کردیم توجهات زیادی را به خود جلب کرد. در چند پست بعدی در مورد شاخه ی نسبتا جدید و کمتر شناخته شده ای از علوم کامپیوتر به نام "ریاضیات محاسباتی" بحث می کنیم. خواندن آن را به همه علاقه مندان علم توصیه می کنیم 👇🏻👇🏻👇🏻
🔵نوع جدیدی از علم🔵
"نوع جدیدی از علم" (A new kind of science) عنوان کتاب بسیار معروف استفان ولفرام است که در سال 2002 منتشر شد و اثرات زیادی بر جامعه علمی گذاشت. در اینجا سعی می کنیم تز اصلی کتاب را خلاصه کنیم.
⬅️ محاسبه و پیامدهای آن
تز اصلی این کتاب دو چیز است:
1- طبیعت "محاسبه" باید به صورت تجربی مورد بررسی قرار بگیرد
2- نتایج این آزمایشات ارتباط زیادی با فهم جهان فیزیکی دارند!
این تزها عجیب هستند زیرا تاکنون "محاسبه" از این دید بررسی نشده بود. دو دیدگاه معمول عبارت بودند از: اول ساخت سیستم های مهندسی برای شبیه سازی و تست و دوم به عنوان شاخه ای از ریاضی که بررسی آن در قالب سیستم های صوری باید صورت می پذیرفت. اما ادعای ولفرام بسیار عجیب است. او می گوید باید به طبیعت خود "محاسبه" دقت کنیم و به صورت تجربی همانطور که به مطالعه مواد شیمیایی می پردازیم یا سمندر آبی را مورد مشاهده قرار می دهیم و رفتارش را ثبت می کنیم، محاسبه را هم آزمایش کنیم. ممکن است گیج شده باشید چون حتی ایده ای هم ندارید که چطور می توان محاسبه را آزمایش تجربی کرد. اما ولفرام راههایی پیش پا می گذارد. فراموش نکنید ولفرام پیش از همه چیز یک فیزیکدان است!
⬅️ برنامه های ساده
برنامه های ساده در چارچوب های مختلفی بررسی می شوند. یکی از آنها که بسیار مورد علاقه ولفرام هم هست اتومات سلولی است. دیگر چارچوب ها مانند ماشین تورینگ یا زبان های برنامه سازی هم وجود دارند. جدای از این چارچوب های همسان، نکته مهم این است که برنامه های ساده ی مورد بررسی چند ویژگی داشته باشند. اول اینکه کارکردشان آنقدر باید ساده باشد که در چند جمله عادی بیان شود. دوم آنکه چند خط کد بیشتر نداشته باشند و در نهایت اینکه یک شمای گرافیکی هم داشته باشند. این گونه برنامه ها معمولا رفتار ساده ای از خود نشان می دهند. اما همیشه هم اینطور نیست. برخی برنامه های ساده رفتار های پیچیده و عجیبی از خود نشان می دهند. سوالی که پیش می اید این است که این رفتار پیچیده از کجا می آید. پاسخ ولفرام این است که این رفتارهای پیچیده ساده ترین مثال های پیچیدگی در جهان ما هستند. پیچیدگی ای که نیازمند ناظمی نیست چرا که می تواند به صورت کاملا اتفاقی تولید شود! اما چگونه برنامه ای به صورت اتفاقی تولید می شود؟
ادامه دارد...
Forwarded from Kamyar
Think like a chess master. @kamyariiii
🔵میان پرده: میمون های برنامه نویس🔵
سطح پیچیدگی:⁉️
پیش نیاز: ذهن باز
برای: همه

اما چگونه می توان برنامه تصادفی تولید کرد؟ همه ما می دانیم که هر رشته از صفر ها و یک ها در کامپیوتر می تواند هم داده باشد و هم برنامه. ما همیشه در مورد داده های تصادفی صحبت می کنیم اما آیا به سرتان زده است که به جای تولید داده های تصادفی برای تولید مثلا یک عکس تصادفی(شبیه برفک) یا صدا (نویز) آن را به صورت برنامه ببینیم و به کامپایلر بدهیم (به کامپایلر هر زبانی مثل متلب). حتمن خواهید گفت این کار احمقانه است چون هیچوقت چنین برنامه هایی اجرا نمی شوند. نوشتن برنامه روند ساده ای نیست و نیاز به دقت زیاد دارد و در انتها هم با آن همه دقت ممکن است کدتان پر از خطا باشد. گفتن این حرف مانند این است که انتظار داشته باشیم یک میمون با ضربات تصادفی روی کیبورد شکسپیر را خلق کند. مهم نیست چند بار سعی کند نتیجه ای حاصل نخواهد شد. اما من می گویم یک لحظه تمام پیش فرض هایی که از "نظم" به خورد ذهنمان داده اند را دور بریزید و از آنچه آموخته اید بهره بگیرید: در عمل برنامه های تصادفی خیلی هم بد نیستند!! تمام حرف من این است که به جای باز کردن برنامه نوت پد(notepad) برای میمونتان، برنامه جاوا یا متلب یا هر زبان برنامه نویسی دیگری را که می دانید باز کنید!!!
این ایده ظاهرا احمقانه اولین بار توسط کولموگروف و چایتین مورد بررسی قرار گرفت. آنها می خواستند بدانند احتمال تولید تصادفی برنامه ای که بتواند یک میلیون رقم اول عدد پی را تولید کند چقدر است. تولید تصادفی این همه رقم در برنامه نوت پد(یا هر برنامه تکست ساده دیگری) توسط میمون ها برابر با 1 در 10 به توان یک میلیون است!(فقط اعداد کیبورد را در نظر بگیرید) اما این احتمال برای تولید عدد پی به روش میمون های پشت متلب(!) (یا تولید برنامه تصادفی) بسیار بسیار بزرگتر است این احتمال حداکثر برابر با ا در 10 به توان 100 است.(در نظریه تنها می توان کران بالا برای این احتمال تعیین کرد).
در دنیایی که میمون های پشت کامپیوتر به صورت مداوم برنامه خلق می کنند. تعداد زیادی برنامه های آشغال یا تصادفی تولید می شوند ولی برنامه های زیادی هم تولید می شوند که از قوانین ساده نظم خلق می کنند. شاید باورش برایتان سخت باشد ولی تقریبا تمامی پیچیدگی ها و زیبایی هایی که اطرافتان می بینید از قوانین فراکتال ها و قواعد ریاضی گرفته تا مدل استاندارد فیزیک (جامع ترین نظریه فیزیک تا به امروز که جهان را توضیح می دهد) و شیمی و فیزیک کوانتوم می تواند توسط برنامه های کوچک ساخته شود. دلیل این امر این است که بیشتر قوانین جهان ساده اند!
اگر به این موضوع علاقه مند شده اید یا سوالات زیادی برایتان پیش آمده است، می توانید منابع زیر را بررسی کنید.

[1] Lloyd, Seth. Programming the universe: a quantum computer scientist takes on the cosmos. Vintage Books, 2006.
[2] Chaitin, G. J. "Meta Math! The Quest for Omega." arXiv preprint math/0404335 (2004)
[3] Calude, Christian. "Randomness & Complexity, from Leibniz to Chaitin." (2007).
#Complexity #Infinite_Monkey_Theorem #Chaitin #Kolmogrov #Solomonof #Algorithmic_Probability

@MatlabTips
🔵دکی و آقای ریختنشتاین🔵

این متلبی که تو دست شماست، یه نسخه کرک شده است. تو این نسخه شما به خیلی از تولباکس ها دسترسی دارید. اما تو کشورایی که قانون وجود داره این شکلی نیست که اشخاص قبل از اینکه "مث ورک" نسخه جدید رو بده بیرون، نرم افزار رو تو گنجه داشته باشن. یه نسخه دانشجویی داره که خیلی از تولباکس‌ها توش نیست و ارزون تره تا دانشجوها بتونن بخرن. حالا بشنوید این حکایت دردناک(داستان واقعی است و برای مصلحت از اسم مستعار استفاده شده است) :
شخصیت اصلی داستان: آقای ریختنشتاین
مدرک: دکتری مخابرات دانشگاه امام حسین
موقعیت: مدیر بخش یکی از شرکت های زیرمجموعه ... (العیاذ بالله)
آقای ریختنشتاین که تازه داشت دکتری مخابرات سیستم را میگذراند، مدیر افرادی بود که به لحاظ نبوغ در درجه بالایی بودند. حتی به تازگی آقای لتاخشیست که به آن دکی هم میگفتند زیر دست آقای ریختنشتاین کار میکرد. دکی یک اصفهانی نابغه بود و از تمامی اساتید خود در دانشگاه علم و صنعت یک سر و گردن بالاتر بود.
آقای ریختنشتاین دکی را استثمار کرده بود. برعکس آقای ریختنشتاین، دکی بیشتر وقت خود را صرف مطالعه کتابهایی روز دنیا در زمینه مخابرات دیجیتال، تخمین و ... را میکرد و کمتر وقت میکرد کتب دعا و احادیث معتبره را مرور کند. در عوض آقای ریختنشتاین "اسکرین سیور" صفحه نمایش کامپیوترش نیز احادیثی بود که ادعا میکرد مستحکم است و صحت و سقم آن با نرم‌افزار تشخیص جعل حدیث تایید شده است.
اصولا کسی که در حال حاضر دانشجوی دکتری مخابرات سیستم باشد باید نرم افزارهای مربوطه که در راس آن متلب است، مسلط باشد. اما آقای ریختنشتاین فرق "=" با "==" را هم نمیدانست و دومی را غلط میپنداشت و یا علامت "نقطه" در تعریف یک فیلد برای استراکچرها در متلب به عنوان ضرب نقطه ای تلقی میکرد.
دکی بعد از اینکه کارها را انجام میداد باید به آقای ریختنشتاین هم توضیح میداد و از این جهت آقای ریختنشتاین به عنوان یک نیروی اضافی بود، اما مدیر بود.
چیزی که باعث میشود آقای ریختنشتاین را هیچوقت فراموش نکنم، نحوه استدلال او بود در باب مسائل مختلف. اتفاقا از او در مورد شرعی بودن مسئله "کرک" متلب هم پرسیده شده بود و در حالی که تسبیحش را به هوا میچرخاند جواب داده بود: " از آنجایی که میخواهیم علیه دشمن از این نرم افزار استفاده کنیم مسئله ای نیست".
من حتم دارم تنها کاری که آقای ریختنشتاین میتواند انجام دهد این است که لباس سبز بپوشد و در مترو تهران افراد مسن و کم توان را هدایت کند که مسیرشان را بدرستی پیدا کنند. اما آقای ریختنشتاین با تمام تواناییهایش مدیر دکی است. او روح دکی را تسخیر کرده است. آقای ریختنشتاین اعتقاد دارد که میتواند میشل بسازد(او کلمه missile بخوانید میسایل به معنی موشک را میشل تلفط میکند) و بر دشمن فرضی پیروز شود. اما من معتقدم که آقای ریختنشتاین با تمام تواناییهایش روح دکی را تسخیر کرده است.
@MatlabTips
🔵رسم نمودار با برنامه نویسی سمبلیک🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیش‌نیاز: برنامه نویسی مقدماتی
برای: متوسط و پیشرفته


یکی از مزایای استفاده از جعبه ابزار برنامه نویسی سمبولیک استفاده از آن برای رسم انواع و اقسام نمودار ها است. نمودار هایی که رسم آن ها به صورت عادی قدری دشوارتر است. یکی از این توابع ezplot است که می توان نمودار های ساده تا پیچیده را با آن رسم کرد.
مثلا تابع y=x^2 را در بازه ی پیش فرض [-2pi 2pi] را می توان به صورت زیر رسم کرد:
ezplot('x^2')
توابع پیچیده تر مانند x^2-y^4=0 را هم می توان رسم کرد. پیش فرض این است که یک طرف معادله برابر با صفر باشد.
ezplot('x^2-y^4')