R語言中的數學計算

2021-01-15 格數致知

前言

R是作為統計語言,生來就對數學有良好的支持,一個函數就能實現一種數學計算,所以用R語言做數學計算題特別方便。如果計算器中能嵌入R的計算函數,那麼絕對是一種高科技產品。

本文總結了R語言用於初等數學中的各種計算。


目錄

基本計算

三角函數計算

複數計算

方程計算

1 基本計算

四則運算: 加減乘除, 餘數, 整除, 絕對值, 判斷正負

> a<-10;b<-5# 加減乘除> a+b;a-b;a*b;a/b[1] 15[1] 5[1] 50[1] 2# 餘數,整除> a%%b;a%/%b[1] 0[1] 2# 絕對值> abs(-a)[1] 10# 判斷正負> sign(-2:3)[1] -1 -1  0  1  1  1

數學計算: 冪, 自然常用e的冪, 平方根, 對數

> a<-10;b<-5;c<-4# 冪> c^b;c^-b;c^(b/10)[1] 1024[1] 0.0009765625[1] 2# 自然常數e> exp(1)[1] 2.718282# 自然常數e的冪> exp(3)[1] 20.08554# 平方根> sqrt(c)[1] 2# 以2為底的對數> log2(c)[1] 2# 以10為底的對數> log10(b)[1] 0.69897# 自定義底的對數> log(c,base = 2)[1] 2# 自然常數e的對數> log(a,base=exp(1))[1] 2.302585# 指數對數操作> log(a^b,base=a)[1] 5> log(exp(3))[1] 3

比較計算: ==, >, <, !=, <=, >=, isTRUE, identical

> a<-10;b<-5# 比較計算> a==a;a!=b;a>b;a<=b;a>=c[1] TRUE[1] TRUE[1] TRUE[1] FALSE[1] FALSE[1] TRUE# 判斷是否為TRUE> isTRUE(a)[1] FALSE> isTRUE(!a)[1] FALSE# 精確比較兩個對象> identical(1, as.integer(1))[1] FALSE> identical(NaN, -NaN)[1] TRUE> f <- function(x) x> g <- compiler::cmpfun(f)> identical(f, g)[1] TRUE

邏輯計算: &, |, &&, ||, xor

> x<-c(0,1,0,1)> y<-c(0,0,1,1)# 只比較第一個元素 &&, ||> x && y;x || y[1] FALSE[1] FALSE# S4對象的邏輯運算,比較所有元素 &, |> x & y;x | y[1] FALSE FALSE FALSE  TRUE[1] FALSE  TRUE  TRUE  TRUE# 異或> xor(x,y)[1] FALSE  TRUE  TRUE FALSE> xor(x,!y)[1]  TRUE FALSE FALSE  TRUE

約數計算: ceiling,floor,trunc,round,signif

# 向上取整> ceiling(5.4)[1] 6# 向下取整> floor(5.8)[1] 5# 取整數> trunc(3.9)[1] 3# 四捨五入> round(5.8)# 四捨五入,保留2位小數> round(5.8833, 2)[1] 5.88# 四捨五入,保留前2位整數> signif(5990000,2)[1] 6e+06

數組計算: 最大, 最小, 範圍, 求和, 均值, 加權平均, 連乘, 差分, 秩,,中位數, 分位數, 任意數,全體數

> d<-seq(1,10,2);d[1] 1 3 5 7 9# 求最大值,最小值,範圍range> max(d);min(d);range(d)[1] 9[1] 1[1] 1 9# 求和,均值> sum(d),mean(d)[1] 25[1] 5# 加權平均> weighted.mean(d,rep(1,5))[1] 5> weighted.mean(d,c(1,1,2,2,2))[1] 5.75# 連乘> prod(1:5)[1] 120# 差分> diff(d)[1] 2 2 2 2# 秩> rank(d)[1] 1 2 3 4 5# 中位數> median(d)[1] 5# 分位數> quantile(d)0%  25%  50%  75% 100%1    3    5    7    9# 任意any,全體all> e<-seq(-3,3);e[1] -3 -2 -1  0  1  2  3> any(e<0);all(e<0)[1] TRUE[1] FALSE

排列組合計算: 階乘, 組合, 排列

