🔵انیمیشن و خروجی ویدئو با متلب🔵
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:(کد نویسی پایه)
برای:(همه)
برای بسیاری از دوستانی که کانال را دنبال می کنند ممکن است این سوال پیش آمده باشد که چگونه ما خروجی هایی به صورت فیلم از متلب میگیریم. در این قسمت سعی میکنیم با مثال این تکنیک را به شما آموزش دهیم.
⚠️قبل از هر چیزی به این نکته توجه کنید که متلب در طول چند نسخه اخیر خود تغییرات زیادی برای خروجی ویدئو ایجاد کرده است بنابراین ممکن است کدهای زیر در نسخه های قدیمی تر اجرا نشود. از طرفی خروجی های انیمیشن متلب هنوز با حالت بهینه فاصله دارند بنابراین باید کارت گرافیک متوسطی داشته باشید تا تجربه خوبی از کار داشته باشید. برنامه های زیر بر روی متلب 2015 و با کارت گرافیک 512 قابل اجرا هستند.⚠️
همانطور که می دانید هر فایل ویدئوبه صورت ساده از چند فریم تشکیل می شود که با نرخ مناسبی پشت سر هم قرار گرفته اند تا یک حرکت پیوسته را نشان دهند. هر فریم در واقع یک عکس از ورودی است. متلب یک رابط ساده برای این کار قرار داده است. برای این منظور با استفاده از FileWriter و مشخص کردن یک اسم می توانید یک شی ضبط ویدئو بسازید. در قدم بعدی آن را باز می کنید و در یک حلقه شروع به تولید تصاویر پشت سر هم میکنید یا با دستور های plot( یا هر دستور دیگری که خروجی تصویری دارد) نمودار رسم می کنید. در هر حلقه با گرفتن هر فریم با دستور getframe و اضافه کردن آن به شی ویدئو، ویدئویتان کامل می شود. در مرحله آخر کافی است ویدئو را ببندید تا استریم ویدئو به صورت کامل در فایل ذخیره شود.
برنامه زیر یک مثال زیبا را نشان می دهد
حتما شما می توانید خروجی های زیباتری تولید کنید. در پایان برای تبدیل فایل avi به gif کافی است از یک نرم افزار converter استفاده کنید. این ابزار متلب می تواند برای مدتی شما را سرگرم کند.
@MatlabTips
#For_intermediate, #For_beginner
#Video_recording, #Video
نویسنده:(#A_2)
سطح پیچیدگی:🌕🌑🌑🌑🌑
پیشنیاز:(کد نویسی پایه)
برای:(همه)
برای بسیاری از دوستانی که کانال را دنبال می کنند ممکن است این سوال پیش آمده باشد که چگونه ما خروجی هایی به صورت فیلم از متلب میگیریم. در این قسمت سعی میکنیم با مثال این تکنیک را به شما آموزش دهیم.
⚠️قبل از هر چیزی به این نکته توجه کنید که متلب در طول چند نسخه اخیر خود تغییرات زیادی برای خروجی ویدئو ایجاد کرده است بنابراین ممکن است کدهای زیر در نسخه های قدیمی تر اجرا نشود. از طرفی خروجی های انیمیشن متلب هنوز با حالت بهینه فاصله دارند بنابراین باید کارت گرافیک متوسطی داشته باشید تا تجربه خوبی از کار داشته باشید. برنامه های زیر بر روی متلب 2015 و با کارت گرافیک 512 قابل اجرا هستند.⚠️
همانطور که می دانید هر فایل ویدئوبه صورت ساده از چند فریم تشکیل می شود که با نرخ مناسبی پشت سر هم قرار گرفته اند تا یک حرکت پیوسته را نشان دهند. هر فریم در واقع یک عکس از ورودی است. متلب یک رابط ساده برای این کار قرار داده است. برای این منظور با استفاده از FileWriter و مشخص کردن یک اسم می توانید یک شی ضبط ویدئو بسازید. در قدم بعدی آن را باز می کنید و در یک حلقه شروع به تولید تصاویر پشت سر هم میکنید یا با دستور های plot( یا هر دستور دیگری که خروجی تصویری دارد) نمودار رسم می کنید. در هر حلقه با گرفتن هر فریم با دستور getframe و اضافه کردن آن به شی ویدئو، ویدئویتان کامل می شود. در مرحله آخر کافی است ویدئو را ببندید تا استریم ویدئو به صورت کامل در فایل ذخیره شود.
برنامه زیر یک مثال زیبا را نشان می دهد
v1 = VideoWriter('video.avi');
open(v1);
t = 0:pi/50:10*pi;
for i=1:500
st = sin(i*t/100);
ct = cos(i*t/100);
plot3(st,ct,t)
frame = getframe;
writeVideo(v1,frame);
end
close(v1)
حتما شما می توانید خروجی های زیباتری تولید کنید. در پایان برای تبدیل فایل avi به gif کافی است از یک نرم افزار converter استفاده کنید. این ابزار متلب می تواند برای مدتی شما را سرگرم کند.
@MatlabTips
#For_intermediate, #For_beginner
#Video_recording, #Video
نویسنده:(#A_2)
🔵تبدیل لاپلاس🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
هنگامی که ناپلئون به لاپلاس گفت:" چرا در کتابتان که سیستم سیارات و آسمان ها را به این شگرفی توضیح می دهد، نامی از خدا نبرده اید؟" لاپلاس پاسخ داد: "به آن فرض احتیاجی نداشتم!".
این روایت شاید اوج دورانی را نشان دهد که با تالیف کتاب "اصول ریاضی فلسفه طبیعی" توسط نیوتون شروع شد. ایده نیوتون آنقدر کارا بود که بسیاری از دیگر شاخه ها سعی در تقلید آن کردند. کانت سعی در سازماندهی مجدد فلسفه مانند کاری که نیوتون برای فیزیک انجام داد، کرد و مونتسکیو تفکیک پذیری قوا را در روح القوانین بر پایه ایده های نیوتون بنا نهاد. این افکار به سرعت تمام اروپا را در نوردید و به تدریج سیستم های فکری، فلسفی و در نهایت سیاسی را تغییر داد. حکومت های پادشاهی سرنگون، قدرت کلیسا محدود و مقدمات اولین حکومت های سکولار و جوامع انسان گرا در بسیاری از کشورهای اروپایی فراهم شد(ارنست کاسیرر/ فلسفه روشنگری/ یدالله موقن)
اما لاپلاس چه چیز جدیدی را در کتابش معرفی کرده بود. در واقع او نوآوری های زیادی داشت که فراتر از مکانیک پیش رفت و بعدها تحت عنوان نظریه کنترل معرفی شد. اما آنچه اینجا می خواهیم معرفی کنیم تبدیل لاپلاس است که نحوه ی جدیدی از نمایش علاوه بر نمایش فضای حالت که به آن پرداختیم را توسعه می دهد. اگر یک سیستم خطی را به صورت زیر در نظر بگیریم:
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
هنگامی که ناپلئون به لاپلاس گفت:" چرا در کتابتان که سیستم سیارات و آسمان ها را به این شگرفی توضیح می دهد، نامی از خدا نبرده اید؟" لاپلاس پاسخ داد: "به آن فرض احتیاجی نداشتم!".
این روایت شاید اوج دورانی را نشان دهد که با تالیف کتاب "اصول ریاضی فلسفه طبیعی" توسط نیوتون شروع شد. ایده نیوتون آنقدر کارا بود که بسیاری از دیگر شاخه ها سعی در تقلید آن کردند. کانت سعی در سازماندهی مجدد فلسفه مانند کاری که نیوتون برای فیزیک انجام داد، کرد و مونتسکیو تفکیک پذیری قوا را در روح القوانین بر پایه ایده های نیوتون بنا نهاد. این افکار به سرعت تمام اروپا را در نوردید و به تدریج سیستم های فکری، فلسفی و در نهایت سیاسی را تغییر داد. حکومت های پادشاهی سرنگون، قدرت کلیسا محدود و مقدمات اولین حکومت های سکولار و جوامع انسان گرا در بسیاری از کشورهای اروپایی فراهم شد(ارنست کاسیرر/ فلسفه روشنگری/ یدالله موقن)
اما لاپلاس چه چیز جدیدی را در کتابش معرفی کرده بود. در واقع او نوآوری های زیادی داشت که فراتر از مکانیک پیش رفت و بعدها تحت عنوان نظریه کنترل معرفی شد. اما آنچه اینجا می خواهیم معرفی کنیم تبدیل لاپلاس است که نحوه ی جدیدی از نمایش علاوه بر نمایش فضای حالت که به آن پرداختیم را توسعه می دهد. اگر یک سیستم خطی را به صورت زیر در نظر بگیریم:
که در آن x(t) یک بردار n تایی است و وضعیت سیستم را در زمان t نشان می دهد، u(t) یک بردار m تایی است که ورودی را مشخص می کند و بردار p تایی y(t) هم خروجی است. به این ترتیب ماتریس A یک ماتریس n*n تایی است و به ماتریس سیستم شناخته می شود. و ماتریس های B، C و D هم به ترتیب اندازه های n*m ، p*n و p*m دارند. در واقع اگر معادله بالا را باز کنیم داریم:
این نحوه نمایش قدرتمند است و تمامی جنبه هایی که ما از یک سیستم خطی ( وتغییر ناپذیر نسبت به زمان) میخواهیم را دارد. به طور مثال اگر سیستم ساده جسم متصل به فنر را در نظر بگیریم معادلات آن به صورت زیر خواهند بود(این معادلات به صورت گسسته در آمده اند)( معادلات از قوانین نیوتون به دست آمده اند و با جزییات آنها در اینجا کاری نداریم)
که در آن x یک دوتایی به صورت x=(r,v) است که مکان و سرعت جسم را نشان می دهند. اگر بخواهیم در 50 فریم زمانی معادله بالا را در متلب حل کنیم کافی است مانند سابق دیفرانسیل های زمانی کوچکی گرفته و معادله را به صورت زیر حل کنیم. در این جا u ورودی به صورت یک ضربه است که در زمان صفر مقدار 1 دارد و پس از آن صفر است.
که خروجی آن به صورت زیر خواهد بود:
Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);
A = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B = [1-cos(dt);sin(dt)];
C = [-1 0];
D = 1;
u = [1 zeros(1,N-1)];
x = [0;0];
for k = 1:N
y(k) = C*x + D*u(k);
x = A*x + B*u(k);
end
stem(t,y,'v','filled')
xlabel('t')
که خروجی آن به صورت زیر خواهد بود:
تبدیل لاپلاس روشی جالب برای ساده سازی مساله است به این صورت که شما معادلات دیفرانسیل مساله را به یک تابع به نام تابع تبدیل، تغییر می دهید و در آن ورودی شما(یک پالس به جسمِ متصل به فنر) یک خروجی (به صورت حرکت جسمِ متصل به فنر) خواهد داشت. در واقع هر سیستم دینامیکی (با شرایط LTI) را می توان به صورت زیر نشان داد:
در نرم افزار متلب به صورت پیش فرض تابع ss2tf قرار داده شده است که ss(State space) را به tf(transfer function) تبدیل می کند. فقط کافی است شما ماتریس ها را به عنوان ورودی به آن بدهید. پس از آن ورودی(ضربه وارد به جسم) را با فیلتری با مشخصات تعیین شده از سوی تابع ss2tf به آن می دهید تا تمام خروجی را برای شما تولید کند:
نتیجه کاملا مشابه با نمودار قبلی خواهد بود. اما این نحوه نمایش همانطور که گفتیم مزایای زیادی دارد که در پست های بعدی به آن میپردازیم.
@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #LTI_Systems, #Laplace_Transform, #ss2tf
نویسنده:(#A_2)
[b,a] = ss2tf(A,B,C,D);
yt = filter(b,a,u);
stem(t,yt,'d','filled')
xlabel('t')
نتیجه کاملا مشابه با نمودار قبلی خواهد بود. اما این نحوه نمایش همانطور که گفتیم مزایای زیادی دارد که در پست های بعدی به آن میپردازیم.
@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #LTI_Systems, #Laplace_Transform, #ss2tf
نویسنده:(#A_2)
🔵ترکیب تبدیلات لاپلاس🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
همانطور که در بخش قبل دیدیم تابع های تبدیل مانند تبدیل لاپلاس بازنمایی جدیدی از سیستم در فضای جدیدی ارائه می دهند. این بازنمایی دارای مزیت های زیادی است. از آن جمله که می توان تمام سیستم را به صورت یک تبدیل کننده G دید که ورودی می گیرد و خروجی مشخصی تولید می کند. این طرز نمایش همچنین کمک می کند که سیستم های پیچیده را به اجزای کوچک تر بشکنیم و هر قسمت را جداگانه تحلیل و در نهایت با عملیات بسیار ساده آن ها را کنار هم قرار دهیم. حالت های زیرا را در نظر بگیرید
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
همانطور که در بخش قبل دیدیم تابع های تبدیل مانند تبدیل لاپلاس بازنمایی جدیدی از سیستم در فضای جدیدی ارائه می دهند. این بازنمایی دارای مزیت های زیادی است. از آن جمله که می توان تمام سیستم را به صورت یک تبدیل کننده G دید که ورودی می گیرد و خروجی مشخصی تولید می کند. این طرز نمایش همچنین کمک می کند که سیستم های پیچیده را به اجزای کوچک تر بشکنیم و هر قسمت را جداگانه تحلیل و در نهایت با عملیات بسیار ساده آن ها را کنار هم قرار دهیم. حالت های زیرا را در نظر بگیرید
برای حالت نخست که دو سیستم به صورت سری پشت سر هم قرار گرفته اند کافی است شما تابع انتقال آن ها را در هم ضرب کنید. برای حالت موازی کافی است تابع انتقال ها را با هم جمع کنید و برای فیدبک می توان به صورت زیر عمل کرد:
البته خود متلب برای این کار توابع آماده ای هم دارد که در شکل اول دیدیم.
وقتی توابع G را داشته باشید به سادگی با فراخوانی صورت و مخرج آن می توانید با استفاده از دستور filter خروجی نهایی را بگیرید.
در قسمت بعد به جالب ترین نقطه سیستم های دینامیکی یعنی مساله غیر خطی بودن میرسیم.
@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #LTI_Systems, #Laplace_Transform, #ss2tf
Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);
A1 = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B1 = [1-cos(dt);sin(dt)];
C1 = [-1 0];
D1 = 1;
[b1,a1] = ss2tf(A1,B1,C1,D1);
G1 = tf(b1,a1);
A2 = [sin(dt) cos(dt);-cos(dt) sin(dt)];
B2 = [sin(dt);1-cos(dt)];
C2 = [-1 1];
D2 = 0;
[b2,a2] = ss2tf(A2,B2,C2,D2);
G2 = tf(b2,a2);
G_Serie = G1*G2
G_Parallel = G1+G2
G_Feedback = G1*inv(1+G1*G2)
البته خود متلب برای این کار توابع آماده ای هم دارد که در شکل اول دیدیم.
وقتی توابع G را داشته باشید به سادگی با فراخوانی صورت و مخرج آن می توانید با استفاده از دستور filter خروجی نهایی را بگیرید.
Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);
A1 = [cos(dt) sin(dt);-sin(dt) cos(dt)];
B1 = [1-cos(dt);sin(dt)];
C1 = [-1 0];
D1 = 1;
[b1,a1] = ss2tf(A1,B1,C1,D1);
G1 = tf(b1,a1);
A2 = [sin(dt) cos(dt);-cos(dt) sin(dt)];
B2 = [sin(dt);1-cos(dt)];
C2 = [-1 1];
D2 = 0;
[b2,a2] = ss2tf(A2,B2,C2,D2);
G2 = tf(b2,a2);
G_Serie = G1*G2
u = [1 zeros(1,N-1)];
b = G_Serie.num{1};
a = G_Serie.den{1};
yt = filter(b,a,u);
stem(t,yt,'d','filled')
xlabel('t')
در قسمت بعد به جالب ترین نقطه سیستم های دینامیکی یعنی مساله غیر خطی بودن میرسیم.
@MatlabTips
#For_intermediate, #For_Advanced
#Dynamic_Systems, #LTI_Systems, #Laplace_Transform, #ss2tf
🔵رسم سه بعدی🔵
سطح پیچیدگی: 🌕🌓🌑🌑🌑
برای: مقدماتی
پیشنیاز:(آشنایی مقدماتی با کدنویسی)
دستور surface یک تابع سطح پایین برای ایجاد آبجکت های گرافیکی است. srufaceها در حقیقت plot ماتریسی از داده ها هستند که اندیس این ماتریس ها مبین x و y و مقادیر درون ماتریس ها مبین z هستند.
✔️مثال:
می خواهیم تابع زیر را در متلب با استفاده از دستور surface در یک بازه مشخص رسم کنیم.
از دستور meshgrid برای تعریف (ساخت یک شبکه) X و Y استفاده می کنیم. در مرحله بعد ماتریس Z را تعریف خواهیم کرد و با استفاده از surface آن را رسم می کنیم.
دستور surface مقدار Zها را متناظر با Xها و Yها رسم می کند. می توانید متغیر چهارمی نیز برای رنگ آمیزی وارد دستور surface کنید که در غیر اینصورت surface از مقادیر Z برای رنگ استفاده میکند که طبیعتا نوع رنگ با تغییر ارتفاع تغییر می یابد.
در پست بعدی نحوه پهن کردن یک تصویر بر روی یک surface را مطرح خواهیم کرد.
@MatlabTips
#For_intermediate
#Surface , #Plot
نویسنده:(#A_1)
سطح پیچیدگی: 🌕🌓🌑🌑🌑
برای: مقدماتی
پیشنیاز:(آشنایی مقدماتی با کدنویسی)
دستور surface یک تابع سطح پایین برای ایجاد آبجکت های گرافیکی است. srufaceها در حقیقت plot ماتریسی از داده ها هستند که اندیس این ماتریس ها مبین x و y و مقادیر درون ماتریس ها مبین z هستند.
✔️مثال:
می خواهیم تابع زیر را در متلب با استفاده از دستور surface در یک بازه مشخص رسم کنیم.
z = x * e^(-x^2-y^2)
-2<x<2, -2<y<2
از دستور meshgrid برای تعریف (ساخت یک شبکه) X و Y استفاده می کنیم. در مرحله بعد ماتریس Z را تعریف خواهیم کرد و با استفاده از surface آن را رسم می کنیم.
[X,Y] = meshgrid(-2:0.2:2,-2:0.2:2);
Z = X.*exp(-X.^2 - Y.^2);
figure
surface(X,Y,Z)
view(3)
دستور surface مقدار Zها را متناظر با Xها و Yها رسم می کند. می توانید متغیر چهارمی نیز برای رنگ آمیزی وارد دستور surface کنید که در غیر اینصورت surface از مقادیر Z برای رنگ استفاده میکند که طبیعتا نوع رنگ با تغییر ارتفاع تغییر می یابد.
در پست بعدی نحوه پهن کردن یک تصویر بر روی یک surface را مطرح خواهیم کرد.
@MatlabTips
#For_intermediate
#Surface , #Plot
نویسنده:(#A_1)
🔵حساسیت به شرایط اولیه🔵
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
“Ideas that require people to reorganize their picture of the world provoke hostility.”
― James Gleick, Chaos: Making a New Science
محمد بو عزیزی یک دستفروش ساده بود که مانند بقیه دستفروش ها هر روز در کنار خیابان بساط می کرد تا با سختی لقمه نانی به دست آورد. اما روز 17 دسامبر سال 2010 گویا یک روز ساده دیگر نبود چراکه بعد از چند ساعت بساط کردن یک مامور شهرداری بساطش را توقیف و او را تحقیر کرد. بوعزیزی برای اعتراض به این حرکت خود را در جلوی ساختمان شهرداری به آتش کشاند! این خود سوزی اعتراضات دیگر مردم را هم بر انگیخت تا جایی که آغازگر انقلاب تونس شد و سرانجام حکومت 23 ساله بن علی را ساقط کرد. اعتراضات به لیبی، اردن، سوریه، یمن، مصر، بحرین، عربستان، عمان و بسیاری از کشورهای عربی دیگر هم رسید و تعدادی از حکومت ها را ساقط کرد یا به جنگ داخلی، کشتار، سرکوب، گسترش گروههای تروریستی، آوارگی و مهاجرت میلیون ها نفر انجامید. اثرات آنچه امروز به نام "بهار عربی" میشناسیم هنوز هم قابل مشاهده است.
جدای از تحلیل های سیاسی بسیاری که در این مورد شده است، ساده ترین سوالی که پیش می آید این است که اگر آن روز بوعزیزی مریض میشد و به سر کارش نمیرفت یا مامور شهرداری به طور اتفاقی از آنجا رد نمیشد یا بوعزیزی خود را آتش نمی زد و به اعتراض ساده ای با چند فحاشی ماجرا را خاتمه می داد آیا تمام این اتفاقات می افتاد یا خیر؟ اگر "حساس بودن به شرایط اولیه" اینقدر مهم باشد کار جامعه شناسی دشوار می شود بنابراین جامعه شناسِ (فرضیِ) ما ممکن است پاسخ دهد: جوامع عربی مستعد این حرکت بودند: چه بوعزیزی این کار را میکرد یا نمیکرد این اتفاق رخ میداد بوعزیزی در حکم یک کبریت در انبار باروت بود" صرفنظر از اینکه این تمثیل برای شما چقدر متقاعد کننده است، لورنز نشان داد در معادلات ساده هم ممکن است تغییرات کوچک در شرایط اولیه منجر به تغییرات شدید در آینده سیستم شود. به این "واقعیت" اثر پروانه ای می گویند.
لورنز کشف کرد که دستگاه معادلات دیفرانسیل خطی زیر به شدت به شرایط اولیه حساس هستند:
سطح پیچیدگی:🌕🌕🌕🌕🌑
پیشنیاز:(کد نویسی متوسط و پیشرفته)
برای:(متوسط و پیشرفته)
“Ideas that require people to reorganize their picture of the world provoke hostility.”
― James Gleick, Chaos: Making a New Science
محمد بو عزیزی یک دستفروش ساده بود که مانند بقیه دستفروش ها هر روز در کنار خیابان بساط می کرد تا با سختی لقمه نانی به دست آورد. اما روز 17 دسامبر سال 2010 گویا یک روز ساده دیگر نبود چراکه بعد از چند ساعت بساط کردن یک مامور شهرداری بساطش را توقیف و او را تحقیر کرد. بوعزیزی برای اعتراض به این حرکت خود را در جلوی ساختمان شهرداری به آتش کشاند! این خود سوزی اعتراضات دیگر مردم را هم بر انگیخت تا جایی که آغازگر انقلاب تونس شد و سرانجام حکومت 23 ساله بن علی را ساقط کرد. اعتراضات به لیبی، اردن، سوریه، یمن، مصر، بحرین، عربستان، عمان و بسیاری از کشورهای عربی دیگر هم رسید و تعدادی از حکومت ها را ساقط کرد یا به جنگ داخلی، کشتار، سرکوب، گسترش گروههای تروریستی، آوارگی و مهاجرت میلیون ها نفر انجامید. اثرات آنچه امروز به نام "بهار عربی" میشناسیم هنوز هم قابل مشاهده است.
جدای از تحلیل های سیاسی بسیاری که در این مورد شده است، ساده ترین سوالی که پیش می آید این است که اگر آن روز بوعزیزی مریض میشد و به سر کارش نمیرفت یا مامور شهرداری به طور اتفاقی از آنجا رد نمیشد یا بوعزیزی خود را آتش نمی زد و به اعتراض ساده ای با چند فحاشی ماجرا را خاتمه می داد آیا تمام این اتفاقات می افتاد یا خیر؟ اگر "حساس بودن به شرایط اولیه" اینقدر مهم باشد کار جامعه شناسی دشوار می شود بنابراین جامعه شناسِ (فرضیِ) ما ممکن است پاسخ دهد: جوامع عربی مستعد این حرکت بودند: چه بوعزیزی این کار را میکرد یا نمیکرد این اتفاق رخ میداد بوعزیزی در حکم یک کبریت در انبار باروت بود" صرفنظر از اینکه این تمثیل برای شما چقدر متقاعد کننده است، لورنز نشان داد در معادلات ساده هم ممکن است تغییرات کوچک در شرایط اولیه منجر به تغییرات شدید در آینده سیستم شود. به این "واقعیت" اثر پروانه ای می گویند.
لورنز کشف کرد که دستگاه معادلات دیفرانسیل خطی زیر به شدت به شرایط اولیه حساس هستند: