Академический Документы
Профессиональный Документы
Культура Документы
высшего образования
«ФИНАНСОВЫЙ УНИВЕРСИТЕТ
ПРИ ПРАВИТЕЛЬСТВЕ РОССИЙСКОЙ ФЕДЕРАЦИИ»
(Финансовый университет)
Департамент анализа данных, принятия решений и финансовых технологий
С.А.Зададаев
(RStudio)
Учебно-методическое пособие
для проведения семинара №14
по дисциплине «Компьютерный практикум»
Москва, 2017
Федеральное государственное образовательное бюджетное учреждение
высшего образования
«ФИНАНСОВЫЙ УНИВЕРСИТЕТ
ПРИ ПРАВИТЕЛЬСТВЕ РОССИЙСКОЙ ФЕДЕРАЦИИ»
(Финансовый университет)
Департамент анализа данных, принятия решений и финансовых технологий
С.А.Зададаев
(RStudio)
Учебно-методическое пособие
для проведения семинара №14
по дисциплине «Компьютерный практикум»
Москва, 2017
2
УДК 004:316(073)
ББК 32.973.2и73
З-15
Автор: Зададаев С.А., канд. физ.-мат. наук, доцент, доцент департамента анализа данных,
принятия решений и финансовых технологий Финансового университета при
Правительстве Российской Федерации
Рецензент: Берзин Д.В., канд. физ.-мат. наук, доцент, доцент департамента анализа
данных, принятия решений и финансовых технологий Финансового университета при
Правительстве Российской Федерации
Учебное издание
Зададаев Сергей Алексеевич
Учебно-методическое пособие
для проведения семинара №14
по дисциплине «Компьютерный практикум»
3
Программирование пользовательских функций в R (RStudio)
4
На первый взгляд R никак не отреагировал на введенный текст, однако
в действительности, в памяти R создалась функция под именем f , значения
которой, согласно нашему коду в фигурных скобках {(x-3)^2}, зависят от
одной переменной следующим образом:
f ( x )=(x−3)2.
5
Как видим, строка внизу консоли R перечисляет все значения функции.
Таким образом, можно легко задавать/генерировать конечные
последовательности значений функции для заданных последовательностях
значений аргументов.
x 2−a
g ( x , a , b) = ,
x−b
6
g (-3, a=5) # Вычисление функции g(x=-3,a=5,b=1)
даст нам значение функции g для x=−3. При этом параметр a=5, а опущенное
значение параметра b будет приравнено к значению по умолчанию, т.е. 1.
Естественно, возможно и полное обращение к нашей функции, с указанием
всех ее аргументов:
g (6, a=9, b=3) # Вычисление функции g(x=6,a=9,b=3)
7
Построение графиков функций
x 2−a
Задание 3. Построить графики функции g ( x , a , b ) = на отрезке
x−b
[ −40 ; 40 ] при различных значениях параметров:
a) a=4 , b=−5 ;
b) a=4 , b=2 ;
c) a=4 , b=5.
9
Для того, чтобы вернуться к предыдущему или последующему графику
используйте в левой верхней части окна графика стрелки вперед и назад.
Также, полезно нажать кнопку Zoom, находящуюся чуть правее, для
увеличения картинки.
Кстати, часто бывает необходимым разместить несколько графиков на
одном рисунке. Достигается это заменой последующих plot на lines.
Например:
plot(x,g(x,0,-5),type = "l", xlim = c(-50,50), ylim =c(-50,50) ,ylab = "y") # График g(x, 0, -5)
lines(x,g(x,20,-5),type = "l", xlim = c(-50,50), ylim =c(-50,50)) # Добавлен график g(x,20, -5)
lines(x,g(x,50,-5),type = "l", xlim = c(-50,50), ylim =c(-50,50)) # Добавлен график g(x,50, -5)
10
Как можно было заметить мы использовали дополнительные
параметры в команде plot: xlim и ylim, устанавливающие границы изменения
x и y на графике от −50 до 50.
11
?plot # Вызов справки по команде plot
13
На практике часто стоит задача не только вычисления значения какого-
либо признака, но и ответ на вопрос о качественном характере исследуемого
явления. Например, при изучении зависимости спроса от предложения нас
больше интересует не значения самих зависимостей, а будет ли спрос в
принципе эластичным или нет для конкретных цен.
1
функции Q ( P )= . Здесь под спросом Q мы понимаем долю желающих
1+ P 2
приобрести товар по цене P.
E ' ( P)
EQ ,P (P)= P
E (P)
14
|EQ , P ( P)|> 1.
В нашем случае
1 ' −2 P
(
Q' ( P ) =
1+ P2 )
=
( 1+ P2 )
2.
15
Замечание для отличников
Здесь команда list объединит в одном объекте все что нам надо. Не
забудем вставить этот код в строчку нашей функции перед командой return и
исправить аргумент вывода Result в команде return:
return(Result) # Возвращение итогового значения Result
16
при этом мы совершали какие-либо вычисления, то в качестве возвращаемого значения
будет определено последнее).
x2 , x ≥ 0
W ( x )=
{
sin ( 2 x ) , x <0
18
Решение. На первый взгляд, задача для нас уже не представляет
проблемы. Действительно, используя оператор if () {} else {} можно
получить вполне корректный код функции:
W <- function(x)
{
Res <- ifelse(x>=0, x^2, sin(2*x))
return(Res)
}
20
Для построения функций, заданных по-разному на трех и более
промежутках, вместо вложенных конструкций ifelse лучше использовать
оператор квадратных скобок […] – самый мощный для векторизованных
процедур.
sin (2 x ) , x <0
{
S ( x )= x2 , 0 ≤ x ≤2 ,
6−x , 2< x
S <- function(x)
{
A <- (x<0) # Создаем массив из "TRUE/да" и "FALSE/нет" для x < 0
B <- (x>=0)&(x<=2) # Создаем массив из "TRUE/да" и "FALSE/нет" для (x >= 0) и (x <=
2)
D <- (x>2) # Создаем массив из "TRUE/да" и "FALSE/нет" для x > 2
x[A] <- sin(2*x[A]) # Вычисляем левую ветвь функции
x[B] <- x[B]^2 # Вычисляем середину функции
x[D] <- 6 - x[D] # Вычисляем правую ветвь функции
Res <- x
return(Res)
}
h(2,-2)
[1] 2
> h(6,3,2)
[1] 4
> h(0,0,5)
[1] "Функция не определена"
> h(-2,0,3)
[1] -Inf
Приложение
23
if (abs(Power-round(Power,0))>err) {paste("Ошибка! Степень корня не целое
число:",Power)} else
{
A <- (x>=0)
B <- (x<0)
if (abs(Power/2-round(Power/2,0))>0.1) # Нечетный случай
{
x[A] <- x[A]^(1/Power)
x[B] <- -(-x[B])^(1/Power)
Res <- x
return(x)
}
else #Случай четной степени
{
x[A] <- x[A]^(1/Power)
x[B] <- NA
Res <- x
return(x)
}
}
}
# Примеры обращения:
Radical(-8) # Кубический корень из -8
Radical(34.09, Power = 7) # Корень 7 степени из 34.09
Radical(64, 6) # Арифметический корень 6-ой степени из 64
Radical(-81, 2) # Арифметический корень из -81 (не определен)
Radical(4, 8.03) # Ошибочная степень корня 8.03
# Иллюстрации
x <- seq(-1.5,1.5,length.out = 501)
plot(x,Radical(x, 1),type = "l",lwd = 2)
abline(h = 0, v = 0, col = "gray40")
lines(x,Radical(x, 2),type = "l",col="blue",lwd = 2)
lines(x,Radical(x, 3),type = "l",col="green",lwd = 2)
lines(x,Radical(x, 8),type = "l",col="red",lwd = 2)
lines(x,Radical(x, 15),type = "l",col="orange",lwd = 2)
24
Программирование пользовательских функций в R (RStudio)
Учебно-методическое пособие
для проведения семинара №14
по дисциплине «Компьютерный практикум»
Автор:
Зададаев Сергей Алексеевич, кандидат физ.-мат. наук, доцент, доцент департамента
анализа данных, принятия решений и финансовых технологий
25