# 5!階乘> factorial(5)[1] 120# 組合, 從5個中選出2個> choose(5, 2)[1] 10# 列出從5個中選出2個的組合所有項> combn(5,2)     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10][1,]    1    1    1    1    2    2    2    3    3     4[2,]    2    3    4    5    3    4    5    4    5     5# 計算0:10的組合個數> for (n in 0:10) print(choose(n, k = 0:n))[1] 1[1] 1 1[1] 1 2 1[1] 1 3 3 1[1] 1 4 6 4 1[1]  1  5 10 10  5  1[1]  1  6 15 20 15  6  1[1]  1  7 21 35 35 21  7  1[1]  1  8 28 56 70 56 28  8  1[1]   1   9  36  84 126 126  84  36   9   1[1]   1  10  45 120 210 252 210 120  45  10   1# 排列,從5個中選出2個> choose(5, 2)*factorial(2)[1] 20

累積計算: 累加, 累乘, 最小累積, 最大累積

# 累加> cumsum(1:5)[1]  1  3  6 10 15# 累乘> cumprod(1:5)[1]   1   2   6  24 120> e<-seq(-3,3);e[1] -3 -2 -1  0  1  2  3# 最小累積cummin> cummin(e)[1] -3 -3 -3 -3 -3 -3 -3# 最大累積cummax> cummax(e)[1] -3 -2 -1  0  1  2  3

兩個數組計算: 交集, 併集, 差集, 數組是否相等, 取唯一, 查匹配元素的索引, 找重複元素索引

# 定義兩個數組向量> x <- c(9:20, 1:5, 3:7, 0:8);x [1]  9 10 11 12 13 14 15 16 17 18 19 20  1  2  3  4  5[18]  3  4  5  6  7  0  1  2  3  4  5  6  7  8> y<- 1:10;y[1]  1  2  3  4  5  6  7  8  9 10# 交集> intersect(x,y)[1]  9 10  1  2  3  4  5  6  7  8# 併集> union(x,y) [1]  9 10 11 12 13 14 15 16 17 18 19 20  1  2  3  4  5[18]  6  7  0  8# 差集,從x中排除y> setdiff(x,y) [1] 11 12 13 14 15 16 17 18 19 20  0# 判斷是否相等> setequal(x, y)[1] FALSE# 取唯一> unique(c(x,y)) [1]  9 10 11 12 13 14 15 16 17 18 19 20  1  2  3  4  5[18]  6  7  0  8# 找到x在y中存在的元素的索引> which(x %in% y) [1]  1  2 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28[18] 29 30 31> which(is.element(x,y)) [1]  1  2 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28[18] 29 30 31# 找到重複元素的索引> which(duplicated(x)) [1] 18 19 20 24 25 26 27 28 29 30

2 三角函數計算

2.1 三角函數

在直角三角形中僅有銳角(大小在0到90度之間的角)三角函數的定義。給定一個銳角θ,可以做出一個直角三角形,使得其中的一個內角是θ。設這個三角形中,θ的對邊、鄰邊和斜邊長度分別是a、b和h。

三角函數的6種關係:正弦,餘弦,正切,餘切,正割,餘割。

θ的正弦是對邊與斜邊的比值:sin θ = a/h

θ的餘弦是鄰邊與斜邊的比值:cos θ = b/h

θ的正切是對邊與鄰邊的比值:tan θ = a/b

θ的餘切是鄰邊與對邊的比值:cot θ = b/a

θ的正割是斜邊與鄰邊的比值:sec θ = h/b

θ的餘割是斜邊與對邊的比值:csc θ = h/a

三角函數的特殊值:

函數    0     pi/12                  pi/6          pi/4           pi/3             5/(12*pi)              pi/2sin     0     (sqrt(6)-sqrt(2))/4    1/2           sqrt(2)/2      sqrt(3)/2        (sqrt(6)+sqrt(2))/4    1cos     1     (sqrt(6)+sqrt(2))/4    sqrt(3)/2     sqrt(2)/2      1/2              (sqrt(6)-sqrt(2))/4    0tan     0     2-sqrt(3)              sqrt(3)/3     1              sqrt(3)          2+sqrt(3)              NAcot     NA    2+sqrt(3)              sqrt(3)       1              sqrt(3)/3        2-sqrt(3)              0sec     1     sqrt(6)-sqrt(2)        sqrt(3)*2/3   sqrt(2)        2                sqrt(6)-sqrt(2)        NAcsc     NA    2                      sqrt(2)       sqrt(3)*2/3    sqrt(6)-sqrt(2)  1                      NA

