julia常用矩阵函数_3 Julia教程之数学运算 矩阵操作

本文详细介绍了Julia语言的数学运算,包括直观的表达方式、向量运算、比较运算、数学函数等,并重点讲解了矩阵操作,如定义、拼接、索引及基本运算。此外,还提到了向量和矩阵的拼接规则以及如何进行矩阵的索引和运算。文章适合熟悉MATLAB并希望了解Julia的读者。
摘要由CSDN通过智能技术生成

数学运算

比Matlab更直观的数学表达方式x = 10

2x

>>20

但这就导致了可能会出现语法的冲突

十六进制整数文本表达式 0xff 可以被解析为数值文本 0 乘以变量 xff

浮点数文本表达式 1e10 可以被解析为数值文本 1 乘以变量 e10

因此,Julia中

以 0x 开头的表达式,都被解析为十六进制文本

以数字文本开头,后面跟着 e 或 E ,都被解析为浮点数文本

运算方法

常用的 + - x /就不多说了,跟其他语言基本完全一样。

这里说一下向量运算,跟MATLAB的操作完全相同,比如向量的点乘,就是说对向量的元素一一操作[1,2,3].*3

>>3-element Array{Int64,1}:

3

6

9

比较运算,支持链式比较1 <= 2 <= 3 == 3 <=5 >4 >=2

>>true

常用的数学函数# 进位函数

round(x)        #四舍五入

floor(x)        #向下取整

ceil(x)         #向上取整

trunc(x)        #trunc是直接砍掉小数,在正数的时候trunc跟floor一样,负数时跟ceil一样

# 除法函数

div(x,y)        #取模

fld(x,y)        #取小于结果的最大整数

cld(x,y)        #取大于结果的最小整数

rem(x,y)        #取余

mod(x,y)

mod1(x,y1)      #如果x是y的整数倍,则返回y,不会返回余数

mod2pi(x)       #对2pi取余

divrem(x,y)     #返回取模的值和取余的值

fldmod(x,y)     #返回取小于x的最大整数和取余的值

gcd(x,y...)     #最大公约数

lcm(x,y...)     #最小公倍数

# 符号函数

abs(x)          #求模

abs2(x)         #求平方

sign(x)         #取符号

signbit(x)      #正数返回false,负数返回true

copysign(x,y)   #返回x * sign(y)

flipsign(x,y)   #返回x * sign(y) * -1

# 开根号 log

sqrt(x)         #开根号

cbrt(x)         #开三次根

hypot(x,y)      #sqrt(x^2 + y^2)

exp(x)          #e^x

expm1(x)        #e^-x

ldexp(x,n)      #x^n

log(x)          #loge(x)

log(b,x)        #logb(x)

log2(x)         #log2(x)

log10(x)        #log10(x)

log1p(x)        #loge(1+x)

# 三角函数

sin    cos    tan    cot    sec    csc

sinh   cosh   tanh   coth   sech   csch

asin   acos   atan   acot   asec   acsc

asinh  acosh  atanh  acoth  asech  acsch

sinc   cosc

矩阵操作

既然是做科学计算,那肯定是少不了矩阵,先从简单的向量说起

首先定义一个简单的矩阵,在REPL中看返回的类型a = [1,2,3,4]

>>4-element Array{Int64,1}:

1

2

3

4

Julia中也可以像MATLAB中定义步进向量aa = (1:2:5)

aa.start

aa.step

aa.stop

first(aa)

step(aa)

last(aa)Int8[3, 4, 5]

>>3-element Array{Int8,1}:

3

4

5

["one", "two", "threee"]

>>3-element Array{String,1}:

"one"

"two"

"threee"

[true, "two", 1, 2.0]

>>4-element Array{Any,1}:

true

"two"

1

2.0

[]

>>0-element Array{Any,1}

Int8[]

>>0-element Array{Int8,1}

a = (1, 2, 3)  # tuple

b = collect(a)

>>3-element Array{Int64,1}:

1

2

3

c = collect(1:4) #不能直接写成[1:4]

c[2:end]

c1 = c      # c1与c的内存地址相同

c2 = c[:]   # c2是c的一个拷贝

c1[1] = 10

c

>>4-element Array{Int64,1}:

10

2

3

4

c2[1] = 20

c

>>4-element Array{Int64,1}:

10

2

3

4b = [1;2;3;4]

>>4-element Array{Int64,1}:

1

2

3

4

c = [1 2 3 4]

>>1×4 Array{Int64,2}:

1  2  3  4

再来看矩阵拼接中的空格 , ;的区别x = ones(2,3)

y = zeros(2,3)

z = [x y]

>>2×6 Array{Float64,2}:

1.0  1.0  1.0  0.0  0.0  0.0

1.0  1.0  1.0  0.0  0.0  0.0

相当于hcat(x,y)

ndims(z)

>>2

z = [x,y]

>>2-element Array{Array{Float64,2},1}:

[1.0 1.0 1.0; 1.0 1.0 1.0]

[0.0 0.0 0.0; 0.0 0.0 0.0]

ndims(z)

>>1

[x;y]

>>4×3 Array{Float64,2}:

1.0  1.0  1.0

1.0  1.0  1.0

0.0  0.0  0.0

0.0  0.0  0.0

相当于vcat(x,y)

ndims(z)

>>2

那怎么把[x,y]也变成一个没有嵌套的矩阵呢?hcat([x,y]...) #表示把矩阵内部的Array作拼接

# 矩阵索引,从1开始

x[1]

>>1

x[6]

>>1

size(x)

>>(2,3)

length(x)

>>6

sum(x)

>>6

矩阵运算a = collect(reshape(1:6,2,3))

b = ones(2,3)

a .+ b

a .- b

a * b # error

a .* b

a * b'

a / b

a ./ b

函数对矩阵操作时,也要加.A = [1,2,3]

sin.(A)

>>3-element Array{Float64,1}:

0.8414709848078965

0.9092974268256817

0.1411200080598672

添加/删除/移动a = [1,2,3]

push!(a, 4)

pop!(a)

push!(a, 4,5,6)

push!(a, [7,8,9])

>>error

append!(a, [7,8,9])

prepend!(a, [10,11,12])

arr = reshape(1:6, 2, 3)

circshift(arr, (0,1))

circshift(arr, (1,-2))

对于矩阵的基本操作中,很多matlab中的函数Julia中基本也有,用法也基本一致

eg.rand(10)

rand(2,3)

rand(Int32,2,3)

reshape(1:6, (2,3))

注:如果有些常用的数学函数发现在Julia中不能使用,比如mean()函数,则可以使用Statistics package。常用的数值分析的函数都在里面。

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值