主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

MATLAB 中使用 Visual Basic 全局变量

类属性允许对象在方法调用之间保留内部状态。

全局变量是在 MATLAB® 产品中使用 global 关键字声明的变量。MATLAB MATLAB Compiler SDK™ 会自动将组成某个类的 MATLAB 文件共享的所有全局变量转换为该类的属性。

当您拥有一个包含不经常更改但经常操作的值的大型数组时,属性很有用。在这种情况下,将数组设置为属性可以节省每次调用时将其传递给方法所需的开销。

下面的示例说明如何在矩阵分解类中使用类属性。该示例开发了一个对同一矩阵执行 Cholesky、LU 和 QR 分解的类。它将输入矩阵存储为类属性,以便它不会传递给因式分解例程。

考虑这三个 MATLAB 文件。

Cholesky.m

function [L] = Cholesky()
    global A;
    if (isempty(A))
        L = [];
        return;
    end
    L = chol(A);

LUDecomp.m

function [L,U] = LUDecomp()
    global A;
    if (isempty(A))
        L = [];
        U = [];
        return;
    end
    [L,U] = lu(A);

QRDecomp.m

function [Q,R] = QRDecomp()
    global A;
    if (isempty(A))
        Q = [];
        R = [];
        return;
    end
    [Q,R] = qr(A);

这三个文件共享一个全局变量 A。每个函数对 A 执行矩阵分解并返回结果。

要构建类:

  1. 创建一个名为 mymatrix 的编译器工程,版本为 1.0。

  2. 向组件添加一个名为 myfactor 类。

  3. 将上述三个 MATLAB 文件添加到类中。

  4. 构建组件。

使用以下 Visual Basic® 子例程测试 myfactor 类:

Sub TestFactor()
    Dim x(1 To 2, 1 To 2) As Double
    Dim C As Variant, L As Variant, U As Variant, _
    Q As Variant, R As Variant
    Dim factor As myfactor
    
    On Error GoTo Handle_Error
    Set factor = New myfactor
    x(1, 1) = 2#
    x(1, 2) = -1#
    x(2, 1) = -1#
    x(2, 2) = 2#
    factor.A = x
    Call factor.cholesky(1, C)
    Call factor.ludecomp(2, L, U)
    Call factor.qrdecomp(2, Q, R)
    Exit Sub
Handle_Error:
    MsgBox (Err.Description)
End Sub

运行子例程,执行以下操作:

  1. 创建 myfactor 类的实例

  2. 将双精度矩阵分配给属性 A

  3. 调用三种分解方法