تاريخ : دوشنبه چهارم اردیبهشت ۱۳۹۱
ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

در این بخش با توابع منطقی any، all و find آشنا می شویم.

تابع any معين مي كند كه آيا مولفه غير صفر در يك بردار وجود دارد يا خير.

» v=[-2 1 3 5];

» any(v<1)

ans =

1

» any(v>6)

ans =

0

تابع all معين مي كند كه آيا همه مقايسه ها درست هستند يا خير.

» all(v<1)

ans =

0

» all(v<6)

ans =

1

توابع فوق را مي توانيد براي ماتريسها نيز بكار ببريد. در اين صورت خروجي اين توابع عبارت است

از حاصل مقايسه هاي گفته شده براي هر ستون ماتريس.

تابع  find مكان مولفه هاي غير صفر را در يك آرايه نشان مي دهد.

» find(v>3)

ans =

4


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

يك چند جمله اي در  MATLAB به صورت يك بردار سطري كه مولفه هاي آن ضرايب چندجمله اي به ترتيب نزولي هستند معرفي مي شود. براي مثال چند جمله ای p(x)= در MATLAB به شكل زير معرفي مي گردد:

» p=[1     0        -2       5];

ريشه هاي يك چند جمله اي را مي توانيد به صورت زير بدست آورد:

» r=roots(p)

r =

-2.0946

1.0473 + 1.1359i

1.0473 - 1.1359i

با دانستن ريشه هاي معادله مي توانيد ضرايب چند جمله اي مربوطه را محاسبه نمائيد:

» p2=poly(r)

p2 =

1.0000          0.0000          -2.0000                  5.0000


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰
راي ضرب و تقسيم چند جمله ايها مي توانيد توابع deconv و conv را بكار ببريد. چند جمله ايهاي

و   را در نظر بگيريد. حاصلضرب اين دو چند جمله اي به طريق زير بدست مي آيد:

» a=[1  1  1]; b=[1  -1];

» c=conv(a,b)

c =

1   0   0   -1

و تقسيم a/b نيز به صورت زير قابل محاسبه است:

» [q,r]=deconv(a,b)

q =

1  2

r =

0  0  3


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

مشتق چند جمله اي را مي توانيد با بكار بردن تابع  polyder محاسبه كنيد.

» c=polyder(a)

c =

2        1

مشتق حاصلضرب دو چند جمله اي a*b را مي توانيد به صورت زير بدست آوريد:

» d=polyder(a,b)

d =

3        0       0

در صورتي كه تعداد آرگومانهاي خروجي تابع polyder برابر ٢ باشد، تابع مشتق تقسيم دو چند جمله اي جمله اي را تعيين مي نمايد:

» [q,d]=polyder(a,b)

q =

1        -2      -2

d =

1        -2       1


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

تابع  polyval مقدار چند جمله اي را در هر نقطه محاسبه مي نمايد. براي مثال مقدار p در نقطه 5 به طريق زير محاسبه مي گردد:

» polyval(p,5)

ans =

120


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

در صورتي كه بخواهيد در مورد دستور و يا تابع خاصي اطلاعاتي به دست بياوريد مي توانيد در پنجره MATLAB كلمه help و پس از آن نام دستور يا تابع مورد نظر را بنویسید:


» help magic
MAGIC Magic square.
MAGIC(N) is an N-by-N matrix constructed from the integers
1 through N^2 with equal row, column, and diagonal sums.
Produces valid magic squares for N = 1,3,4,5,...

