,

آموزش مقدماتی Matlab

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

توضیح مختصر از پنجره های موجود در صفحه ی اصلی متلب:

Command window

پنجره ی فرمان

هرگونه محاسبه مثل 4 عمل اصلی را در این پنجره میتوانیم مشاهده کنیم . هم چنین میتوانیم حاصل این اعمال را نیز در یک متغیر بریزیم.

Current directory

مسیر پیش فرض

برنامه ای را که مینویسیم و میخواهیم ذخیره کنیم ، در این مسیر پیش فرض ذخیره می شود . این مسیر قابل عوض کردن است

work space

تمام متغیر هایی که در command window معلوم کردیم را در این جا نشان می دهد.

Command history

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

اگر در work space بر روی هر کدام از متغیر ها click کنیم، مشخصات آن را نشان میدهد . مثلا از جنس ماتریس است.

در این قسمت برخی دستورات ساده و مقدماتی گفته می شود :

Clc :

این دستور کل پنجره ی command window را پاک میکند .

اگر بخواهیم یکی از متغیر های موجود در work space را پاک کنیم، به صورت دستور زیر:

Clear a

متغیرa از work space پاک میشود .

Clear a b

متغیر a و متغیر b را پاک میکند.

پاک کردن کلیه ی متغیر ها از work space:

Clear all یا clear

در متلب حروف کوچک و بزرگ متفاوتند .

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

 

متلب حروف یونانی را پشتیبانی نمیکند . فقط در قسمت ترسیم ها (plot) می توان برای عنوان گذاری از حروف یونانی استفاده کرد . که در مباحث بعدی توضیح داده می شود .

Pi=3.1416

به صورت پیش فرض در متلب اعداد تا 4 رقم اعشار نمایش داده می شوند . اگر بخواهیم به فرمت طولانی تر تبدیل کنیم، که تعداد ارقام بیشتری را نشان دهد: Format long

اگر بخواهیم به فرمت قبل برگردد: Format short

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

برای نمایش اعداد تا 4 رقم اعشار :

Format bank

اگر جلوی هر کدام بگذاریم به صورت نماد علمی نشان می دهد.

Format longe

فرمت کسری :

Format rat

Ex:

Format rat

Pi

Ans

355/113

برای فرمت هگزا دسیمال:

Format hex

فرمت فشرده :

Format compact

برای حذف کردن خط اضافه ی بین هر دو خط . یعنی خطوط فشرده تر می شوند.

برای بازگشت به حالت قبل:

Format loose

برای تعیین دقت محاسبه از تابع زیر استفاده می کنیم:

Vpa: variable precision arithmetic

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

Vpa(pi,n)

عدد را تا n رقم اعشار نمایش می دهد.

برای محاسبه زمان دستورات از دستور tic toc استفاده می کنیم بدین صورت که قبل از دستوراتی که میخواهیم زمانش را بفهمیم، tic و در آخر مجموعه دستورات toc مینویسیم .

و همچنین با تایپ دستور clock زمان کامپیوتر را به ما میدهد.

به عنوان مثال:

Format rat

Clock

Ans

2011 9 2 4 15 3223/87

و یا با فرمت دیگر

format long

>> clock

ans =

1.0e+003 *

2.01100000000000 0.00900000000000 0.00200000000000 0.00400000000000 0.01700000000000 0.04654600000000

ماتریس

برای وارد کردن ماتریس در برنامه ، باید از کروشه استفاده کنیم:

Ex:

[1 2 3 4 5 6 7 8 9]

ans =

1 2 3 4 5 6 7 8 9

برای جدا کردن سطر ها باید مطابق زیر عمل کنیم :

[1 2 3 ;4 5 6 ;7 8 9]

ans =

1 2 3

4 5 6

7 8 9

نماد ; دو کاربرد دارد یکی در همینجا که سطر های یک ماتریس را به وسیله ی آن مشخص می کنیم و دیگری در برنامه ها است که اگر در آخر هر دستور از ; استفاده کنبم، نتیجه ی آن خط دستور نمایش داده نمی شود.

برای یافتن تعداد سطر و ستون ماتریس از تابع size استفاده میشود.

Size(a)

تعداد سطر و ستون ماتریس A را نمایش می دهد.

اگر به شکل زیر تعریف کنیم، تعداد سطر ها میردو در a و تعداد ستون ها میرود در b

[a b]=size(q)

برای فهمیدن تعداد سطر ها یا همان طول ماتریس از تابع length استفاده می کنیم:

Length(a)

تالع دترمینان:

Det(a)

برای استفاده از این تابع، ماتریس حتما باید مربعی باشد.

اگر مربعی نباشد با error زیر مواجه میشویم:

??? Error using ==> det

Matrix must be square.

معکوس یک ماتریس:

Inv(a)

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

برای اعمال یک سری تغییرات در ماتریس از دستورات زیر استفاده می کنیم:

Triu(a) :

بالا مثلثی

Trid(a) :

پایین مثلثی

Diag(a) :

قطر اصلی

Flipud(a) :

چرخش از بالا به پایین

Fliplr(a) :

چرخش از چپ به راست

برای یافتن قطر فرعی میتوانیم دو تابع را ادغام کنیم :
diag(fliplr(a))

ماتریس های خاصی که در متلب تعریف شده اند:

Eye(n,m) ماتریس واحد به ما می دهد.

N تعداد سطر

M تعداد ستون

اگر ماتریس واحد مربعی بخواهیم eye(n) ، ماتریس n*n واحد میدهد .

Ex: eye(3,5)

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

Ones(a,b)

