AnyMath 文档
Notebook

在 Engee 环境中使用 MATLAB 代码

本示例演示了如何在 Engee 中调用 MATLAB 函数,以及这些函数的应用及其与环境内置函数的对比。

在 Engee 中绘制曲线:

连接后端——图形绘制方法:

In [ ]:
Pkg.add(["Statistics"])
In [ ]:
using Plots

生成两个信号:

In [ ]:
A = sin.(range(0, 2pi, length=100)')' # 正弦波
B = @. sin(A) + 0.1 * randn() # 带噪声的正弦波
C = 1:1:100;

在图形上显示两个信号:

In [ ]:
plot(C,A)
plot!(C,B)
Out[0]:

在预先连接统计函数库的基础上,计算两个信号之间的相关性:

In [ ]:
using Statistics
engee_cor = cor(A,B)
Out[0]:
1×1 Matrix{Float64}:
 0.9852832893786444

从 Engee 调用 MATLAB 代码

Julia 中可以调用任意 MATLAB 命令或函数,并获取返回结果。

连接 MATLAB 接口:

In [ ]:
using MATLAB

Engee 中的信号数据加载到 MATLAB 内核中:

In [ ]:
D = hcat(A,B)
A = D[:,1];
B = D[:,2];
mat"""
A = $A;
B = $B;
R = corrcoef(A,B);
"""

使用 MATLAB 内核函数计算两个信号之间的相关性:

In [ ]:
matlab_cor = mat"R; R()"
Out[0]:
2×2 Matrix{Float64}:
 1.0       0.985283
 0.985283  1.0

比较结果,并计算使用 MATLABEngee 方法所得结果的绝对误差:

In [ ]:
difference = abs(engee_cor[1,1] - matlab_cor[1,2])
println("Engee相关性: ", engee_cor[1,1], '\n', "Matlab相关性: ", matlab_cor[1,2], '\n', "绝对误差: ", difference)
Engee相关系数:0.9852832893786444
Matlab相关系数:0.9852832893786447
绝对误差:3.3306690738754696e-16

MATLAB 调用频率逐渐增加的正弦波:

In [ ]:
chirp = mat"chirp = dsp.Chirp('InitialFrequency', 0,'SamplesPerFrame', 500); chirp()"
plot(chirp)
Out[0]:

构建魔方:

In [ ]:
mat"magic(3)"
Out[0]:
3×3 Matrix{Float64}:
 8.0  1.0  6.0
 3.0  5.0  7.0
 4.0  9.0  2.0

最简单的算术运算:

In [ ]:
x = range(-10.0, stop=10.0, length=50)
y = range(2.0, stop=3.0, length=50)

mat"""
    $u = $x + $y
    $v = $x - $y
"""

plot(u,v)
>> >> >> 
matlab_jl_2 =

   -8.0000
   -7.5714
   -7.1429
   -6.7143
   -6.2857
   -5.8571
   -5.4286
   -5.0000
   -4.5714
   -4.1429
   -3.7143
   -3.2857
   -2.8571
   -2.4286
   -2.0000
   -1.5714
   -1.1429
   -0.7143
   -0.2857
    0.1429
    0.5714
    1.0000
    1.4286
    1.8571
    2.2857
    2.7143
    3.1429
    3.5714
    4.0000
    4.4286
    4.8571
    5.2857
    5.7143
    6.1429
    6.5714
    7.0000
    7.4286
    7.8571
    8.2857
    8.7143
    9.1429
    9.5714
   10.0000
   10.4286
   10.8571
   11.2857
   11.7143
   12.1429
   12.5714
   13.0000
Out[0]:

从 Engee 调用 MATLAB 文件

文件管理器中打开的文件夹路径:

In [ ]:
mat"cd $(@__DIR__)"

运行 m-脚本:

image.png
In [ ]:
mat"file"
>> >> >> a = 10
In [ ]:
mat"run('file.m')"
>> >> >> a = 10
In [ ]:
mat"""run("file.m")"""
>> >> >> a = 10

运行 MATLAB 函数:

image.png
In [ ]:
mat"fun(10,9)"
Out[0]:
103.11111111111111
In [ ]:
x = 12;
y = 13.12;

z = mat"fun($x,$y)"

z/10
Out[0]:
17.0

查看 MATLAB 工作区:

In [ ]:
mat"whos"
>> >> >>   Name                     Size            Bytes  Class        Attributes

  A                      100x1               800  double                 
  B                      100x1               800  double                 
  R                        2x2                32  double                 
  a                        1x1                 8  double                 
  chirp                    1x1                 8  dsp.Chirp              
  matlab_jl_has_ans        1x1                 8  double                 

清空 MATLAB 工作区:

In [ ]:
mat"clear"
mat"whos"
>> >> >>   Name                   Size            Bytes  Class     Attributes

  matlab_jl_has_ans      1x1                 8  double              

输出:

本示例演示了在 Engee 环境中使用 MATLAB 函数、它们的协同工作,以及所用方法在数值上的差异。