روش ديگر استفاده از help بكار بردن دستور helpwin است.  اين دستور پنجره كمكی را باز مي كند و اجازه مي دهد تا توضيحات مورد نياز را در پنجره جداگانه اي بدست آوريد. توضيحات داده شده در اين پنجره همانهايي هستند كه دستور help ارائه مي نمايد.
لازم به توضيح است كه نام دستورات و توابع در help با حروف بزرگ آورده مي شوند در حاليكه MATLAB نسبت به بزرگ و كوچك بودن حروف حساس است و هنگام استفاده از اين دستورات و  توابع بايد آنها را با حروف كوچك بكار برد.


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰
ستورهايecho و keyboard بكار بردن دستور echo باعث مي گردد كه هر سطر از برنامه اصلي قبل از آنكه اجرا گردد روي صفحه نمايش نشان داده شود. بنابراين ترتيب اجراي دستورات مشخص مي شود. اين دستور بويژه هنگامي كه در برنامه حلقه ها و دستورات شرطي متعدد وجود دارد مي تواند مفيد واقع شود. در صورتي كه بخواهيد اين دستور در هنگام اجراي تابع خاصي بكار بيفتد بايد نام تابع مورد نظر را بعد از echo بياوريد. به هر حال، اين دستور در بسياري از موارد كمك چنداني به پيدا كردن خطاي برنامه نمي كند زيرا در بيشتر موارد MATLAB سطري كه برنامه در آن متوقف شده است را مشخص مي نمايد. در صورت استفاده از دستور keyboard در ميان برنامه، اجراي برنامه هنگامي كه به آن دستور مي رسد موقتا" متوقف مي گردد و به شما اجازه مي دهد كه عمليات مورد نظرتان را انجام دهيد. در چنين حالتي علامت K » را روي صفحه نمايشگر مشاهده خواهيد نمود. برنامه پس از آنكه دستور return را وارد نموديد از جايي كه متوقف شده بود، ادامه مي يابد. اين دستور بويژه در مواقعي بكار مي رود كه برنامه بواسطه اندازه و يا مقدار يك متغير پيغام خطا مي دهد. شما با استفاده از دستور keyboard امكان مي يابيد كه اندازه و يا مقدار متغير مورد سئوال را ديده و يا آن را تغيير دهيد و پس از استفاده از دستور return اثر اين تغيير را در اجراي ادامه برنامه مشاهده نمائيد.


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

هدف : رسم تابع

z=f(x,y)

نکته مهم: اگر مثلا x=1:3 و y=1:2 ، z به ازای همه (x,y) ها مقدار باید داشته باشد. (1,1)، (2,1) ، (3,1) و....

دستور meshgrid برای ساخت این نقاط به کار می رود:

[x ,y]=meshgrid(1:3,1:2);

تابع plot3 برای رسم z به کار می رود:

[x,y]=meshgrid(-3:0.01:3,-3:0.01,3);

z=exp(-x.^2-y.^2);

plot3(x,y,z);

دستورات فوق،

نمودار z را رسم می کند. این تابع منحنی را به صورت یک سری خطوط رسم می کند.

 

 

 

دستورات mesh و surf

mesh: منحنی را به صورت شبکه شبکه با خطوط رنگارنگ رسم می کند.

surf: منحنی را به صورت شبکه شبکه با خطوط رنگارنگ رسم می کند و به علاوه داخل شبکه ها را هم رنگ می کند.

 


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

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

معمولاً خطوط میدان الکتریکی در اطراف هر بار الکتریکی با استفاده از مفهوم خطوط نیرو نشان داده می‌شود. به عنوان مثال اگر یک بار الکتریکی نقطه‌ای مثبت را در نقطه‌ای از فضا در نظر بگیریم، در این صورت خطوطی از این نقطه به طرف خارج رسم می‌شوند. این خطوط بیانگر جهت میدان الکتریکی هستند. همچنین با استفاده از چگالی خطوط میدان الکتریکی می‌توان به شدت میدان الکتریکی نیز پی برد.

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

برای بدست آوردن میدان الکتریکی ، طبق تعریف ، کافی هست که گرادیان بگیریم .

electrical Potential and electrical distribution visualization of charges with MATLAB

سورس برنامه:

 