یک ماتریس n*m که همه ی درایه هایش 1 است.

Zeros(a,b)

یک ماتریس n*m که همه ی درایه هایش صفر است.

Ex:

Zeros(3)

ans=

0 0 0

0 0 0

0 0 0

مثلا وقتی میخواهیم اول برنامه قالب ماتریس را معلوم کنیم و بعد درایه ها را تغییر بدهیم.

آدرس دهی ماتریس:
X(n,m)

برای مقدار دهی درایه و یا تغییر مقدار آن:

Ex:

Ones(3)

Ans=

1 1 1

1 1 1

1 1 1

Ans(1,3)=4

Ans=

1 1 4

1 1 1

1 1 1

برای اینکه یک قسمت از یک ماتریس را برداریم :

A(1:2,3:6)

یعنی سطر اول تا دوم و ستون سوم تا ششم

A(:)

همه ی عناصر را ستونی نشان می دهد .

برای حذف یک قسمت از ستون ها یا سطر ها آن ها را برای تهی قرار می دهیم :

A(1:3,4)=[]

اعداد تصادفی: rand

Rand بین صفر و یک است.

Rand(n,m)

یک ماتریس تصادفی n*m می دهد.

اگر مثلا بخواهیم اعداد تصادفی بین صفر تا نه باشند:

9*rand(n,m)

اگر بخواهیم اعشار نداشته باشد :

Round

مثلا:

Round(rand(5,9))

اگر بخواهیم اعداد تصادفی بین range دلخواه خودمان باشد،

Min<rand<max

Min+(max-min)*rand

جایگشت های تصادفی اعداد: permutation

Randperm(n)

از یک تا n به صورت تصادفی جایگشت مینویسد:

Ex:
( randperm(13

Ans=

1 12 9 6 3 5 8 10 13 2 11 7 4

اعداد تصادفی با توزیع نرمال:
randn(x)

ماتریس x*x میدهد که با توزیع نرمال همه ی اعداد در اطراف 1 هستند اعداد خیلی بزرگ یا خیلی کوچک ندارد.

اگر بخواهیم اعداد تصادفی با میانگین و واریانس دلخواه داشته باشیم:

M+s^2(randn(x))

که s^2 همان واریانس و m میانگین است.

Sum(a)

از ماترس a از هر ستون جمع میگیرد.

Sum(a(:))

جمع همه ی درایه ها

Prod(a) از هر ستون همه ی درایه ها را ضرب می کند.

ضرب همه ی درایه ها: prod(a(:))

اگر بخواهیم از هر سطری بگیرد و جمع یا ضرب کند، از A’ استفاده میکنیم.

Sqrt جذر میگیرد.

Nthroot(x,n) n امین ریشه ی x را میگیرد.

برای اینکه بخواهیم از کاربر مقداری دریافت شود، از input استفاده میکنیم . مثلا میخواهیم مقداری مثل a وارد شود سپس بر روی مقدار عددی a اعمالی انجام شود:

A=input(‘please insert a=’)

مثال:

برنامه ای بنویسید که کاربر یک ماتریس را به طور دلخواه وارد کرده و برنامه، حاصل جمع تمام درایه ها و سایز آن ماتریس را نمایش دهد.

برای شروع برنامه نویسی ابتدا باید یک mfile باز کنیم:

بعد از نوشتن برنامه f5 میزنیم تا run شود( اول باید save شود).

باید توجه داشت که mfile ها را با نام عدد ذخیره نکنیم و همچنین با اسم توابع نیز ذخیره نشود.

توابع رسم:

ایجاد یک سری نقاط با گام های مختلف:

T=0:10 0 1 2 3 4 5 6 7 8 9 10 گام پیش فرض

T=0:2:10 0 2 4 6 8 10

ایجاد نقاط با فواصل خطی:

Linspace(a,b)

که a عدد ابتدا و b عدد انتهاست.

پیش فرض این است که 100 نقطه تعریف ند.

Linspace(1,5,5) 1 2 3 4 5 5 نقطه می دهد، با فواصل یکسان.

زمان 0 تا 1 با فرکانس نمونه برداری 100 یعنی در هر ثانیه 100 تا نمونه به ما بدهد.

Fs=100

T=0:1/fs:1

Sin()

Sin ورودی را رادیان می بیند.

Sind() ورودی را درجه می بیند.

اگر یک 2*pi ضرب کنیم، از 0 تا 1 را میبرد به 0 تا 180.

رسم:

Plot(x,fx)

تغییراتی در شکل ظاهری نمودار های رسم شده:
plot(t,y,’.’) شکل را بدون اینکه نقاط را به هم وصل کند رسم می کند.

اگر به جای . از o استفاده کنیم به شکل دایره دایره نمایش می دهد.

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

Plot(t,y,’x’)

Plot(t,y,’+’)

و همچنین رنگ plot نیز میتواند تغییر کند:

R قرمز b آبی k مشکی g سبز y زرد m صورتی c لاجوردی

Plot(t,y,’vc) به رنگ صورتی و شکل مثلثی (v)

 

توابع ریاضی موجود در متلب:

Sin,cos,tan,cot

Log(x) که همان ln(x) است.

Log10(x) که همان log در پایه ی 10 است.

Log2(x) که همان log در پایه ی 2 است.

Exp(x)=e^x

و توابع مثلثاتی بر حسب درجه: sind,cosd,sinh,cosh

اگر بعد از هر plot از Hold on استفاده کنیم ، تصویر plot را نگه می دارد .

اگر بخواهیم یک figure جدید باز کند میتوانیم قبل از plot بنویسیم figure و نام مورد نظر را هم جلوی آن بنویسیم که اگر نام را ننویسیم به صورت پیش فرض با عدد شماره گذاری می شود.

اگر اول برنامه close all بنویسیم، تمام پنجره های قبلی بسته می شود.

اعمالی که میتوان بر روی plot ها انجام داد:

Title(‘onvan’)

عنوان مورد نظر به شکل اضافه می شود.

Xlabel(‘ ‘)

Ylabel(‘ ‘)

برای محور ها برچسب گذاشته میشود.

Axis off & axis on محور های مختصات را خاموش و روشن میکند.

Grid on & grid off شکل را به صورت شبکه ای نمایش می دهد.

Axis equal زمان محور های مختصات x و y را مساوی میگیرد.

Axis normal به حالت عادی بر میگرداند .

Axis tight مختصات را به روی شکل fit میکند.

استفاده از دستور legend برای هر نمودار یک برچسب مشخص می کند .

Legend(‘ ‘,’ ‘)

اگر بخواهیم داخل plot و در مختصات خاصی ه مورد نظر ما است یک متنی نوشته شود:

Text(x,y,’matn’)

که x و y همان مختصات مورد نظرماست.

اگر از دستور gtext(‘matn’) استفاده کنیم ، بر روی figure که می رویم هر جا کلیک کنیم متن را برایمان مینویسد.

Rem reminder باقیمانده ی تقسیم a بر b rem(a,b)

Floor(a) به سمت عدد کوچکتر گرد می کند . همان براکت است.

Fix(a) قسمت اعشار را حذف میکند.

Min(a) مینیموم هر ستون را می دهد.

Max(a) برای هر ستون یک متکسیمم می دهد.

اگر بخواهیم مقادیر ی ماترس را نرمالیزه کنیم برای این کار ابتدا باید max همه ی مقادیر را به دست بیاوریم و بعد تمام مقادیر را تقسیم بر آن max میکنیم.

Sort(a) تمام ستون ها را از کوچک به بزرگ مرتب می کند.

Mean(A) میانگین تمتم ستون ها را به ما می دهد.

Meanz(a) میانگین تمام درایه ها را به ما می دهد.

Dot(a,b) ضرب داخلی که نتیجه ی آن یک عدد است.

Cross(a,b) ضرب خارجی که نتیجه ی آن یک بردار است.

Gcd(a,b) Greatest common divisor

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

Lcm(a,b) least common multiplier

کوچکترین مضرب مشترک دو عدد را نمایش می دهد.

اگر روی یک تابع راست کلیلک کنیم و open selection را بزنیم کل دستورات mfile که نوشته شده تا این تابع انجام پذیرد را می بینیم.

برای اینکه در کار با ماتریس ها بخواهیم ضرب یا تقسیم درایه ها را نظیر به نظیر انجام بدهیم باید از .* و ./ استفاده بکنیم.

Isprime(b)

آیا عدد اول هست یا نه

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

مثال:

اعداد اول 1 تا 1000 را مشخص کنید:

Clc

Clear all

T=1:1000;

A=isprime(t);

r=t.*A;

r’

علامت ‘ میگذاریم تا ستونی نمایش دهد و راحت تر ببینیم.

اعداد مختلط:

اعداد مختلط در متلب به صورت a+b*j و یا a+b*i نمایش داده میشوند. (باید i و j به عنوان متغیر قبلاً استفاده نشده باشند)

Z=complex(a,b) عدد مختلط را می خواند.

Real(z) برای مشاهده ی قسمت حقیقی

Imag(z) برای مشاهده و قسمت موهومی

Abs(z) اندازه ی عدد مختلط را به ما می دهد.

Angle(z) زاویه ی عدد مختلط را به ما می دهد . بر حسب زاویه

X*(180/pi) رادیان را به زاویه میبرد.

مثال:رسم مستطیل طلایی: golden rectangle

این مستطیل برای معماری کاربرد دارد.در این مستطیل نسبت طول به عرض برابر است با:

1+sqrt(5))/2)

که حاصل آن برابر است با تقریبا 1/6

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

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

طریقه ی ایجاد :

یک مربع میکشیم و وسط یک ضلع را مییابیم به اندازه ی فاصله ی این نقطه ی وسط تا ضلع روبرویش یک کمان میزنیم و سپس ادامه می دهیم

ابتدا یک mfile باز می کنیم:

clc

clear all

phi=(1+sqrt(5))/2;

x=[0 phi phi 0 0]

y=[0 0 1 1 0]

plot(x,y)

x1=[1 1]

y1=[0 1]

hold on

plot(x1,y1)

axis off

text(-0.05,0.5,’1′)

text(0.5,-0.05,’1′)

text(phi/2,1.05,’\phi’)

text(1+(phi-1)/2,-0.05,’\phi-1′)

text(1.05,0.5,’1′)

set(gcf,’color’,’w’)

برای نمایش حروف یونانی در متلب فقط در plot ها میتوانیم با استفاده از نام انگلیسی آن ها به همراه \ این کار را انجام دهیم.

مطابق phi در رسم مستطیل بالا.

رسم چند plot در یک figure :

Subplot(n,m,x)

که در این جا n تعداد سط ها ، m تعداد ستون ها x شماره ی plot است.

برای title و یا label گذاشتن در اینجا باید بعد از هر plot این کار را انجام بدهیم.

در یک figure 6 قسمتی، در plot پنجم سینوسی و در plot دوم لگاریتمی و در plot سوم tan رسم کنید:

clc

clear all

close all

fs=100;

t=-1:1/fs:1;

y1=sin(2*pi*t);