三角基本函數: 正弦,餘弦,正切

# 正弦> sin(0);sin(1);sin(pi/2)[1] 0[1] 0.841471[1] 1# 餘弦> cos(0);cos(1);cos(pi)[1] 1[1] 0.5403023[1] -1# 正切> tan(0);tan(1);tan(pi)[1] 0[1] 1.557408[1] -1.224647e-16

接下來,我們用ggplot2包來畫出三角函數的圖形。

# 加載ggplot2的庫> library(ggplot2)> library(scales)

三角函數畫圖

# x坐標> x<-seq(-2*pi,2*pi,by=0.01)# y坐標> s1<-data.frame(x,y=sin(x),type=rep('sin',length(x)))# 正弦> s2<-data.frame(x,y=cos(x),type=rep('cos',length(x)))# 餘弦> s3<-data.frame(x,y=tan(x),type=rep('tan',length(x)))# 正切> s4<-data.frame(x,y=1/tan(x),type=rep('cot',length(x)))# 餘切> s5<-data.frame(x,y=1/sin(x),type=rep('sec',length(x)))# 正割> s6<-data.frame(x,y=1/cos(x),type=rep('csc',length(x)))# 餘割> df<-rbind(s1,s2,s3,s4,s5,s6)# 用ggplot2畫圖> g<-ggplot(df,aes(x,y))> g<-g+geom_line(aes(colour=type,stat='identity'))> g<-g+scale_y_continuous(limits=c(0, 2))> g<-g+scale_x_continuous(breaks=seq(-2*pi,2*pi,by=pi),labels=c("-2*pi","-pi","0","pi","2*pi"))> g

2.1 反三角函數

基本的反三角函數定義:

反三角函數     定義         值域arcsin(x) = y   sin(y) = x   - pi/2 <= y <= pi/2arccos(x) = y   cos(y) = x      0 <= y <= pi,arctan(x) = y   tan(y) = x      - pi/2 < y < pi/2arccsc(x) = y   csc(y) = x      - pi/2 <= y <= pi/2, y!=0arcsec(x) = y   sec(y) = x      0 <= y <= pi, y!=pi/2arccot(x) = y   cot(y) = x      0 <  y <  pi

反正弦,反餘弦,反正切

# 反正弦asin> asin(0);asin(1)[1] 0[1] 1.570796  # pi/2=1.570796# 反餘弦acos> acos(0);acos(1)[1] 1.570796 # pi/2=1.570796[1] 0# 反正切atan> atan(0);atan(1)[1] 0[1] 0.7853982 # pi/4=0.7853982

反三角函數畫圖

# x坐標> x<-seq(-1,1,by=0.005)# y坐標> s1<-data.frame(x,y=asin(x),type=rep('arcsin',length(x)))> s2<-data.frame(x,y=acos(x),type=rep('arccos',length(x)))> s3<-data.frame(x,y=atan(x),type=rep('arctan',length(x)))> s4<-data.frame(x,y=1/atan(x),type=rep('arccot',length(x)))> s5<-data.frame(x,y=1/asin(x),type=rep('arcsec',length(x)))> s6<-data.frame(x,y=1/acos(x),type=rep('arccsc',length(x)))> df<-rbind(s1,s2,s3,s4,s5,s6)# 用ggplot2畫圖> g<-ggplot(df,aes(x,y))> g<-g+geom_line(aes(colour=type,stat='identity'))> g<-g+scale_y_continuous(limits=c(-2*pi,2*pi),breaks=seq(-2*pi,2*pi,by=pi),labels=c("-2*pi","-pi","0","pi","2*pi"))> g

2.3 三角函數公式

接下來,用單元測試的方式,來描述三角函數的數學公式。通過testthat包,進行單元測試,關於testthat包的安裝和使用,請參考文章:在巨人的肩膀前行 催化R包開發

# 加載testthat包> library(testthat)# 定義變量> a<-5;b<-10

平方和公式:

expect_that(sin(a)^2+cos(a)^2,equals(1))

和角公式

sin(a+b) = sin(a)*cos(b)+sin(b)*cos(a)

sin(a-b) = sin(a)*cos(b)-sin(b)*cos(a)

cos(a+b) = cos(a)*cos(b)-sin(b)*sin(a)