close all
%@ 2011 www.mathworks.ir
clear
clc
x=linspace(-4,4,200);
y=x;
[X Y]=meshgrid(x,y);
V=1./sqrt((X-1).^2+(Y).^2+eps)-1./sqrt((X+1).^2+Y.^2+eps)
[Ex Ey]=gradient(V);
[C k]=contourf(X,Y,V,[-2:0.1:2]);
set(k,'LevelStep',30)
% hold on
% h=quiver(X,Y,Ex,Ey)
% set(h,'MaxHeadSize',0.1)

figure

[C2 h]=contour(X,Y,sqrt(Ex.^2+Ey.^2),[ 0:0.01:0.5 ])

با اجرای برنامه فوق پتانسیل و اندازه ی میدان کشیده می شوند . 
در داخل برنامه ، با برداشتن علامت کامنت و اجرای دستور quiver، می تونید فلش هایی رو نمایش دهید که نحوه ی تغییر میدان را نیز نشان بدهند .

با بزرگ نمایی تصویر به شکل زیر خواهید رسید.

close all
%@ 2011 www.mathworks.ir
clear
clc
x=linspace(-4,4,200);
y=x;
[X Y]=meshgrid(x,y);
V=1./sqrt((X-1).^2+(Y).^2+eps)-1./sqrt((X+1).^2+Y.^2+eps)
[Ex Ey]=gradient(V);
[C k]=contourf(X,Y,V,[-2:0.1:2]);
set(k,'LevelStep',30)
% hold on
% h=quiver(X,Y,Ex,Ey)
% set(h,'MaxHeadSize',0.1)

figure

[C2 h]=contour(X,Y,sqrt(Ex.^2+Ey.^2),[ 0:0.01:0.5 ])


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰
در حل مسائل  گاهی  به دستگاههاي معادلات ديفرانسيل باآغازينه‏اي مي‏رسيم كه بايد جواب اونها رو با استفاده از يك روش عددي پيدا كنيم. در روش عددي‏اي كه براي اين كار استفاده مي‏كنيم، براي به دست آوردن مقادير مورد نظر در يك گام، از اطلاعات يك يا چند گام قبلي استفاده مي‏كنيم. اگر براي به دست آوردن مقادير مورد نظر پيش‏گفته، از روشي استفاده كنيم كه به حل معاله‏هاي جبري (معمولاً ناخطي) نياز نباشه، روشي كه به كار برديم يك روش صريح يا explicit هست. اما اگر از روشي استفاده كنيم كه به حل معاله‏هاي جبري نياز باشه، به روشي كه به كار برديم يك روش ضمني يا implicit مي‏گن.
روشهاي صريح ساده‏ترن، اما براي اينكه از نظر عددي پايدار باشند و به جواب درست همگرا شن، بايد كنترلشون كرد. اما روشهاي ضمني هميشه پايدار هستند و به جواب درست همگرا مي‏شن.
نامهاي ديگر روشهاي صريح: باز يا open، پيشگو يا predictor
نامهاي ديگر روشهاي ضمني: بسته يا closed، اصلاحگر يا corrector

بعضي از روشهاي صريح معروف: روش اولر (كاسته‏هاي پيشرو)، روشهاي رانگ ـ كوتا، روش كاسته‏هاي ميانه‏اي، روشهاي آدامز ـ بشفورث، ...
بعضي از روشهاي ضمني معروف: روش اولر پسرو، روش نيومارك، روشهاي آدامز ـ مولتون، كاسته‏هاي پسرو (روشهاي Gear، يا BDF)، روش NDF، ..


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰
عادلات دیفرانسیل معمولی – مسایل مقدار اولیه

Ordinary Differential Equation - initial value problems

(IVPs)

با سلام خدمت تمامی دوستان  بخصوص دانشجویان فیزیک. قصد دارم بتدریج به یکسری از مسایل برنامه نویسی عمومی در زمینه فیزیک که غالبا با آن سرو کار داریم بپردازم. اولین گام ( به شرطی که با مقدمات برنامه نویسی در Matlab خصوصا کار با توابع، ماتریسها آشنا باشید) می­تواند حل معادلات دیفرانسیل معمولی باشد.

