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

Использование кода 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)

interactive-scripts/images/integrated_languages_from_MATLAB_to_Engee/b141c1463666f8ef429d779e7b574f367290c6c5

Делаем расчёт корреляции между двумя сигналами, предварительно подключив библиотеку статистических функций:

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)

interactive-scripts/images/integrated_languages_from_MATLAB_to_Engee/ef25b83207c038f62d08cb2ebcc976f3258157cf

Построение магического квадрата:

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

interactive-scripts/images/integrated_languages_from_MATLAB_to_Engee/59316d6114be17784ea2edf1b0c3663a5e938606

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

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

mat"cd $(@__DIR__)"

Запуск m-скрипта:

image.png

mat"file"
>> >> >> a = 10
mat"run('file.m')"
>> >> >> a = 10
mat"""run("file.m")"""
>> >> >> a = 10

Запуск MATLAB-функции:

image.png

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

Вывод

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