cos(a-b) = cos(a)*cos(b)+sin(b)*sin(a)

tan(a+b) = (tan(a)+tan(b))/(1-tan(a)*tan(b))

tan(a-b) = (tan(a)-tan(b))/(1+tan(a)*tan(b))

expect_that(sin(a)*cos(b)+sin(b)*cos(a),equals(sin(a+b)))expect_that(sin(a)*cos(b)-sin(b)*cos(a),equals(sin(a-b)))expect_that(cos(a)*cos(b)-sin(b)*sin(a),equals(cos(a+b)))expect_that(cos(a)*cos(b)+sin(b)*sin(a),equals(cos(a-b)))expect_that((tan(a)+tan(b))/(1-tan(a)*tan(b)),equals(tan(a+b)))expect_that((tan(a)-tan(b))/(1+tan(a)*tan(b)),equals(tan(a-b)))

2倍角公式

expect_that(cos(a)^2-sin(a)^2,equals(cos(2*a)))expect_that(2*cos(a)^2-1,equals(cos(2*a)))expect_that(1-2*sin(a)^2,equals(cos(2*a)))

3倍角公式

expect_that(4*cos(a)^3-3*cos(a),equals(cos(3*a)))expect_that(-4*sin(a)^3+3*sin(a),equals(sin(3*a)))

半角公式

sin(a/2) = sqrt((1-cos(a))/2)

cos(a/2) = sqrt((1+cos(a))/2)

tan(a/2) = sqrt((1-cos(a))/(1+cos(a))) = sin(a)/(1+cos(a)) = (1-cos(a))/sin(a)

expect_that(sqrt((1-cos(a))/2),equals(abs(sin(a/2))))expect_that(sqrt((1+cos(a))/2),equals(abs(cos(a/2))))expect_that(sqrt((1-cos(a))/(1+cos(a))),equals(abs(tan(a/2))))expect_that(abs(sin(a)/(1+cos(a))),equals(abs(tan(a/2))))expect_that(abs((1-cos(a))/sin(a)),equals(abs(tan(a/2))))

和差化積

sin(a)*cos(b) = (sin(a+b)+sin(a-b))/2

cos(a)*sin(b) = (sin(a+b)-sin(a-b))/2

cos(a)*cos(b) = (cos(a+b)+cos(a-b))/2

sin(a)*sin(b) = (cos(a-b)-cos(a+b))/2

expect_that((sin(a+b)+sin(a-b))/2,equals(sin(a)*cos(b)))expect_that((sin(a+b)-sin(a-b))/2,equals(cos(a)*sin(b)))expect_that((cos(a+b)+cos(a-b))/2,equals(cos(a)*cos(b)))expect_that((cos(a-b)-cos(a+b))/2,equals(sin(a)*sin(b)))

積化和差

sin(a)+sin(b) = 2*sin((a+b)/2)*cos((a+b)/2)

sin(a)-sin(b) = 2*cos((a+b)/2)*cos((a-b)/2)

cos(a)+cos(b) = 2*cos((a+b)/2)*cos((a-b)/2)

cos(a)-cos(b) = -2*sin((a+b)/2)*sin((a-b)/2)

expect_that(sin(a)+sin(b),equals(2*sin((a+b)/2)*cos((a-b)/2)))expect_that(sin(a)-sin(b),equals(2*cos((a+b)/2)*sin((a-b)/2)))expect_that(2*cos((a+b)/2)*cos((a-b)/2),equals(cos(a)+cos(b)))expect_that(-2*sin((a+b)/2)*sin((a-b)/2),equals(cos(a)-cos(b)))

萬能公式

sin(2*a)=2*tan(a)/(1+tan(a)^2)

cos(2*a)=(1-tan(a)^2)/(1+tan(a)^2)

tan(2*a)=2*tan(a)/(1-tan(a)^2)

expect_that(sin(2*a),equals(2*tan(a)/(1+tan(a)^2)))expect_that((1-tan(a)^2)/(1+tan(a)^2),equals(cos(2*a)))expect_that(2*tan(a)/(1-tan(a)^2),equals(tan(2*a)))

平方差公式

expect_that(sin(a)^2-sin(b)^2,equals(sin(a+b)*sin(a-b)))expect_that(cos(a)^2-sin(b)^2,equals(cos(a+b)*cos(a-b)))

降次升角公式

cos(a)^2=(1+cos(2*a))/2