معادلات دیفرانسیل معمولی به آندسته از معادلات دیفرانسیل اطلاق می شود که تمامی متغیرهای وابسته ( بعنوان مثال x، y و z ) تنها تابعی از یک متغیر مستقل (برای مثال t) می باشند. مثال آشنا در این مورد می­تواند معادله نوسانگر هارمونیک باشد که در آن مکان نوسانگر تنها تابعی از زمان است. در مقابل معادله دیفرانسیل معمولی معادلات دیفرانسیل جزیی قرار می گیرند که نمونه بسیار آشنای آن معادله شرودینگر است که در آن تابع موج (متغیر وابسته) تابعی از مختصات مکانی و زمان (یعنی   متغیرهای مستقل ) می باشد.

ابتدا به حل مسایل مقدار اولیه (IVP) با معرفی سه روش اویلر (Euler’s method)، رانگ کوتا (Runge–Kutta method) و تابع آماده در متلب بانام ode45 می پردازیم.

1-   روش اویلر

این ساده ترین روش است. با استفاده از تقریب مشتق عددی پیشرو الگوریتم تکرار بسادگی بدست می آید :

که در آن h طول گام است. کافست با توجه به معادله دیفرانسیل تابع f(x,t) مشخص گردد و در رابطه تکرار بالا جایگذاری شود. مثال ساده زیر را در نظر بگیرید.

dy/dt+5y=6          ,   y(t=0)=2

با توجه به معادله بالا خواهیم داشت :                   f(x,t)=dy/dt=6-5y

بنابراین رابطه تکرار بصورت زیر خواهد بود،

 

نهایتا برنامه کوتاه زیر را می­توان نوشت :

clc,clear all

h=.01;

t0=0;

tf=2;

t=t0:h:tf;

y(1)=2;

N=length(t);

for i=1:N-1

y(i+1)=y(i)+h*(6-5*y(i));

end

plot(t,y)

 

 

باید  توجه داشته باشیم که هر سه روش بکار گرفته در حل مسایل

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

 

نوسانگر هارمونک ساده

با این توضیحات می­توانیم به حل یک مسئله استاندارد یعنی معادله حرکت نوسانگر هارمونیک بپردازیم. جسمی با جرم معین متصل به فنر تحت تاثیر نیروی بازگردانده در یک بعد حرکت نوسانی انجام می دهد با صرفنظر از نیروهای اتلافی (این مورد در روش رانگ کوتا بررسی می شود) معادله حرکت بشکل زیر است :

با تغییر متغیر v=dx/dt  جفت روابط زیر خواهیم داشت،

و بنابراین روابط تکرار مطابق مثال قبلی بدست می آیند،

 

اگر فرض کنیم که نوسانگر در لحظه t=0 بیشترین فاصله از نقطه تعادل را دارد می توانیم شرایط اولیه زیر را در نظر بگیریم،

 

برنامه زیر (Oscilator1) معادله نوسانگر هارمونیک ساده را به روش اویلر حل می کند. نمودارها x و v برحسب زمان رسم می­شوند و در پایان حرکت واقعی نوسانگر نیز بصورت انیمیشن نمایش داده می­شود.

 

function Oscilator1

% simple harmonic Oscilator- Euler's method

% by saeed babanezhad - solid state physics

close all

k=1;

m=1;

w=sqrt(k/m);

h=.1;        % time step

t0=0;         % initial time

tf=20;        % final time

t=t0:h:tf;    % time interval

N=length(t);

x=zeros(1,N); % specify size of x matrix

v=zeros(1,N); % specify size of v matrix

x(1)=1;       % initial condition for position

v(1)=0;       % initial condition for speed

for i=1:N-1

x(i+1)=x(i)+h*v(i);

v(i+1)=v(i)-h*w^2*x(i);

end

figure(1)

subplot(3,1,1)

plot(t,x)

ylabel('x')

subplot(3,1,2)

plot(t,v)

ylabel('y')

