نام دانشجو : مریم خادمی
استاد مربوطه : آقای خاورزاده
«ماتریس»
یکی از خصوصیات مهم در بین همه ویژگی های قدرتمند زبان R، توانایی تشکیل ماتریس (MATRIX) و انجام عملیات جبری روی آنهاست.طبق تعریف ماتریس مجموعه ای از اعداد میباشد که در تعدادی ردیف و یا ستون مرتب شده اند.ویژگی های اصلی داده های ماتریس در R این است که همه داده های یک ماتریس از یک نوع می باشد.به عنوان مثال ،همه آنها عددی و یا همه آنها حرفی باشند.هر عدد ماتریس یک عنصر نامیده می شود.برای ایجاد ماتریس از تابع ()matrix استفاده می شود.برای این منظور ابتدا تعداد ردیف (nr و یا nrow ) و تعداد ستون ( nc و یا ncol )تعریف می گردد.در واقع ماتریس بسط بردار است.
تابع در مثال زیر ابتدا یک توالی ۱۲ عددی توسط ()seq ایجاد و سپس با استفاده از تابع ()Matrixدر۳ ردیف و ۴ ستون یک ماتریس مرتب شده اند.
matrix(seq(1:12),nrow=3,ncol=4)
[,۱] [,۲] [,۳] [,۴]
[۱,] ۱ ۴ ۷ ۱۰
[۲,] ۲ ۵ ۸ ۱۱
[۳,] ۳ ۶ ۹ ۱۲
اگر بخواهیم به یک درایه از ماتریس دست پیدا کنیم از [A[i,j استفاده می کنیم.مثال:
a<-c(1,2,3,4,5,6,7,8,9,10)
> d<-matrix(a,2,5)
> d
[,۱] [,۲] [,۳] [,۴] [,۵]
[۱,] ۱ ۳ ۵ ۷ ۹
[۲,] ۲ ۴ ۶ ۸ ۱۰
> d[2,4]
[۱]۸
همان طور که مشاهده می شود عنصر ردیف دوم در ستون چهارم عدد ۸ می باشد.
برای دستیابی به کل عناصر یک ردیف یا ستون به صورت زیر انجام می دهیم.
d[,2]
[۱] ۳ ۴
ستون دوم ماتریس d ⇑
d[1,]
[۱] ۱ ۳ ۵ ۷ ۹
ردیف اول ماتریس d ⇑
در پیش فرض زبان R عناصر به صورت ستونی در سلول های ماتریس جایابی می شوند.برای اینکه نحوه جایابی به شکل ردیفی باشد از دستور byrow=T استفاده می شود.
x<-matrix(1:6,nrow=2,ncol=3)
> x
[,۱] [,۲] [,۳]
[۱,] ۱ ۳ ۵
[۲,] ۲ ۴ ۶
> x<-matrix(1:6,nrow=2,ncol=3,byrow=T)
> x
[,۱] [,۲] [,۳]
[۱,] ۱ ۲ ۳
[۲,] ۴ ۵ ۶
♦تابع ()dim
این تابع ابعاد ماتریس را در اختیار قرار می دهد.در مثال زیر ابعاد ماتریس d در مثال قبلی که دارای ۲ ردیف و ۵ ستون است نشان داده شده است.
dim(d)
[۱] ۵۲
همچنین برای تبدیل بردار به ماتریس می توان از تابع ()dim استفاده نمود.در مثال زیر بردار a با استفاده از این تابع به یک ماتریس با ابعاد ۲×۵ تبدیل شده است:
a<-c(1,2,3,4,5,6,7,8,9,10)
> dim(a)<-c(5,2)
> a
[,۱] [,۲]
[۱,] ۱ ۶
[۲,] ۲ ۷
[۳,] ۳ ۸
[۴,] ۴ ۹
[۵,] ۵ ۱۰
از تابع ()dim برای تبدیل ماتریس به یک بردار نیز استفاده می شود.برای این کار باید ابعاد ماتریس را از بین ببریم:
dim(a)<-NULL
> a
[۱] ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
با استفاده از تابع () dimمی توان یک ماتریس را به چند ماتریس کوچکتر تفکیک نمود.اولین عدد داخل پرانتز تعداد ردیف،عدد دوم تعداد ستون و سومین عدد تعداد ماتریس هاست.در اینجا ماتریس a دو ماتریس ۵×۱ تبدیل می شود:
> dim(a)<-c(1,5,2)
> a
, , ۱
[,۱] [,۲] [,۳] [,۴] [,۵]
[۱,] ۱ ۲ ۳ ۴ ۵
, , ۲
[,۱] [,۲] [,۳] [,۴] [,۵]
[۱,] ۶ ۷ ۸ ۹ ۱۰
♦تابع ()as.vector
برای تبدیل ماتریس ها به بردار از تابع ()as.vector نیز می توان استفاده نمود.در مثال زیر a که یک ماتریس ۵ در ۲ است که به یک بردار تبدیل شده است:
a<-matrix(1:10,nr=5,nc=2)
> a
[,۱] [,۲]
[۱,] ۱ ۶
[۲,] ۲ ۷
[۳,] ۳ ۸
[۴,] ۴ ۹
[۵,] ۵ ۱۰
> b<-as.vector(a)
> b
[۱] ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰
♦تابع ()as.matrix
این تابع بردار یا داده های چارچوب دار را به یک ماتریس تبدیل می کند.
c<-as.matrix(b)
> c
[,۱]
[۱,] ۱
[۲,] ۲
[۳,] ۳
[۴,] ۴
[۵,] ۵
[۶,] ۶
[۷,] ۷
[۸,] ۸
[۹,] ۹
[۱۰,]۱۰
♦تابع()t
ترانهاده یک ارایه توسط تابع ()t حاصل می شود.مثال:
a
[,۱] [,۲]
[۱,] ۱ ۶
[۲,] ۲ ۲۷
[۳,] ۳ ۸
[۴,] ۴ ۹
[۵,] ۵ ۱۰
> t(a)
[,۱] [,۲] [,۳] [,۴] [,۵]
[۱,] ۱ ۲ ۳ ۴ ۵
[۲,] ۶ ۷ ۸ ۹ ۱۰
♦عملگر%*%
برای ضرب کردن دو ماتریس از عملگر%*%استفاده می شود.در مثال زیر ماتریس m با ابعاد ۲×۳ در ماتریس n با ابعاد۲×۲ ضرب می شوند که حاصل آنها یک ماتریس ۲×۳ می باشد:
m<-matrix(c(4,2,1,3,4,2),3,2)
> m
[,۱] [,۲]
[۱,] ۴ ۳
[۲,] ۲ ۴
[۳,] ۱ ۲
n<-matrix(c(5,2,1,2),2,2)
> n
[,۱] [,۲]
[۱,] ۵ ۱
[۲,] ۲ ۲
m%*%n
[,۱] [,۲]
[۱,] ۲۶ ۱۰
[۲,] ۱۸ ۱۰
[۳,] ۵ ۹
اگر از علامت «*»بین دو ماتریس استفاده شود حاصل ضرب نظیر به نظیر عناصر در خروجی نشان داده می شود.مثال:
z<-matrix(2,nrow=2,ncol=2)
> z
[,۱] [,۲]
[۱,] ۲ ۲
[۲,] ۲ ۲
s<-matrix(3,nrow=2,ncol=2)
> s
[,۱] [,۲]
[۱,] ۳ ۳
[۲,] ۳ ۳
> s*z
[,۱] [,۲]
[۱,] ۶ ۶
[۲,] ۶ ۶
♦تابع ()det
دترمینانت یک ماتریس مربع را می توان با استفاده از تابع ()det به دست آورد:
a<-matrix(c(1,2,4,6),nrow=2)
> a
[,۱] [,۲]
[۱,] ۱ ۴
[۲,] ۲ ۶
> det(a)
[۱] -۲
♦تابع ()diag
برای استخراج ویا تغییر درایه های قطری ویا ساختن ماتریس قطری تابع ()diag به کار می رود.مثال:
z<-matrix(1:4,nr=2,nc=2)
> z
[,۱] [,۲]
[۱,] ۱ ۳
[۲,] ۲ ۴
> diag(z)
[۱] ۱ ۴
> diag(z)<-8
> z
[,۱] [,۲]
[۱,] ۸ ۳
[۲,] ۲ ۸
> diag(3)
[,۱] [,۲] [,۳]
[۱,] ۱ ۰ ۰
[۲,] ۰ ۱ ۰
[۳,] ۰ ۰ ۱
♦تابع ()dimnames
برای نامگذاری سطرها و ستون های یک ماتریس از این تابع ()dimnames استفاده میشود.مثال:
> z<-matrix(1:4,nr=2,nc=2)
> z
[,۱] [,۲]
[۱,] ۱ ۳
[۲,] ۲ ۴
> dimnames(z)<-list(c(“A”,”B”),c(“C”,”D”))
> z
C D
A 1 3
B 2 4
♦تابع ()solve
معکوس یک ماتریس مربعی را می توان با استفاده از تابع ()solve به صورت زیر به دست آورد:
n<-matrix(c(5,2,1,2),2,2)
> n
[,۱] [,۲]
[۱,] ۵ ۱
[۲,] ۲ ۲
> solve(n)
[,۱] [,۲]
[۱,] ۰.۲۵ -۰.۱۲۵
[۲,] -۰.۲۵ ۰.۶۲۵
♦تابع ()eigen
مقدار ویژه و بردار ویژه ماتریس ها را می توان با تابع ()eigen به دست آورد:
> eigen(n)
$values
[۱] ۵.۵۶۱۵۵۳ ۱.۴۳۸۴۴۷
$vectors
[,۱] [,۲]
[۱,] ۰.۸۷۱۹۲۸۲ -۰.۲۷۰۳۲۳۰
[۲,] ۰.۴۸۹۶۳۳۷ ۰.۹۶۲۷۶۹۷
ودر این قسمت« valuses »مقدار ویژه و «vectors»بردارویژه را نشان میدهد.
♦تابع ()rbind
در مثال زیر بردار ردیفی (۱۰۰و۲۰۰)به ماتریس n افزوده شده است.تعداد ردیف ها در ماتریس جدید (n2)از ۲ به ۳ افزایش یافته است:
> n2<-rbind(n,c(100,200))
> n2
[,۱] [,۲]
[۱,] ۵ ۱
[۲,] ۲ ۲
[۳,] ۱۰۰ ۲۰۰
♦تابع()cbind
در مثال زیر بردار ستونی (۳۰۰و۲۰۰و۱۰۰)به ماتریس n2 افزوده شده است.تعداد ستون ها در ماتریس جدید (n3) از ۲ به ۳ افزایش یافته است:
> n3<-cbind(n2,c(100,200,300))
> n3
[,۱] [,۲] [,۳]
[۱,] ۵ ۱ ۱۰۰
[۲,] ۲ ۲ ۲۰۰
[۳,] ۱۰۰ ۲۰۰ ۳۰۰
♦عملگر%/%
با استفاده از دستور« %/% » می توان خارج قسمت تقسیم را به دست آورد.مثال:
۵۰%/%۶
[۱]۸
♦عملگر%%
با استفاده از دستور«%%» می توان باقی مانده را به دست آورد.مثال:
۵۰%%۶
[۱]۲
♦تابع()abs
با استفاده از تابع()abs می توان قدر مطلق را نشان داد.مثال:
a<-c(-2,-6,7,-4)
> a
[۱] -۲ -۶ ۷ -۴
> abs(a)
[۱] ۲ ۶ ۷ ۴
> a<-matrix(c(1,-4,-7,2),nr=2,nc=2)
> a
[,۱] [,۲]
[۱,] ۱ -۷
[۲,] -۴ ۲
> abs(a)
[,۱] [,۲]
[۱,] ۱ ۷
[۲,] ۴ ۲
♦دستور ()ceiling و () floor
با استفاده از دستور ()ceiling اولین عدد صحیح بزرگتر و () floor اولین عدد صحیح کوچکتر رامی توان نشان داد.مثال:
x<-c(-2,-1.5,-1,2,1,2.5)
> a
[,۱] [,۲]
[۱,] ۱ -۷
[۲,] -۴ ۲
> ceiling(x)
[۱] -۲ -۱ -۱ ۲ ۱ ۳
> floor(x)
[۱] -۲ -۲ -۱ ۲ ۱ ۲
♦تابع ()exp
با استفاده از دستور ()exp می توان تابع نمایی را نشان داد.مثال:
exp(3)
[۱]۲۰.۰۸۵۵۴
♦تابع()gamma
با استفاده از دستور ()gammaمی توان گاما عدد مورد نظر را به دست آورد.مثال:
gamma(3)
[۱] ۲
♦تابع()lgamma
با دستور()lgamma میتوان لگاریتم عدد مورد نظر را به دست آورد.مثال:
lgamma(3)
[۱] ۰.۶۹۳۱۴۷۲
♦تابع ()log
برای بدست آوردن لگاریتم طبیعی یک عدد از دستور ()Logاستفاده میکنیم.مثال:
log(10)
[۱] ۲.۳۰۲۵۸۵
> log(8)
[۱] ۲.۰۷۹۴۴۲
♦تابع ()log10
برای بدست آوردن لگاریتم یک عدد در مبنای ۱۰ از دستور()Log10استفاده میکنیم.مثال:
log10(10)
[۱] ۱
> log10(2)
[۱] ۰.۳۰۱۰۳
♦تابع ()rank
با استفاده از دستور()rankداده ها از کوچک به بزرگ رتبه بندی مشود.مثال:
rank(c(14,5,8,4))
[۱]۴ ۲ ۳ ۱
♦تابع()sort
با استفاده از دستور()sortداده ها از کوچک به بزرگ مرتب می شود.مثال:
sort(c(14,5,8,4))
[۱] ۴ ۵ ۸ ۱۴
♦تابع()order
دستورorder()همان کار ()rankرا انجام میدهد.مثال:
order(c(14,5,8,4))
[۱] ۴ ۲ ۳ ۱
♦تابع()summary
با استفاده از دستور()summaryمی توان مقدار مینیمم،ماکسیمم،میانگین،میانه،چارک اول و سوم رانشان داد.مثال:
> summary(c(14,5,8,4))
Min. 1st Qu. Median Mean 3rd Qu. Max.
۴.۰۰ ۴.۷۵ ۶.۵۰ ۷.۷۵ ۹.۵۰ ۱۴.۰۰
♦تایع()sin و ()cos
با دستورSin() و Cos() میتوان مقادیر مورد نظر را بدست آورد.مثال:
sin(45)
[۱] ۰.۸۵۰۹۰۳۵
> cos(45)
[۱]۰.۵۲۵۳۲۲
♦تابعD(expression())
با استفاده از دستور(() D(expressionمی توان از معادله مورد نظر مشتق گرفت.مثال:
> D(expression(7*x^4+2*x*y),”x”)
۷ * (۴ * x^3) + ۲ * y
> D(expression(7*x^4+2*x*y),”y”)
۲ * x
♦تابع()polyroot
با استفاده از دستور polyroot()میتوان ریشه های معادله را به دست آورد.مثال:
۲x^2-3x+1=0که فقط ضرایب معادله را در دستور می نویسیم.
> polyroot(c(2,-3,1))
[۱] ۱+0i 2-0i
با دستور زیر می توان ریشه های چند معادله و چند مجهوله را بدست آورد.مثال:
۵x+2z+3w=7
۶x+7y+8z+2w=9
۷x+9y+4z+w=10
۸x+10y+7z+w=3
> a<-matrix(c(5,6,7,8,0,7,9,10,2,8,-4,7,3,2,1,1),nr=4)
> dimnames(a)<-list(c(1,2,3,4),c(“x”,”y”,”z”,”w”))
> a
x y z w
۱ ۵ ۰ ۲ ۳
۲ ۶ ۷ ۸ ۲
۳ ۷ ۹ -۴ ۱
۴ ۸ ۱۰ ۷ ۱
> solve(a,c(7,9,10,3))
x y z w
-۲.۹۱۹۸۶۰۶ ۲.۲۸۲۲۳۰۰ -۰.۵۷۸۳۹۷۲ ۷.۵۸۵۳۶۵۹