sin(a)^2=(1-cos(2*a))/2

expect_that((1+cos(2*a))/2,equals(cos(a)^2))expect_that((1-cos(2*a))/2,equals(sin(a)^2))

輔助角公式

expect_that(sqrt(a^2+b^2)*sin(a+atan(b/a)),equals(a*sin(a)+b*cos(a)))

3 複數計算

複數,為實數的延伸,它使任一多項式都有根。複數中的虛數單位i,是-1的一個平方根,即i^2 = -1。任一複數都可表達為x + yi,其中x及y皆為實數,分別稱為複數之「實部」和「虛部」。

3.1 創建一個複數

# 直接創建複數> ai<-5+2i;ai[1] 5+2i> class(ai)[1] "complex"# 通過complex()函數創建複數> bi<-complex(real=5,imaginary=2);bi[1] 5+2i> is.complex(bi)[1] TRUE# 實數部分> Re(ai)[1] 5# 虛數部分> Im(ai)[1] 2# 取模> Mod(ai)[1] 5.385165 # sqrt(5^2+2^2) = 5.385165# 取輻角> Arg(ai)[1] 0.3805064# 取軛> Conj(ai)[1] 5-2i

3.2 複數四則運算

加法公式:(a+bi)+(c+di) = (a+c)+(b+d)i

減法公式:(a+bi)-(c+di)= (a-c)+(b-d)i

乘法公式:(a+bi)(c+di) = ac+adi+bci+bidi=ac+bdi^2+(ad+bc)i=(ac-bd)+(ad+bc)i

除法公式:(a+bi)/(c+di) = ((ac+bd)+(bc-ad)i)/(c^2+d^2)

# 定義係數a<-5;b<-2;c<-3;d<-4# 創建兩個複數ai<-complex(real=a,imaginary=b)bi<-complex(real=c,imaginary=d)expect_that(complex(real=(a+c),imaginary=(b+d)),equals(ai+bi))expect_that(complex(real=(a-c),imaginary=(b-d)),equals(ai-bi))expect_that(complex(real=(a*c-b*d),imaginary=(a*d+b*c)),equals(ai*bi))expect_that(complex(real=(a*c+b*d),imaginary=(b*c-a*d))/(c^2+d^2),equals(ai/bi))

3.3 複數開平方根

# 在實數域,給-9開平方根> sqrt(-9)[1] NaN# 在複數域,給-9開平方根> sqrt(complex(real=-9))[1] 0+3i

4 方程計算

方程計算是數學計算的一種基本形式,R語言也可以很方便地幫助我們解方程,下面將介紹一元多次的方程,和二元一次方程的解法。

解一元多次方程,可以用uniroot()函數!

4.1 一元一次方程

一元一次方程:a*x+b=0,設a=5,b=10,求x?

# 定義方程函數> f1 <- function (x, a, b) a*x+b# 給a,b常數賦值> a<-5;b<-10# 在(-10,10)的區間,精確度為0.0001位,計算方程的根> result <- uniroot(f1,c(-10,10),a=a,b=b,tol=0.0001)# 列印方程的根x> result$root[1] -2

一元一次方程非常容易解得,方程的根是-2!

以圖形展示方程:y = 5*x + 10

# 創建數據點> x<-seq(-5,5,by=0.01)> y<-f1(x,a,b)> df<-data.frame(x,y)# 用ggplot2來畫圖> g<-ggplot(df,aes(x,y))> g<-g+geom_line(col='red') #紅色直線> g<-g+geom_point(aes(result$root,0),col="red",size=3) #點> g<-g+geom_hline(yintercept=0)+geom_vline(yintercept=0) #坐標軸> g<-g+ggtitle(paste("y =",a,"* x +",b))> g

4.2 一元二次方程

一元二次方程:a*x^2+b*x+c=0,設a=1,b=5,c=6,求x?

> f2 <- function (x, a, b, c) a*x^2+b*x+c> a<-1;b<-5;c<-6> result <- uniroot(f2,c(0,-2),a=a,b=b,c=c,tol=0.0001)> result$root[1] -2

把參數帶入方程,用uniroot()函數,我們就解出了方程的一個根,改變計算的區間,我們就可以得到另一個根。

> result <- uniroot(f2,c(-4,-3),a=a,b=b,c=c,tol=0.0001)> result$root[1] -3