% animation

subplot(3,1,3)

% difine spring

spring=line('lineStyle','none','Marker','d',...

'MarkerSize',15,'Color','b','Xdata',[],'ydata',[]);

% difine body

body=line('Marker','s','MarkerSize',30,...

'MarkerFaceColor','r','xdata',[],'ydata',[]);

xlim([min(x) max(x)])

for i=1:N

set(body,'XData',x(i),'YData',0)

set(spring,'XData',linspace(min(x),x(i),20)...

,'YData',zeros(1,20))

drawnow

end

 

 

در مقابل سادگی روش اویلر خطای  آن نسبت به سایر روشها بیشتر است ( از مرتبه 2). در بخش بعدی می خواهم به روش رانگ کوتا ی مرتبه چهار بپردازم (خطا از مرتبه 4) که بسیار دقیقتر از روش اویلر است.


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰
متلب قابلیت های گرافیکی بالایی دارد که امکانات فراوانی از جمله پردازش تصویر و طراحی و تحلیل گرافیکی را به سادگی در اختیارتان قرار می دهد. در برنامه ی امروز به صورت دستی و بدون استفاده از دستورات اختصاصی متلب انیمیشنی از یک توپ که در مسیر سینوسی حرکت می کند برنامه نویسی می کنیم.

برنامه از فرمان fill برای ترسیم توپی به رنگ قرمز استفاده می کند و با تنظیم محدوده ی رسم نمودار با کمک فرمان axis صحنه ی نمایش همیشه ثابت می ماند .

 

اما مسئله سرعت بالای ترسیم گرافیکی در متلب است که باعث می شود فیلم هنوز شروع نشده به پایان برسد و شما متوجه آنچه روی داده نشوید . برای غلبه بر این مشکل از فرمان pause استفاده شده است که به اندازه ی عددی که در داخل آن مشخص می کنید اجرای برنامه های متلب را متوقف می کند.

استفاده از فرمان pause در مواردی کاربرد دارد که شما می خواهید سرعت اجرای عملیاتی را در متلب کاهش دهید و تغییرات را با دقت بیشتری مورد بررسی قرار دهید.

متن برنامه :

clc;

clf;

% define a x,y

x=0:.1:2*pi;

y=sin(x);

for n=1:length(y)

%{

hold on

plot(x,y)

%}

% define ball shape

fill(x(n)+.1*cos(x),y(n)+.1*sin(x),'r')

axis([0 2*pi -pi pi])

% wait for 0.1 miliseconds

pause(0.1)

end


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰
برای حل معادلات و پیدا کردن ریشه ها در محاسبات عددی روش های زیادی وجود دارد،که یکی از بهترین روش ها استفاده از نیوتن – رافسون است. قابلیت این روش در سرعت بالای پاسخ دهی آن است و در چند مرحله شما را به جواب می رساند اما مشکل آن نیز نیاز به مشتق گیری از تابع اصلی در آن است. با وجود اینکه گاهی مشتق گیری کار بسیار پیچیده ای می نماید نمی توان همیشه روی این روش حساب کرد.

مشکل دوم نیاز به حدس اولیه مناسب برای رسیدن به جواب است.

Clc;syms x

myf=x^2-4*x+1;df=diff(myf);

k=0;del=10;

while abs(del)>1e-5del=subs(myf,k)/subs(df,k);k=k-del;end;

disp(k);

fzero('x^2-4*x+1',0)

در این برنامه ابتدا تابع در myf تعریف شده است و با diff مشتق آن حساب می شود. حدس اولیه در k قرار می گیرد و میزان خطای پیشفرض یا همان del ابتدا 10 در نظر گرفته می شود. برنامه تا زمانی ادامه می یابد که خطا به e-5 برسد. در خط آخر از fzero که یکی از توابع داخلی متلب برای محاسبه ی ریشه حول نقطه ای خاص است استفاده شده است. شما می توانید نتایج حاصل را خودتان مقایسه کنید.


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

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

