#نیوتون_رافسون:
یکی از الگوریتم های تکراری جهت ریشه یابی معادلات خطی و غیر خطی ،
تابع مورد استفاده بایستی
با حدس اولیه ریشه شروع میشود،
فرض میکنیم ریشه واقعی
حدسی:
و
در رابطه زیر قرار میگیرد
📝📝
و روند ریشه یابی در زیر میبینیم 👇👇👇
@R_Experts
یکی از الگوریتم های تکراری جهت ریشه یابی معادلات خطی و غیر خطی ،
تابع مورد استفاده بایستی
مشتق پذیر
با حدس اولیه ریشه شروع میشود،
فرض میکنیم ریشه واقعی
R
حدسی:
X0
و
h
در رابطه زیر قرار میگیرد
R=x0+h
📝📝
و روند ریشه یابی در زیر میبینیم 👇👇👇
@R_Experts
به تابع زیر توجه فرمایید
@R_Experts
f<- function(x) {
exp(2 * x) - x - 6
}
curve(f, col = 'blue', lty = 2, lwd = 2, xlim=c(-5,5), ylim=c(-5,5), ylab='f(x)')
abline(h=0)
abline(v=0)
@R_Experts
حال طبق توضیحات بالا داریم :
@R_Experts
newton <- function(f, tol=1E-12,x0=1,N=20) {
h <- 0.001
i <- 1; x1 <- x0
p <- numeric(N)
while (i<=N) {
df.dx <- (f(x0+h)-f(x0))/h
x1 <- (x0 - (f(x0)/df.dx))
p[i] <- x1
i <- i + 1
if (abs(x1-x0) < tol) break
x0 <- x1
}
return(p[1:(i-1)])
}
f <- function(x) {
exp(2 * x) - x - 6
}
p <- newton(f, x0=1, N=20)
p
> p <- newton(f, x0=1, N=10)
> p
[1] 0.9717930 0.9708719 0.9708700 0.9708700 0.9708700 0.9708700
>
> p <- newton(f, x0=1, N=20)
> p
[1] 0.9717930 0.9708719 0.9708700 0.9708700 0.9708700 0.9708700
>
@R_Experts
در الگوریتم دیگری از این روش در زیر داریم :
@R_Experts
newton.raphson <- function(f, a, b, tol = 1e-5, n = 1000) {
require(numDeriv) # Package for computing f'(x)
x0 <- a # Set start value to supplied lower bound
k <- n # Initialize for iteration results
# Check the upper and lower bounds to see if approximations result in 0
fa <- f(a)
if (fa == 0.0) {
return(a)
}
fb <- f(b)
if (fb == 0.0) {
return(b)
}
for (i in 1:n) {
dx <- genD(func = f, x = x0)$D[1] # First-order derivative f'(x0)
x1 <- x0 - (f(x0) / dx) # Calculate next value x1
k[i] <- x1 # Store x1
# Once the difference between x0 and x1 becomes sufficiently small, output the results.
if (abs(x1 - x0) < tol) {
root.approx <- tail(k, n=1)
res <- list('root approximation' = root.approx, 'iterations' = k)
return(res)
}
# If Newton-Raphson has not yet reached convergence set x1 as x0 and continue
x0 <- x1
}
print('Too many iterations in method')
}
f<- function(x) {
exp(2 * x) - x - 6
}
uniroot(f, c(.5, 1.5))
> uniroot(f, c(.5, 1.5))
$root
[1] 0.9708565
$f.root
[1] -0.000175188
$iter
[1] 6
$init.it
[1] NA
$estim.prec
[1] 6.103516e-05
>
@R_Experts
#کرنل
یکی از دستورات دیگر رسم چگالی کرنل استفاده از دستور
میباشد.
مثال :
@R_Experts
یکی از دستورات دیگر رسم چگالی کرنل استفاده از دستور
density
میباشد.
مثال :
d <- density(mtcars$mpg)
plot(d, main="Kernel Density of Miles Per Gallon")
polygon(d, col="red", border="blue")
@R_Experts
#Correlations
با تابع
قادر به محاسبه ی همبستگی و
با تابع
قادر به محاسبه کواریانس خواهیم بود
@R_Experts
با تابع
cor
قادر به محاسبه ی همبستگی و
با تابع
cov
قادر به محاسبه کواریانس خواهیم بود
@R_Experts
> x <- mtcars[1:3]
> y <- mtcars[4:6]
> cor(x, y)
hp drat wt
mpg -0.7761684 0.6811719 -0.8676594
cyl 0.8324475 -0.6999381 0.7824958
disp 0.7909486 -0.7102139 0.8879799
>
@R_Experts
وقتی دو سری داده داریم و بر روی اون ها یکی از ضرایب همبستگی پیرسن یا اسپیرمن یا کندال میخواهیم به دست اوریم ،
از دستور
در بسته ی
استفاده میکنیم ،
ولی وقتی یک ساختار به مانند ماتریس یا دیتا فریم داریم
در به دست اوردن پیرسن و اسپیرمن
دستور و بسته معرفی شده در بالا میتونه به ما کمک کنه به مثال زیر توجه کنین 👇👇👇👇
@R_Experts
از دستور
cor.test
در بسته ی
stats
استفاده میکنیم ،
ولی وقتی یک ساختار به مانند ماتریس یا دیتا فریم داریم
در به دست اوردن پیرسن و اسپیرمن
دستور و بسته معرفی شده در بالا میتونه به ما کمک کنه به مثال زیر توجه کنین 👇👇👇👇
@R_Experts
library("Hmisc")
x <- c(-2, -1, 0, 1, 2)
y <- c(4, 1, 0, 1, 4)
z <- c(1, 2, 3, 4, NA)
v <- c(1, 2, 3, 4, 5)
rcorr(cbind(x,y,z,v))
cor.test(x,y)
cor.test(x,y,v)
وقتی این مثال رو اجرا کنیم
متوجه میشیم که
این بسته ضرایب همبستگی و تعداد عناصری که شرکت دارن و همچنین سطح معنی داری رو نیز در اختیار ما میگذاره
@R_Experts
set.seed()
#آموزش
#تولید_عدد_تصادفی_یکسان_در_سیستم_های_متفاوت
#نقطه_شروع_تولید_عدد_تصادفی
#set #seed
اين دستور نقطه شروع ، توليد اعداد تصادفي رو تنظيم و ثابت ميكنه.
وقتی برنامه ای مینویسین که توی اون برنامه از اعداد تصادفی استفاده شده و کد ها رو برای دیگری میفرستین برای اینکه طرف مقابل هم به همان نتیجه شما برسه توی خروجی (بدلیل تصادفی بودن هر بار اعداد متفاوتی توی اون بازه تولید میشه) این دستور رو اول دستوراتتون مینویسین و یک عدد به عنوان شناسه بهش تعریف میکنین
از کاربرد دیگر این دستور وقتی هست که استاد توی کلاس تدریس میکنه و دانشجو ها برای اینکه به نتایج یکسانی جهت مقایسه برسند میتونه از این دستور استفاده کنه
به عنوان مثال من یک نمونه تصادفی از توزیع نرمال تولید میکنم اگر بدون نوشتن این دستور شما هم یک نمونه تصادفی تولید کنید این دوتا نمونه باهم یکسان نخواهند بود
ولی اگه اون دستور رو بنویسم و شناسه دلخواهی رو براش تعریف کنم هر شخص دیگه اگه اون دستور رو اجرا کنه به همون عدد میرسه
> set.seed(10)
> rnorm(1)
[1] 0.01874617
شما هم اگه دستور بالا رو اجرا کنید به همون عدد خواهید رسید
@R_Experts
برای اولین بار الگوریتمی توسعه یافته
شده است که بر اساس سطح
متابولیتی در نمونه خون می تواند به
درستی پیش بینی کند که ایا یک کودک
در اسپکتروم بیماری اتیزم قرار دارد یا خیر،
منبع:
https://news.rpi.edu/content/2017/03/16/blood-test-autism
@R_Experts
شده است که بر اساس سطح
متابولیتی در نمونه خون می تواند به
درستی پیش بینی کند که ایا یک کودک
در اسپکتروم بیماری اتیزم قرار دارد یا خیر،
منبع:
https://news.rpi.edu/content/2017/03/16/blood-test-autism
@R_Experts
news.rpi.edu
A Blood Test for Autism
pAn algorithm based on levels of metabolites found in a blood sample can accurately predict whether a child is on the Autism spectrum of disorder (ASD), based upon a recent study. /p