ar
Feedback
MatlabTips

MatlabTips

الذهاب إلى القناة على Telegram

آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته پاسخ به سوالات تخصصی: @roholazandie

إظهار المزيد
977
المشتركون
لا توجد بيانات24 ساعات
لا توجد بيانات7 أيام
لا توجد بيانات30 أيام
أرشيف المشاركات
همانطور که می بینید، ابتدا دو متغیر تعریف کرده ایم که اولی خود x و دیگری مشتق آن است. با مشتق گرفتن مجدد از این دو متغیر می توان معادله اصلی را شبیه سازی کرد. با این کلک می توان ode45 را برای حل معادلات با مرتبه بالاتر بکار گرفت. برنامه زیر کل معادله را حل می کند و در بازه 0 تا 3 حل میکند.
function second_oder_ode
 
% SOLVE  d2x/dt2+5 dx/dt - 4 x = sin(10 t)
% initial conditions: x(0) = 0, x'(0)=0
 
t=0:0.001:3;   % time scale
 
initial_x    = 0;
initial_dxdt = 0;
 
[t,x]=ode45( @func, t, [initial_x initial_dxdt] );
 
plot(t,x(:,1));
xlabel('t'); ylabel('x');
 
function dxdt=func(t,x)
    dxdt_1 = x(2);
    dxdt_2 = -5*x(2) + 4*x(1) + sin(10*t);
 
    dxdt=[dxdt_1; dxdt_2];
end
end
نکته ی مهمی که باید به آن توجه کنید این است که وقتی معادله ای با مرتبه بالاتر حل می کنید شرایط اولیه برای مشتق های بالاتر(تا یکی قبل از بالاترین درجه) را باید بدانید. نمودار زیر نشان دهنده جواب معادله دیفرانسیل بالا است

photo content

photo content

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

photo content

🔵حل تقریبی معادلات دیفرانسیل مرتبه دوم🔵 سطح پیچیدگی:🌕🌕🌕🌕🌑 پیش‌نیاز:(کد نویسی متوسط) برای:(متوسط و پیشرفته) همانطور که گفتیم در این قسمت به حل معادلات دیفرانسیل مرتبه دوم می پردازیم. برای حل معادله دیفرانسیل مرتبه دوم زیر:

در قسمت های بعدی روش هایی برای تبدیل معادلات با درجه بالاتر به درجه پایین و حل در متلب بررسی می شوند. @MatlabTips #For_intermediate, #For_advance #Differential_equations, #Dynamical_systems, #ode45, #ode23 نویسنده:(#A_2)

photo content

پیشنهاد می کنیم همین کد را با ode45 هم اجرا کرده و نتیجه را مقایسه کنید. تفاوت در اینجاست که که روش های حل عددی در ode23 و ode45 با هم تفاوت دارند ولی نتایج به هم نزدیک اند. علت قرار دادن حل کننده های متفاوت در متلب این است که گاهی اوقات با توجه به شرایط مساله یک حل کننده بهتر از دیگری است. پیشنهاد می شود(بر اساس تجارب mathwork) از ode45 به عنوان اولین حل کننده استفاده کنید و در صورت کند بودن یا واگرا شدن به دنبال دیگر روش ها بروید:

photo content

برای حل این معادله ابتدا تابع سمت راست معادله اول را به صورت یک تابع متلب در آورده و ذخیره می کنیم:
function f=func1(t,y)
f=-t*y/sqrt(2-y^2);
 
حالا می توانیم از حل کننده(solver) های ode23 یا ode45 برای حل آن استفاده کنیم. برای اینکار کافی است نام تابع را به عنوان اولین آرگومان به حل کننده پاس دهیم و پس از آن بازه مورد نظر و نیز شرط اولیه را اضافه کنیم:
[tv1 f1]=ode23('func1',[0 5],1);
plot(tv1,f1,'-.')
title('y''=-ty/sqrt(2-y^2), y(0)=1, t in [0, 5]')
grid
axis([0 5 0 1]) 
نتیجه به صورت زیر می شود:

photo content