subplot(2,3,5)

plot(t,y1),xlabel(‘time’)

y2=log(t)

subplot(2,3,2)

plot(t,y2)

y3=tan(t)

subplot(2,3,3)

plot(t,y3)

اگر بخواهیم یکی از subplot ها مثلا به اندازه ی 2 subplot باشد یعنی بزرگتر از subplot های دیگر باشد، از روش زیر استفاده میکنیم.در مثال پایین plot سومی در دو جایگاه سوم و چهارم قرار میگیرد و به اندازه ی دو برابر سایر plot هاست.

clc

clear all

close all

fs=100;

t=0:1/fs:1;

x1=sin(2*pi*t);

x2=exp(-t);

x3=(x1.*x2);

subplot(2,2,1)

plot(t,x1)

subplot(2,2,2)

plot(t,x2)

subplot(2,2,3:4)

plot(t,x3)

نمودار میله ای:
bar(x,f(x))

نمودار گسسته:

Stem(x,f(x))

نمودار پلکانی:

Stairs(x,f(x))

نمودار هیستوگرام:

Hist(f(x),x)

توابع سمبولیک یا آنالوگ:

چندجمله ای: polynomial

A=[2 4 6 8] معرف چند جمله ای درجه 3 است.

A=[an,a(n-1),a(n-2),…,a0]

معرف ضرایب چند جمله ای درجه n است.

X=roots(a) که در آن a یک بردار است، ریشه ها را به ما می دهد.

Poly(x) ضرایب را به ما میدهد.

به طوری که roots و poly برعکس هم عمل میکنند.

هر گاه از poly استفاده کنیم، همیشه ضریب an را 1 میگیرد و بقیه را تقسیم بر ضریب an میکند تا ضریب an 1 شود.

برای تبدیل polynomial به سمبولیک:
poly2sym()

A=[2 4 6 8]

Poly2sym(a)

Ans=

2*x^3+4*x^2+6*x+8

Syms x بعد از نوشتن این عبارت enter میزنیم و x را به عنوان یک سمبل در نظر میگیرد.

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

Y=sin(x)

رسم توابع سمبولیک:

Ezplot(y)

که در اینجا y و یا هر عبارت داخل پرانتز باید سمبولیک باشد.

Syms x

Y=sin(x)

Ezplot(y)

به صورت پیش فرض بین -2pi و 2pi رسم میکند.

اگر بخواهیم پیش فرضش را تغییر بدهیم:

Ezplot(y,[-10,10])

اگر متغیر قبلا سمبولیک نشده باشد میتوانیم داخل ” قرار بدهیم.

Ezplot(‘z^3’)

که در این حالت میتوانیم برای y هم مختصات تعریف بکنیم.

Pretty(a)

به حالت دست نویس نشان میدهد.

Simple(y) بسط ها را نشان می دهد.

Factor(a) اگر سمبلی قابل فاکتور گرفتن باشد از آن فاکتور میگیرد.

Conv(a,b) که در آن a و b ضرائب چند جمله ای هستند، ضرب convolution انجام می دهد.

Convolution وقتی به حوزه ی فرکانس برود به ضرب تبدیل میشود. برای فیلتر کاربرد دارد.

Deconv(a,b) تقسیم است.

مشتق چند جمله ای در بحث چند جمله ای:

Polyder(a)

که در این جا a ضرایب چند جمله ای ست.

Polyder(a,b)

مشتق ضرب چند جمله ای است.

[A B]=polyder(a,b)

مشتق تقسیم چند جمله ای است.

ارزیابی چند جمله ای ها:

Polyval(a,x0)

عدد با بردار x0 را در چند جمله ای a مقدار دهی میکند.

مقدار دهی در حالت سمبولیک:

Subs(f,’x’,a)

عدد a را در تابع f به جای x قرار می دهد.

می توانیم به جای یک متغیر چند مقدار مختلف بگذاریم:
مثلا :

F=x^z-sin(x+z)