حل معادله :

برای بدست آوردن ریشه های یک معادله ی چند جمله ای می توانید به راحتی از دستور roots استفاده کنید. برای اینکار لازم است ضرایب معادله را به صورت یک ماتریس به دستور roots وارد کنید.

X^3-2X^2-2=0

برای حل چنین معادله ای دستورات متلب به شکل زیر خواهند بود.

P=[1 -2 0 -2];

Roots(p)

ans =                   
   2.3593               
  -0.1797 + 0.9030i
  -0.1797 - 0.9030i 

دستور  solve به شما کمک می کند معادلات خود را به راحتی با کمک متلب حل کنید.

solve('a*x^2+b*x+c')

ans =
  1/2/a*(-b+(b^2-4*a*c)^(1/2))
  1/2/a*(-b-(b^2-4*a*c)^(1/2))         

همانطور که می بینید معادله ی درجه ی دوم به راحتی با کمک متلب به صورت جبری حل شد. چنانچه در آخر معادله عبارت = 0 قرار داده نشده باشد متلب آن را به صورت یک پیشفرص در نظر می گیرد.

>> s=solve('x + y  = 1','x - 11*y = 5')

s = 
    x: [1x1 sym]
    y: [1x1 sym]

این عبارت به این معنی است که جواب معادله یک ماتریس یک در یک و به صورت نمادین است. جوابها در متغیر s ذخیره شده اند که از نوع ساختاری است و برای خواندن آنها به شکل زیر عمل می کنیم.

>> s.x
ans =
4/3

>> s.y
ans =
-1/3

 نمونه ی دیگری از این دستور به صورت زیر است.

>> solve('cos(x)+sin(x)=1')

 ans =
 1/2*pi
      0

همچنین چنانچه در انتهای معادله هر کدام از متغیرهای هم لیست کنید متلب معادله را بر حسب آن متغیر حل می کند.

solve('a*x^2 + b*x + c','b')

ans =
-(a*x^2+c)/x

همچنین در متلب از دستور dsolve برای حل جبری معادلات دیفرانسیلی استفاده می شود.

dsolve('Dx = -a*x')

ans =
C1*exp(-a*t)

دقت داشته باشید که Dx یعنی مشتق اول از x  و برای نشان دادن مشتق های مراتب بالاتر از D2x یا D5x استفاده می شود که به ترتیب نشان دهنده ی مشتقات از مراتب 2 و 5 می باشند.

معادلات شما می تواند حالات پیچیده تری نیز به خود بگیرند. همچنین با تعیین شرایط مرزی می توانید مقادیر ثابت معادله را نیز بیابید.

dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0')

 ans =
 cos(a*t)

در پایان این قسمت نحوه ی رسم معادلات بدون تعیین مقادیر x و y آموزش داده می شود.

برای این کار از دستور ezplot به راحتی می توان استفاده کرد. آیا برنامه ی رسم دایره را به خاطر می آورید!؟ در اینجا همان دایره به شکل کاملا ساده تری رسم می شود.

ezplot('x^2+y^2=3')

برای رسم هر معادله تنها کافیست آنرا به صورت رشته ای به این دستور وارد کنید.


برچسب‌ها: حل کننده انتگرال دو هامل, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

مشتق گیری و انتگرال گیری عددی با متلب

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

در متلب قابلیت های فراوانی برای کار با اعداد در نظر گرفته شده است.شما می توانید به راحتی و با استفاده از Curve Fitting از روی یک ماتریس عددی ضرایب معادله ی چند جمله ای آن را به راحتی بیابید.روال کار قبلا نشان داده شده است.

مشتق گیری عددی :

همه ی شما حتما با تعریف مشتق با کمک حد آشنایی دارید :

 

کاری که برای مشتق گیری عددی از یک ماتریس می بایست انجام دهید استفاده از همین تعریف و فرمان diff متلب می باشد. با کمک یک مثال روش کار را با هم بررسی می کنیم :