🔵حل تقریبی معادلات دیفرانسیل🔵 سطح پیچیدگی:🌕🌕🌕🌕🌑 پیش‌نیاز:(کد نویسی متوسط) برای:(متوسط و پیشرفته) متلب مجموعه ای کامل برای حل دسته ی وسیعی از معادلات دیفرانسیل دارد. در اینجا باز هم تمرکز خود را بر روی معادلات دیفرانسیل خطی می گذاریم. در حل عددی همواره معادله را در یک بازه حل می کنیم و شرایط اولیه را هم مشخص می کنیم. به طور مثال معادله دیفرانسیل زیر را در نظر بگیرید:

SUNFLOWER.gif3.02 KB

و زاویه هر دانه نسبت به مبدا بر حسب رادیان pi*dn/180 است که d مقدار دیورژانس بین هر دو دانه متوالی بر حسب درجه است( مثلا دانه n و n+1). یک گل آفتابگردان ایده آل با d برابر 137.51 درجه ایجاد میشود(واقعا حیرت انگیز است که با مقدار 137 درجه الگو بکلی بهم میریزد). در این پست میخواهم یک برنامه برای رسم این الگو بنویسم. من این برنامه رو بگونه ای مینویسم که پترن برای محوده وسیعی از مقدار دیورژانس ها تغییر کند و مشاهده کنید که تغییرات کوچک در این دیورژانس چقدر الگو را تغییر میدهد.
n=0:1000;

for d=135:0.1:138
    theta = pi*d*n/180;
    r = sqrt(n);
    h = polar(theta,r,'o'); 
    set(h,'color','red');
    pause(0.05)        
    cla    
end
خروجی gif این برنامه در زیر آورده شده است. @MatlabTips #For_beginner, #For_intermediate #Sun_flower, #Polar نویسنده:(#A_1)

photo content

🔵گل آفتابگردان🔵 سطح پیچیدگی: 🌕🌓🌑🌑🌑 پیش نیاز: کدنویسی مقدماتی برای: (مبتدیان و مقدماتی) هر موقع در کلاس به مبحث نمودارهای قطبی میرسم سعی میکنم بچه ها را با یک مثال جذاب شگفت زده کنم. به نظرم در این زمینه گل آفتابگردان بهترین مثال است. آرایش دانه ها در گل آفتابگردان از یک الگوی ریاضی مشخص پیروی می کنند. nامین دانه در مکان r قرار دارد که رابطه آن بصورت زیر است:

در اینجا سمت راست معادله دوم به صورت Sin(x1) است که دیگر خطی نیست. حل این نوع معادلات در حالت کلی بسیار دشوار هستند و در بسیاری از مواقع راه حل تحلیلی ندارند. در این موارد مجبوریم از راه حل های عددی استفاده کنیم. در پست های بعدی بیشتر در این مورد بحث می کنیم. @MatlabTips #For_intermediate, #For_advance, #Dynamical_systems, #Phase_space نویسنده: (A-2)

photo content

در این جا با نرم افزار متلب سعی می کنیم معادله دیفرانسیل زیر را با استفاده از متلب حل کنیم:
syms f(t) g(t)
eqn1 = diff(f) == 3*f + 4*g;
eqn2 = diff(g) == -4*f + 3*g;
S = dsolve(eqn1, eqn2)
fSol(t) = S.f
gSol(t) = S.g
که در آن دستور syms تعریف کننده متغیر است.نتیجه اعمال solve یک سلول است که جواب های f و g در آن قراردارند. این توابع بدست آمده در معادلات اولیه صدق می کنند. به این نحوه حل، حل تحلیلی می گویند. زیرا ما توانستیم نتایج را به صورت ترکیبی صریح از توابع مقدماتی(مانند مثلثاتی، نمایی و..) بدست آوریم. سیستم های به صورت بالا را خطی می گویند. زیرا تمامی معادلات سمت راست fi ها به صورت خطی از x1 تا xn هستند. معادلات غیر خطی زیادی هم وجود دارد. به طور مثال معادله آونگ به صورت زیر است:

MatlabTips - إحصائيات وتحليلات قناة تيليجرام @matlabtips