方程的兩個根,一個是-2,一個是-3。

由於uniroot()函數,每次只能計算一個根,而且要求輸入的區間端值,必須是正負號相反的。如果我們直接輸入一個(-10,0)這個區間,那麼uniroot()函數會出現錯誤。

> result <- uniroot(f2,c(-10,0),a=a,b=b,c=c,tol=0.0001)Error in uniroot(f2, c(-10, 0), a = a, b = b, c = c, tol = 1e-04) :  位於極點邊的f()值之正負號不相反

這應該是uniroot()為了統計計算對一元多次方程而設計的,所以為了使用uniroot()函數,我們需要取不同的區別來獲得方程的根。

以圖形展示方程:y = x^2 + 5*x + 6

# 創建數據點> x<-seq(-5,1,by=0.01)> y<-f2(x,a,b,c)> df<-data.frame(x,y)# 用ggplot2來畫圖> g<-ggplot(df,aes(x,y))> g<-g+geom_line(col='red') #紅色曲線> g<-g+geom_hline(yintercept=0)+geom_vline(yintercept=0) #坐標軸> g<-g+ggtitle(paste("y =",a,"* x ^ 2 +",b,"* x +",c))> g

我們從圖,並直接的看到了x的兩個根取值範圍。

4.3 一元三次方程

一元二次方程:a*x^3+b*x^2+c*x+d=0,設a=1,b=5,c=6,d=-11,求x?

> f3 <- function (x, a, b, c,d) a*x^3+b*x^2+c*x+d> a<-1;b<-5;c<-6;d<--11> result <- uniroot(f3,c(-5,5),a=a,b=b,c=c,d=d,tol=0.0001)> result$root[1] 0.9461458

如果我們設置對了取值區間,那麼一下就得到了方程的根。

以圖形展示方程:y = x^2 + 5*x + 6

# 創建數據點> x<-seq(-5,5,by=0.01)> y<-f3(x,a,b,c,d)> df<-data.frame(x,y)# 用ggplot2畫圖> g<-ggplot(df,aes(x,y))> g<-g+geom_line(col='red') # 3次曲線> g<-g+geom_hline(yintercept=0)+geom_vline(yintercept=0) #坐標軸> g<-g+ggtitle(paste("y =",a,"* x ^ 3 +",b,"* x ^2 +",c,"* x + ",d))> g

4.4 二元一次方程組

R語言還可以解二次的方程組,當然計算方法,其實是利用於矩陣計算。

假設方程組:是以x1,x2兩個變量組成的方程組,求x1,x2的值

以矩陣形式,構建方程組

# 左矩陣> lf<-matrix(c(3,5,1,2),nrow=2,byrow=TRUE)# 右矩陣> rf<-matrix(c(4,1),nrow=2)# 計算結果> result<-solve(lf,rf)> result     [,1][1,]    3[2,]   -1

得方程組的解,x1, x2分別為3和-1。

接下來,我們畫出這兩個線性方程的圖。設y=X2, x=X1,把原方程組變成兩個函數形式。

# 定義2個函數> fy1<-function(x) (-3*x+4)/5> fy2<-function(x) (-1*x+1)/2# 定義數據> x<-seq(-1,4,by=0.01)> y1<-fy1(x)> y2<-fy2(x)> dy1<-data.frame(x,y=y1,type=paste("y=(-3*x+4)/5"))> dy2<-data.frame(x,y=y2,type=paste("y=(-1*x+1)/2"))> df <- rbind(dy1,dy2)# 用ggplot2畫圖> g<-ggplot(df,aes(x,y))> g<-g+geom_line(aes(colour=type,stat='identity')) #2條直線> g<-g+geom_hline(yintercept=0)+geom_vline(yintercept=0) #坐標軸> g

我們看到兩條直線交點的坐標,就是方程組的兩個根。多元一次方程,同樣可以用這種方法來解得。

通過R語言,我們實現了對於初等數學的各種計算,真的是非常方便!下一篇文章將介紹,用R語言來解決高級數學中的計算問題。


轉自 張丹(Conan)

更多資訊請關注公眾號「格數致知」

