Сгенерировать и сохранить в виде вектора Rand выборку размера n значений случайной величины, распределённой по стандартному нормальному закону.
n=10000
rand=rnorm(n)
Написать цикл, вычисляющий среднее значение: а) всех элементов выборки Rand
sum=0
for (i in 1:n) {
sum = sum + rand[i]
if (i == n) {m = sum/n}
}
print(m)
## [1] 0.007950066
б) только положительных элементов выборки Rand
sum2=0
p=0
for (i in 1:n) {
if(rand[i]>0){
sum2 = sum2 + rand[i]
p= p + 1
}
if (i == n ) {m = sum2/p}
}
print(m)
## [1] 0.8050322
Проверяю правильность работы цикла
mean(rand[rand>0])
## [1] 0.8050322
С помощью функции as.vector(table(cut(Rand, -40:40/10)))) получите абсолютные частоты Fr принадлежности значений переменной Rand различным поддиапазонам отрезка [-4,4]. Постройте гистограмму для заданных частот с помощью функции barplot().
fr=as.vector(table(cut(rand, -40:40/10)))
barplot(fr)
Используя векторизованную операцию, преобразовать абсолютные частоты Fr в относительные Pr, поделив Fr на размер выборки n.
pr=fr/n
Реализовать цикл, формирующий по элементам вектора Pr вектор накопленных относительных частот. Построить график полученной функции зависимости кумулятивной суммы от номера диапазона.
sum_pr=seq(1,length(pr),by=1)
sum_pr[1]=pr[1];
for(i in 2:length(pr)) {
sum_pr[i]=sum_pr[i-1]+pr[i];
}
plot(sum_pr, type="l")
Реализовать цикл, определяющий порядковый номер диапазона k, на котором достигается заданное значение кумулятивной суммы 0 <= max <= 1.
k=1
max=0.5
for (k in 1:(length(sum_pr))) {
if (sum_pr[k]>max) break
}
sum_pr[k]
## [1] 0.5375
k
## [1] 41
Реализовать функцию, рассчитывающую скалярное произведение двух векторов равной длины. В случае векторов разной длины функция должна выдавать ошибку.
vector_sum<-function(a,b)
{
sum=0;
for (i in 1:length(a)) {
if (length(a)==length(b)) {
sum=sum+a[i]*b[i]
} else {
stop("Вектора имеют разную длину")
}
}
print(sum)
}
a=1:5;
b=1:5;
vector_sum(a,b)
## [1] 55
Реализовать функцию Kramer(A, b), решающую систему линейных алгебраических уравнений по заданной матрице коэффициентов A и свободному вектору b (правая часть системы) методом Крамера. Сравнить решения системы уравнений, полученные с помощью созданной функции Kramer и с помощью встроенной в R функции solve.
a=matrix(c(506,66,66,11),ncol=2,byrow=T)
b=c(2315.1,392.3)
kramer<-function(a,b)
{ m=length(a[1,])
x=vector(length=m)
c=matrix(ncol=m,nrow=m)
detA=det(a)
if(detA==0) {stop("Метод Крамера не поможет, нужно использовать метод Гаусса"); break;}
for (i in seq(1:m))
{
for(j in seq(1:m))
{ if (i==j) {
c[,j]=b
} else {
c[,j]=a[,j]
}
}
x[i]=det(c)/detA
}
print(x)
}
kramer(a,b)
## [1] -0.3518182 37.7745455
Используем встроенную функцию solve.
solve(a,b)
## [1] -0.3518182 37.7745455