Subs(f,'[x y z]’,[1 pi/2 2])

تابع polyfit :

استخراج چند جمله ای درجه n از یک سری نقطه:
polyfit(x,y,n)

درجه ی چند جمله ای باید از تعداد نقاط حداقل یکی کمتر باشد.

حل معادله ی n معادله n مجهول در متلب برای حالت سمبولیک:

solve(‘ ‘,’ ‘,’ ‘,…………..)

داخل هر کدام از نماد های ‘ ‘ یک معادله را می نویسیم.

که لازم است قبل از آن تماد مجهول ها را از قبیل a,b,x,…….. سمبولیک کنیم.

مثال:

برای حالت غیر سمبولیک:

AX=B

که در این جا A ماتریس ضرائب است وX ماتریس مجهول هاست.

X=A(-1)*B که در اینجا A(-1) همان وارون ماتریس A است.

Rats(x) اعداد را می گیرد و به صورت کسری نمایش می دهد.

Rat(x) اعداد را می گیرد و به صورت کسرهایی نمایش می دهد که صورت آن ها 1 است.

Vpa(a,n) عدد a را تا n رقم نشان می دهد و بقیه را گرد می کند.

حل یک معادله با در0جه ی n

Solve(d)

D را برابر صفر می گیرد و معادله را حل می کند.

باید از توابع سمبولیک استفاده کنیم اگر که سمبولیک نبود از نماد ” استفاده می کنیم.

مقادیر ویژه ی ماتریس:

Eig(a)

Det(SI-A)=0

که در آن I ماتریس یکه است.

در درس مدار 2 در قسمت فضای حالت کاربرد دارد.

اگر

A ماتریس حالت

B ماتریس ورودی

C ماتریس خروجی

D ماتریس انتقال

X متغیر های حالت

U متغیر های ورودی

Y متغیر های خروجی باشند ، مقادیر ویؤه ی ماتریس A فرکانس های طبیعی شبکه هستند.

x.=Ax+Bu

y=Cx+Du

برنامه ای بنویسید که کاربر یک ماتریس مربعی با ابعاد دلخواه وارد کرده و برنامه یک بار مقادیر ویژه را با این تابع و یک بار هم با رابطه ی زیر حساب کند.

Det(SI-A)

حل معادلات دیفرانسیل در  متلب حالت سمبلیک:

Dsolve(‘………’,’…’,’…’,’x’)

که در نماد ” اول باید معادله دیفرانسیل را بنویسیم و در ” های بعدی شرایط اولیه را که باید تعدادشان برابر با درجه ی معادله باشد. و x آخر هم برای این است که معادله بر حسب x است.

برای نشان دادن مشتق باید از D ( حتما D بزرگ ) استفاده کنیم.

به صورت پیش فرض ، متغیر مستقل را t در نظر میگیرد.

مثال:

ترکیب توابع سمبولیک:

F(g(x))=fog

Compose(f,g)

حد توابع سمبولیک:

Limit(f,x,a)

در مواقعی که حد چپ و حد راست با هم برابر نیست ، اگر حد بگیریم NaN را نمایش می دهد که نشانگر تعریف نشده است . همانطور که در help نرم افزار متلب توضیح داده است NaN مخفف عبارت not a number می باشد.

اگر بخواهیم حد راست و یا حد چپ گرفته شود باید از right و left استفاده کنیم:

مشتق توابع سمبولیک:

Diff(f)

به صورت پیش فرض ، بر حسب x مشتق می گیرد. ورودی هر چند متغیری که میخواهد داشته باشد مشتق بر حسب x است.

اگر بخواهیم بر حسب متغیر دیگری مشتق بگیرد : diff(f,’y’)

مشتق مرتبه ی n ام:

Diff(f,n)

انتگرال عبارات سمبولیک:

Int(f)

Indefinite integral

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

Int(f,a,b) انتگرال معین

اگر بخواهیم بر حسب متغیر دیگری انتگرال گیری انجام شود : int(f,y)

برای انتگرال چندگانه میتوانیم ازچند انتگرال داخل هم استفاده کنیم:

سری تیلور برای توابع سمبولیک:

Taylor(f) بسط تیلور حول نقطه ی صفر است.

بسط مک لورن: taylor(f,m,x0) تا m و حول نقطه ی x0

برنامه ای بنویسید که بسط تیلور تابع sin(x) را حول نقطه ی صفر حساب کند و مشخص کنید تا جمله ی چندم مشتق با شکل خود تابع sin(x) یکی میشود.

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

مطابق شکل های زیر، عدد a را اول به عنوان مثال از 5 وارد می کنیم و بعد افزایش میدهیم تا جایی که شکل ها یکی شوند.

عدد a را برابر با 10 وارد می کنیم:

عدد a را 13 وارد می کنیم:

عددa را 14 وارد می کنیم:

با در نظر گرفتن عدد a برابر با 14 با اندکی خطا دو شکل شبیه هم شدند.

برای اینکه دو شکل را منطبق بر هم ببینیم میتوانیم از hold on استفاده کنیم :

A=14

و برای اینکه دقیق بتوانیم خطا را ببینیم محدوده ی plot ها را زیاد میکنیم مطابق شکل زیر

Dirac(x) ضربه

Heaviside(x) پله

تبدیل فوریه برای توابع سمبولیک:

Fourier(f)

اگر exp را فوریه بگیریم شیفت میدهد.

عکس تبدیل فوریه:

Ifourier(f)

به عنوان مثال کاربرد آن در تبدیل rect و sinc است که دوگان همند.

Sinc در متلی تعریف شده است . برای ساختن rect :

برای نشان دادن این که sinc و rect هر کدام ، تبدیل فوریه ی دیگری است ، از برنامه ی زیر استفاده میکنیم:

 

jacobian(f)

Curl()

و…..

یک سری از توابع در متلب هستند که برای موضوع های خاص به کار می روند. مثلا برای مغناطیس و…

برای مشاهده ی توابع در متلب میتوان از قسمت help متلب استفاده کرد. برای مشاهده ی توابع ابتدایی از help elfun و برای مشاهده توابع خاص از help specfun استفاده میشود.

تبدیل لاپلاس:

Laplace(f(t))

جواب را بر حسب متغیر s به ما می دهد.

اگر بخواهیم بر حسب ماغیر دیگری مثلا m نمایش دهد: laplace(f(x),m)

عکس تبدیل لاپلاس:

Ilaplace(F(s))

عکس تبدیل لاپلاس غبارت زیر را به دست آورید:

(S^2+2*s+3)/(s+1)^3

تفکیک کسر ها در متلب:

Residue(a,b)

غیر سمبولیک است و a ضرائب صورت و b ضرائب مخرج میباشد.

به ترتیب اول ضرائب قطب کمتر به بیشتر را می دهد. برای ریشه های مککر هم از کمترین توان می دهد.

تبدیل z:

Ztrans(f(t))

عکس تبدیل z:
iztrans()

ترکیبات 3 بعدی:

الف: توابع پیوسته (سمبلیک)

Ezplot3()

معادلات پارامتری خط یا منحنی:

Ezplot(‘x’,’y’,’z’)

چون بین دو ” قرار میدهیم سمبلیک در نظر میگیرد.

میتوانیم مختصات T را هم بدهیم:
ezplot3(‘x’,’y’,’z’,[tmin tmax])

به عنوان مثال معادله ی فنر به صورت زیر است:

رسم سطوح سه بعدی:

Ezsurf(z)

شکل زیر مثالی است که در help متلب آمده است:

مثالی از رسم یک صفحه:

مثالی از رسم یک منحنی:

یک روش ابتدایی برای رسم کره که البته مناسب هم نیست:

شکل زیر مربوط به زمانی ست که r=5 وارد شده است:

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

Sphere(a)

که a عددی است که بعداد خانه ها را نشان می دهد.

رسم استوانه:

Cylinder

ب:توابع گسسته (غیر سمبلیک):

Plot3(…,…,…)

باید اول نقاط را تعریف کنیم برای t :

برای رسم سطوح:

Surf(z)

[x y]=meshgrid(-5:5)

یک فضا برایمان تعریف می کند.

ابتدا باید با استفاده از meshgrid نمونه برداری کنیم و بعد از این تابع استفاده کنیم.

Waterfall(z) نمودار آبشاری را رسم میکند.

Contour(z) و contour3(z) سطوح تراز هستند . meshc(z) حالت مش بندی با کانتر است.

محور های لگاریتمی:

Semilogx(x,f(x)) محور x را اگاریتمی می کند.

Semilogy(x,f(x)) محور y را اگاریتمی می کند.

Loglog(x,f(x)) هر دو محور را لگاریتمی می کند.

Linspace(a,b) صد نقطه بین a و b در نظر می گیرد.

دستورات برنامه نویسی:

  1. حلقه ی for برای تکرار انجام دستورات:

For i=1:100

دستور را انجام بده

End

بدین صورت که اول i را یک میگیرد دستورات را انجام میدهد و بعد i را دو میگیرد دستورات را انجام می دهد و به همین ترتیب مثلا تا صد که در اینجا نوشته شده .

مثال:

برنامه ای بنویسید که عدد a را از کاربر دریافت کرده و حاصلجمع 1 تا a را نمایش دهد:

دستور شرطی if

If

عبارت منطقی

دستورات

Else

دستورات

End

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

شرط 1

دستورات1

Else if

شرط 2

دستورات2

Else if

.

.

.

End

End

End

برنامه ای بنویسید که عدد را در ورودی بگیرد اگر عدد اول باشد عبارت yes و اگر اول نباشد no را نمایش دهد .

برنامه ای بنویسید که برداری با 20 عضو از کاربر دریافت کند و به ترتیب در ماتریس 4*5 جای دهد.

دستور break برای شکستن حلقه:

For ………….

If…….

Break

مثال:

برنامه ای بنویسید که عددی را از کاربر بگیرد و حاصل جمع 1 تا آن عدد را حساب کند اما اگر این عدد از 1000 بیشتر شد، برنامه متوقف شود.

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

دستور while

While

شرایط

دستورات

End

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

عبارت های شرطی:

A=[1 2 3 4 5 6]

A>4

[0 0 0 0 1 1]

هر جا شرط برقرار باشد به جایش یک میگذارد.

q=a>4 Q=q.*A

Q=[0 0 0 0 5 6]

>=

<=

==

~=

And(…,…)

Or(…,…)

Xor(…,…)

مقال:

برنامه ای بنویسید که ماتریس a را بگیرد ، اگر درایه ها زوج بود یا بزرگتر از 8 بود، یکی ازشان کم کند و بقیه اعداد را خودشان را نمایش دهد:

Continue : کنترل اجرای کد را به تکرار بعدی از حلقه ی for یا while منتقل می کند.

مثال:

برنامه ای بنویسید که عدد a را از کاربر دریافت کرده و ضرب کل اعداد 1 تا a را نمایش دهد اما در این حاصلضرب عدد q را که قبلا کاربر وارد کرده حساب نکند.

دوران یک ماتریس:

Rot90(a)

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

Rot90(a,3) 270 درجه می چرخاند.

Rot90(a,-1)

در جهت عقربه های ساعت.

تغییر سایز ماتریس:

Reshape(a,m2,n2)

M2 تعداد سطر های جدید و n2 تعداد ستون های جدید می باشد.

m1*n1=m2*n2

آرایه ها:
a={…….}

Double یعنی فرمت اعداد حقیقی با دقت ممیز شناور

در متلب به طور پیش فرض همه ی اعداد را به صورت double می بیند.

A{1}

همه ی عناصر عنصر اول آرایه را به ما نشان می دهد.

هر کدام از عناصر آؤایه خود می توانند یک آرایه باشند.

Cell(m,n)

آرایه ی تهی ایجاد می کند:

ایجاد منو برای انتخاب ورودی:

Menu(‘aaaa’,’…’,’…’,’…’)

که در این جا aaaa متن و … ها گزینه ها هستند.

Magic(n)

ماتریس n*n می دهد که جمع سطر و ستون و قطر اصلی و قطر فرعی با هم برابرند.

مثال:

با اجرا کردن برنامه ی فوق منوی زیر باز می شود و به کاربر این امکان را می دهد که یکی از گزینه ها را انتخاب کند و بعد از انتخاب کردن، در command window گزینه ی انتخاب شده نمایش داده می شود

دستور swith case :

با توجه به مقدار یک متغیر ، در مورد اجرای کد های مختلف تصمیم گیری می کند.

هدف: افزودن نویز به سیگنال و فیلتر کردن آن:

به یک سیگنال سینوسی به طول 15 و فرکانس 3hz که با نرخ 1000bit/sec نمونه برداری شده است، نویزی سینوسی با دامنه ی 0.3 و فرکانس 40hz اضافه کرده سپس نویز را حذف کنید.

Filter(a,b,f) : که در آن a ضرائب صورت ، b ضرائب مخرج و f سیگنالی است که میخواهیم فیلترش کنیم.

فیلتر باترورث:

[a b]=butter(n,d) که در آن n درجه ی فیلتر و d فرکانسی ست که میخواهیم قطع کند.

اگر بخواهیم بالاگذر باشد ‘high’ را نیز به عبارت بالا اضافه می کنیم.

 

پردازش تصویر:

مشخصه ی یک تصویر دیجیتال:

Pixel picture cell

نقاط بسیار ریز مربعی شکل

Resolution یک تصویر : غلظت pixel هاست که هر چه بیشتر باشد resolution بیشتر است و واحد آن به صورت زیر می باشد:

Dot per inch (dpi)

نقطه ها در هر اینچ

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

تصاویر سیاه و سفید:

Pixel هایشان فقط دو حالت دارند یا صفر و یا یک که صفر نمایانگر پایین ترین سطح روشنایی یا همان رنگ مشکی است و یک بالاترین سطح روشنایی و معرف رنگ سفید است.

تصاویر سطوح خاکستری: در حالت عادی چشک انسان 256 تا سطح مختلف روشنایی را می تواند از هم تفکیک کند .

در طراحی دوربین ها هر منظره ای را به 256 تا سطح روشنایی تبدیل می کند.

هر pixel را در یک byte ذخیره می کند.

فراخوانی یک تصویر:

Y=imread(‘address\name.format’)

آدرس، اسم تصویر و پسوند آن را وارد می کنیم .

Imshow(y)

تصویر را می بینیم.

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

Y1=im2bw(y) تصویر را به حالت صفر و یک یا سیاه و سفید می برد. که 0 تا 0.5 سیاه و 0.5 تا 1 سفید است.

تصاویر باز شده به وسیله ی imview با close all بسته نمی شوند و نیازی به نوشتن figure ندارند . خودش در ی figure جدید باز می شود.

Im2bw(y,0.3)

تصویر y را به باینری تبدیل می کند به صورتی که بالای 0.3 ها را سفید می کند.

تصاویر رنگی RGB red green blue :

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

هر کدام از این رنگ ها می توانند عددی بین 0 تا 255 را به خود اختصاص دهند . که 0 مشکی و 255 سفید و بینش رنگ مورد نظر است.

هر pixel از ترکیب 3 عدد برای قرمز و سبز و آبی به وجود می آید.

برای هر pixel 3 درایه نیاز داریم . 3 بایت یعنی 24 بیت.

Tif.jpg.png.bpm پسوند تصاویر هستند بسته به حالتی که تصویر روی حافظه ذخیره می شود.

Size(y) سایز ماتریس که حاصلضرب سطر و ستون آن میشود تعداد pixel ها.

تصاویر index (نمایه گذاری شده)

برای کاهش حافظه ی تصویر rgb را به index تعریف می کنند.

رنگ هر pixel یه یک ماتریس k*3 اشاره می کند . ستون اول مقادیر قرمز ستون بعدی مقادیر سبز و ستون بعدی مقادیر آبی را مشخص میکند.

Y1=rgb2gray(y) تصویر را به خاکستری تبدیل می کند.

Help imdemos کل تصاویری که متلب دارد را به ما نشان می دهد.

این تصویر نمایانگر تعدادی از اسامی تصاویری است که با استفاده از help imdemos نشان داده شده است:

کلاس های مختلف دیتا در متلب و فرمت ذخیره ی آن ها:

RangeتوضیحData type
2^7-1 تا -2^7 127تا128 –8بیتی integer عدد صحیح علامت دارInt8
Int16
Int32
0 تا 2^8-1 0 تا 255عدد صحیح بدون علامتUint8
Uint16
Uint32
اعداد حقیقی با دقت ممیز شناورdouble
اعداد منطقیlogical

هر کدام از این فرمت ها را می توان به دیگری تبدیل کرد.

نمودار هیستوگرام یک تصویر:

imhist(y)

نمودار افقی شدت رنگ است و نمودار عمودی شدت نور.

یکنواخت کردن هیستوگرام(افزایش contrast)

Histeq

برای این که بتوانیم این کار را با تصویر رنگی بکنیم،باید اول هر کدام از سه بعدش را جدا بگیریم بعد eq کنیم و دوباره به هم بچسبانیمشان.

به عنوان مثال تصویر رنگی زیر (اگر عکس در current directory نباشد باید مسیر آن مشخص شود):

چرخاندن یک تصویر:

imtotate(y,t) که در اینجا t درجه ی چرخش است . اگر مثبت باشد پادساعتگرد و اگر منفی باشد به طور ساعتگرد چرخانده می شود.

Imcrop(y) تصویر را برش می دهد.

وقتی اینتر را بزنیم با موس میتوانیم انتخاب کنیم که کجای تصویر را برش بزنیم . همچنین می توانیم مختصات بدهیم.

Imwrite(y,’address\title.fmt’) تصویر را در هارد ذخیره می نماید.

برای یکنواخت کردن تصاویر رنگی:

Imadjust(y,[a1,b1],[a2,b2])

A1 حد پایین تصویر ورودی

B1 حد بالای تصویر ورودی

A2 حد پایین تصویر خروجی

B2 حد بالای تصویر خروجی

مثلا:

[0.1,0.7],[0.2,0.5]

مقادیر کمتر از 0.1 را می برد به 0.2

مقادیر بیشتر از 0.7 و خود 0.7 را به 0.5 نگاشت می دهد.

مقادیر بین 0.1 و 0.7 را بین 0.2 و 0.5 نگاشت می دهد.

افزودن نویز به تصاویر:

Y1=imnoise(y,’noise type’,noise quantity)

در پردازش تصویر نویز salt&pepper نویز معروفی است.

به طور تصادفی بعضی pixel ها را سیاه می کند و بعضی ها را سفید می کند.

مقدار نویز از 0 تا 1 تغییر می کند . اگر 1 باشد 100% است پس همه ی pixel ها خراب می شوند. مقدار پیش فرض 0.05 است یعنی 5% تصویر نویزی می شود.

فیلتر میانه برای حذف نویز salt&pepper

Y2=medfilt2(y1)

بالاترین سطح و پایین ترین سطح را حذف می کند.

طراحی فیلتر برای تصاویر:

F=fspecial(‘filter type’)

Imfilter(y,f)

پردازش صدا:

می خواهیم به کمک یک میکروفن صدای یک شخص را که یک سیگنال آنالوگ است ، به کامپیوتر ببریم که صدا به صورت موج پیوسته منتشر می شود.

فشرده سازی و تبدیل به فرمت های مختلف مثل wave که استاندارد است:

Dsp= digital signal processing

باید به بیت های رقمی یا دیجیتال تبدیلش کنیم تا به کامپیوتر برود.

ویژگی های صدای دیجیتال:

  1. نرخ نمونه برداری:

استاندارد 44100 بیت بر ثانیه حالت ایده آل صدای شخص را تولید می کند. در هر ثانیه 44100 بیت نمونه برداری می کند تا صدا را دیجیتال کند.

نرخ های نمونه برداری دیگری نیز هستند: 22050 و 11025 و 8192 bit/sec

  1. تعداد بیت در هر نمونه ( دقت نمونه ها)
  2. 1 کاناله بودن صدا ( مونو ) یا 2 کاناله بودن صدا ( استریو )

صدای دیجیتالی با 500000 تا نمونه که با نرخ 44100 بیت بر ثانیه نمونه برداری شده است به مدت 11.33 ثانیه شنیده می شود:

500000/44100=11.33

متلب فرمت wave را پخش می کند.

برای پخش صدا:

خواندن صدا: waveread

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

پخش صدا: waveplay(y,fs)

Y بردار صدا می باشد و fs فرکانس نمونه برداری است.

پیش فرض fs 11025 است.

اگر در command window ، length(y) را بزنیم طول صدا را به ما می دهد.

اگر به جای fs بزنیم 2*fs تند تر پخش می کند.

و بر عکس اگر fs/2 بزنیم ، کند تر پخش می کند.

اگر بخواهیم یک کانال را پخش کند :

X=y(:,1);

کانال اول را جدا می کند و از یک بلندگو بیرون می آید.

ایجاد موج صوتی:

گوش انسان قادر به شنیدن صدا با فرکانس بین 20 تا 20000 هرتز می باشد.

تصویر بالا ساخت موج 200 هرتز است که برای پخشآن موج را در عدد 5 ضرب کردیم تا صدا بلند تر به گوش ما برسد.

هر چه فرکانس را زیاد کنیم ، صدا نازک تر می شود و هر چه فرکانس را کم کنیم صدا بم تر می شود.

می توانیم از فرکانس های مختلف ترکیبی از نت ها را ایجاد کنیم تا به صورت چند نت پشت سر هم شنیده شود:

می خواهیم به وسیله ی میکروفن صدا را به کامپیوتر بدهیم:

Wavrecord(n,fs,m,’double’)

N تعداد نمونه هاست.

Fs فرکانس نمونه برداری است.

M تعداد کانال هاست که می توان 1 یا 2 باشد.

Double هم میتواند 8 بیتی یا 16 بیتی باشد.

Wavwrite(y,fs,’address\title.fmt’)

در علم تشخیص گفتار به کار می رود.

برنامه ای بنویسید که اثر انگشت را از کاربر دریافت کند ، اگر کج بود آن را صاف کند و بعد کادر اضافه ی دور آن را ببرد:

ابتدا برنامه ی زیر را نوشته و ذخیره می کنیم.

برای نمونه این برنامه اجرا شده و تصویر آن را در زیر میبینید:

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

مقدمه ای سیستم های کنترلی:

Tf: transfer function

Zpk مدل صفر و قطب و بهره

Zpk(zero,pole,gain)

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

Pzmap(h) نمایش صفر ها و قطب ها

مثال:

rlocus(h)

مکان هندسی ریشه های تابع انتقال حلقه باز:

Bode(h) نمودار بود:

Nyquist(h) نمودار نایکوئیست را نمایش می دهد:

Nichols(h) نمودار نیکولز را نمایش می دهد:

Series(h1,h2) دو تابع را سری می کند.

Parallel(h1,h2) موازی می کند.

Feedback(h1,h2) فیدبک منفی

Feedback(h1,h2,+1) فیدبک مثبت

Impulse(h) پاسخ ضربه را نمایش می دهد.

Step(h) پاسخ پله

Gensig پاسخ سیستم به ورودی دلخواه general signal

Lsim(h,u,t) که در آن h تابع انتقال است.

به صورت کمرنگ ورودی را نمایش می دهد و پر رنگ خروجی را نمایش می دهد.

 

تهیه کننده: خانم مولانا

 

0 پاسخ

دیدگاه خود را ثبت کنید

دوست دارید به بحث ملحق شوید؟
Feel free to contribute!

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

هفت + پنج =