相關焦點

  • r語言有什麼優劣勢及R語言的未來發展趨勢_R語言在現實中的應用
    r語言有什麼優劣勢分析 R語言擁有強大的軟體包生態系統與圖表優勢The r development process. Technical report,Department of Statistics,University of Oxford.】。從這個角度講,R語言的代碼質量以及運算結果的可信性是完全可以保證的。 當然,這裡所說的是R的標準安裝程序包,並不代表所有擴展包的質量。
  • R語言:用R計算各種統計值
    percentile)四分位間距(quartile range)方差(variance)標準差(standard deviation)變異係數(coefficient of variance)正態分布(normal distribution)標準正態分布(standard normal distribution)使用R語言的內建實例數據框
  • 掌握R語言for循環一文就夠了(認真臉)
    =1再執行下一個for,直到下一個for的r從1到100都執行完後再跳到第一個for r=2,再執行r從1到100,再r=3以此類推直到r=100,整個for循環就結束了。這裡用兩個for很巧妙,這樣可以規避計算了第r行與t行的相關數據及第t行與r行的相關數據,造成人為的重複運算N3=rownames(data)[t] #data行名的第t個數據,這個很好理解,data行名rownames(data)是一個有100個數據的向量vector,從1到100依次是每一行的行名,這裡[t]就取第t個數即第t行行名
  • 業界| 四大機器學習程式語言對比:R、Python、MATLAB、Octave
    R 是一種用於統計計算和圖的語言及環境。它的結構使其在大規模和小規模編程中都能清晰明了。作為 MathWorks 開發的一種專用程式語言,MATLAB 允許矩陣運算、函數和數據繪圖、算法實現、用戶界面創建,以及與用其他語言(包括 C、C++、C#、Java、Fortran、Python)寫成的程序進行交互。 儘管 MATLAB 的設計初衷是數值計算,但其中的可選工具箱使用 MuPAD symbolic engine,具備符號計算能力。
  • R語言-stringr-字符串處理
    R包stringr處理字符相對簡單,尤其是我常用Power BI,但是對M語言不熟悉,不會處理字符數據,往往我就先利用R清洗字符數據列。本文記錄工作中常用的字符處理函數,部分案例照搬R for Data Science的字符部分。
  • 小學數學的重要知識點:「方中圓」與「圓中方」的計算方法
    小學數學中的平面圖形雖然不多,但組合圖形的花樣卻不少。組合圖形的解構和運算綜合性強,考察範圍廣,是幾何知識的薈萃,也是重要的考點之一。今天,筆者選取其中的一種類型——「方中圓」與「圓中方」的組合圖形,和大家共同來解析一下它的運算方法。
  • R語言中獲取矩陣中元素的幾種形式
    在上一篇文章中,小編介紹了R語言中創建矩陣的幾種形式。今天,我們再來探討一下如何訪問矩陣中的元素。在R語言中獲取矩陣中的元素主要有以下幾種形式:獲取矩陣中所有的元素值只要使用矩陣名就可以獲取整個矩陣中的所有元素。
  • 小學數學圖形計算公式大全
    面積 a:底 h:高   面積=底×高   s=ah   7、梯形   s:面積 a:上底 b:下底 h:高   面積=(上底+下底)×高÷2   s=(a+b)×h÷2   8、圓形   S:面積 C:周長 d:直徑 r:
  • C語言基礎:以實例跟我學while循環結構,計算圓周率pi
    循環結構是程式語言中的一種基本程序結構,C語言中有兩種表示方法,分別可通過for循環和while循環結構實現。上篇文章已經講了for循環的使用方法,詳細請參考:這次通過一個計算圓周率pi的例子給大家介紹C語言中while循環結構的編程方法。
  • R語言——交叉驗證法計算線性回歸模型擬合優度的第三種R方
    本來打算這周繼續更新一篇LaTex的小短文,但是貌似我已經很久沒有寫R語言相關的東西了。想來想去,今天就寫一篇和R語言有關的,畢竟不能忘記初心呀!凡是學過計量的同學,哪怕只記得一點點皮毛,對於R方和調整R方也應該是再熟悉不過了。R方和調整R方是判斷回歸模型擬合度的最為方便簡單的指標,一般來說,數值越大代表模型的擬合度越好。
  • 初三數學,老師解析:扇形公式在圓錐側面積計算問題中的運用方法
    關於圓錐側面積的計算是初三數學的重要知識點,也是數學中考的常客題型,本文就例題詳細解析這類題型的解題思路,希望能給初三學生的數學學習帶來幫助。例題1如圖,已知圓錐底面半徑r=10cm,母線長為40cm。
  • 從認知語義學的視角看數學方法在物理學中的應用
    儘管A同學和B同學得到的最終結果是一樣的,但經過詢問得知,A同學認為,題目中的公式可以理解為位於坐標原點位置處點電荷Q在空間某位置電場強度E的計算公式,E只與距離r有關。該案例說明,物理學專業的學生在解決問題時通常賦予數學符號於物理意義,看到公式後認為E和Q分別表示電場強度和電荷量,所以會直接給出E和r的物理關係;數學專業的B同學在解決問題時採用的是邏輯推斷,想到的是直角坐標系與球坐標系之間的對應關係,通過坐標變換得到E和r的數學關係;數學專業的C同學認為x,y,z以及r,θ,φ均為虛擬變量,是互相獨立的、不具有任何物理意義的數學變量,所以會在函數關係中直接進行數學符號的替換
  • 和π有關的計算公式(小學數學)圓周率學習筆記分享
    一.π在數學計算中常用於圓周長、圓面積、球體積等幾何量的計算。1.圓周長計算公式:C=2πr (r表示圓的半徑)C=πd (d表示圓的直徑)2.圓面積的計算公式:S=πr (r表示圓的半徑)3.球體積的計算公式:
  • 除了心形圖,還可以怎麼用數學語言表達感情
    曾經轟動一時的百歲山廣告就更體現出數學的不同啦。那則背景故事數學家的情書心形圖,讓人們感受到數學並不是枯燥的,也有浪漫。這個讓好多人都想執筆畫心的心形圖其實是將r=a(1-sinx)的圖像畫出來後給人的視覺感受以及情感聯想。那麼除了這些,還有沒有其他的數學語言也能用來表達我們心中的感情呢?
  • 【超越白皮書4】Bancor 算法的數學、經濟學解析
    繼《【火線視點8】沒有免費的午餐——從EOS RAM價格看公鏈通證經濟體系設計》後,火幣區塊鏈研究院繼續對這一算法研究,分析其後背的數學和經濟學原理,並通過公式,我們計算對比了不同參數下RAM價格,主要得到以下研究結果:Bancor公式中隱藏價格函數與經濟學上的價格彈性曲線的概念相通。
  • 2018中考數學知識點:圓的計算公式
    新一輪中考複習備考周期正式開始,中考網為各位初三考生整理了各學科的複習攻略,主要包括中考必考點、中考常考知識點、各科複習方法、考試答題技巧等內容,幫助各位考生梳理知識脈絡,理清做題思路,希望各位考生可以在考試中取得優異成績!下面是《2018中考數學知識點:圓的計算公式》,僅供參考!
  • 2018中考數學知識點:圖形計算公式
    對於數學中圖形計算公式的內容知識,我們做下面的講解學習,相信大家會認真學習的哦。=長×寬×高V=abh   5、三角形:s面積a底h高面積=底×高÷2s=ah÷2   三角形高=面積×2÷底   三角形底=面積×2÷高   6、平行四邊形:s面積a底h高面積=底×高s=ah   7、梯形:s面積a上底b下底h高面積=(上底+下底)×高÷2s=(a+b)×h÷2   8圓形:S面C周長∏d=直徑r=
  • 【R語言】遙感影像Theil Sen趨勢分析MK檢驗
    01按以下形式將影像預處理好,起名字可以根據自己的需要,但是你要是不了解R語言,就按我的格式改名字吧
  • 不用任何數學方法,如何計算圓面積
    詢問任何人圓的面積是多少,他們都會告訴你不就是��r⊃2;嗎。但如果你問他們為什麼,他們很可能並不知道。這是因為圓的面積公式的證明在大多數情況下要麼不直觀,不令人滿意,要麼充斥著積分等高級數學概念。借鑑統計學習和機器學習的核心原理,我們可以使用蒙特卡羅模擬和多項式/二次回歸來創建基於計算的方法,以找到圓的面積公式。
  • R語言從入門到精通:Day10-R語言統計入門代碼大全
    我們一波了  到目前為止,R語言的數據操作和基礎繪圖部分已經講解完畢,換句話說,大家應該已經能將數據導入R中,並運用各種函數處理數據使其成為可用的格式,然後將數據用各種基礎圖形展示。完成前面這些步驟之後,我們接下來要探索數據中變量的分布以及各組變量之間的關係。