Использование кода MATLAB в среде Engee
В данном примере демонстрируется вызов функций MATLAB в Engee, а также их применение и сравнение с функциями среды.
Построение кривых в Engee
Подключаем бэкенд – метод отображения графики:
using Plots
Генерируем два сигнала:
A = sin.(range(0, 2pi, length=100)')' # синусоида
B = @. sin(A) + 0.1 * randn() # зашумлённая синусоида
C = 1:1:100;
Отображаем на графике два сигнала:
plot(C,A)
plot!(C,B)
Делаем расчёт корреляции между двумя сигналами, предварительно подключив библиотеку статистических функций:
using Statistics
engee_cor = cor(A,B)
1×1 Matrix{Float64}:
0.9852832893786444
Вызов MATLAB-кода из Engee
Из Julia можно вызвать произвольную команду или функцию MATLAB, которая вернет результат.
Подключим интерфейс MATLAB:
using MATLAB
Загрузка данных сигналов из Engee в ядро MATLAB:
D = hcat(A,B)
A = D[:,1];
B = D[:,2];
mat"""
A = $A;
B = $B;
R = corrcoef(A,B);
"""
Расчёт корреляции между двумя сигналами c помощью функции ядра MATLAB:
matlab_cor = mat"R; R()"
2×2 Matrix{Float64}:
1.0 0.985283
0.985283 1.0
Сравнение результатов и расчёт абсолютной погрешности применения методов из MATLAB и Engee:
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:
chirp = mat"chirp = dsp.Chirp('InitialFrequency', 0,'SamplesPerFrame', 500); chirp()"
plot(chirp)
Построение магического квадрата:
mat"magic(3)"
3×3 Matrix{Float64}:
8.0 1.0 6.0
3.0 5.0 7.0
4.0 9.0 2.0
Простейшие арифметические операции:
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
Вызов MATLAB-файлов из Engee
Путь до папки открытой в файловом менеджере:
mat"cd $(@__DIR__)"
Запуск m-скрипта:
mat"file"
>> >> >> a = 10
mat"run('file.m')"
>> >> >> a = 10
mat"""run("file.m")"""
>> >> >> a = 10
Запуск MATLAB-функции:
mat"fun(10,9)"
103.11111111111111
x = 12;
y = 13.12;
z = mat"fun($x,$y)"
z/10
17.0
Просмотр рабочего пространства MATLAB:
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:
mat"clear"
mat"whos"
>> >> >> Name Size Bytes Class Attributes
matlab_jl_has_ans 1x1 8 double