می دانیم مشتق sin همان cos است. در این برنامه دو ماتریس xو y1 ورودی و خروجی تابع sin هستند. در ادامه در y2 مقادیر cos را مستقیما محاسبه کرده و ذخیره می کنیم.

سپس با استفاده از روش مشتق گیری عددی و فرمان diff از xو y1 مشتق گرفته و نتیجه را در ماتریس y3 ذخیره می کنیم.

مشاهده می کنید که وقتی دوتابع y2 و y3 را رسم می کنیم فرقی با هم ندارند. در حالی که اولی مستقیما از تابع cos و دومی با استفاده از مشتق گیری عددی از sin و دستور diff بدست آمده است :

clc;x=0:.1:2*pi;y1=sin(x);y2=cos(x);

y3=diff(y1)./diff(x);figure(1)plot(x,y1);figure(2)

subplot(2,1,1);plot(x,y2,'ro');

subplot(2,1,2);plot(y3,'b.');

 

تنها نکته ای که باید به آن توجه داشته باشید این است اندازه ی درایه های x  و y1 می بایست با هم برابر باشند ونیز تعداد درایه های ماتریس y3 که خروجی مشتق گیری عددی است یکی کمتر از دو تابع y1 و x می باشد.علت آن را هم می توانید در کتب محاسبات عددی به طور دقیقتری بیابید.

 انتگرال گیری عددی

روش های زیادی هم برای محاسبه ی انتگرال یک تابع در متلب وجود دارند. اما برای استفاده از آنها (int و quad )  می بایست خود تابع را در اختیاد داشته باشید.

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

تابع y=x  را در نظر بگیرید.می دانیم که در بازه ی صفر تا 10 مقدار انتگرال آن (مساحت زیر نمودار)  برابر 50 می باشد. حال می خواهیم با استفاده از دو روش انتگرال گیری از دو روش همین مقدار را بدست آوریم.

x=0:10;y1=trapz(x)y2=int('x',0,10)

y1 = 50y2 = 50

مشاهده می کنید که هر دو روش یک مقدار را نتیجه می دهند. اگر دستورات را جداگانه در قسمت Command Window وارد کنید، خواهید دید که هنگام استفاده از int متلب چند لحظه Busy شده و نمایش نتیجه مدت زمان بیشتری به طول می انجامدو تازه این برای تابع ساده ای چون x است. معمولا بهتر است از quad استفاده کنید.اما برای محاسبه ی انتگرال گیری عددی trapz بهترین راه است.


برچسب‌ها: آموزش برنامه نویسی متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰
المان محدود همچنان در راه خود به پیش می تازد و با روبرو شدن مهندسان با مشکلات تازه راه های تازه تری نیز برای حل آنها می یابد. به دلیل قابلیت های فراوان متلب در تحلیل مارتیس ها استفاده از این زبان برای حل مسائل المان محدود امروزه گسترگی فراوانی یافته است.


برچسب‌ها: کتاب المان محدود در متلب, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

ادامه مطلب...
ارسال توسط بهرامی
 
تاريخ : سه شنبه هجدهم بهمن ۱۳۹۰

دانلود نرم افزار حل کننده انتگرال دو هامل

( Duhamel Plus ver. 1.0 )

This program uses the Duhamel integration for calculation of the linear response of single-degree-of-freedom structures to arbitrary or harmonic dynamic loading. This program is capable of calculation of the response spectra of earthquake records for different damping ratios. It can normalize the earthquake records and calculate the average spectra of multiple records as well. This program is useful for structural designers who are to scale their earthquake records for a dynamic analysis, or want to calculate a site-specific design spectrum from local records

برنامه انتگرال دیو هامل همراه با راهنمای برنامه

نمونه های دیگر

در ادامه مطلب را حتما ببینید...


برچسب‌ها: حل کننده انتگرال دو هامل, آموزش تصویری متلب, آموزش متلب, آموزش نرم افزار MATLAB

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

اسلایدر

دانلود فیلم