在 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 执行矩阵分解并返回结果。
要构建类:
创建一个名为
mymatrix的编译器工程,版本为 1.0。向组件添加一个名为
myfactor类。将上述三个 MATLAB 文件添加到类中。
构建组件。
使用以下 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
运行子例程,执行以下操作:
创建
myfactor类的实例将双精度矩阵分配给属性
A调用三种分解方法