Документация Engee
Notebook

Использование кода MATLAB в среде Engee

В данном примере демонстрируется вызов функций MATLAB в Engee, а также их применение и сравнение с функциями среды.

Построение кривых в Engee:

Подключаем бэкенд – метод отображения графики:

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

Вызов MATLAB-кода из Engee

Из 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);
"""

Расчёт корреляции между двумя сигналами c помощью функции ядра MATLAB:

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

Сравнение результатов и расчёт абсолютной погрешности применения методов из MATLAB и Engee:

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]:

Вызов MATLAB-файлов из Engee

Путь до папки открытой в файловом менеджере:

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              

Вывод:

В данном примере было продемонстрировано использование функций MATLAB в среде Engee, их совместное использование, а также численное отличие применяемых методов.