在组件类中分配多个 MATLAB 函数
此示例向您说明如何使用多个 MATLAB® 函数创建 .NET 矩阵数学程序。
在此示例中,您执行以下步骤:
将多个 MATLAB 函数分配给一个组件类。
通过实例化
MatrixMathApp.cs并使用MatrixMathApp.vb类库处理数据转换,在 C# 应用程序 (Factor) 或 Visual Basic® 应用程序 (MWArray) 中访问该组件。使用 Visual Studio® .NET 开发环境构建并运行
MatrixMathApp应用程序。
MatrixMathApp 应用程序
MatrixMathApp 应用程序对具有以下形式的简单三对角矩阵(有限差分矩阵)执行 Cholesky、LU 和 QR 因式分解:
A = [ 2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2 ]
您在命令行中提供矩阵的大小,程序会构建矩阵并执行三个因式分解。原始矩阵和结果被打印到标准输出。您可以选择使用稀疏矩阵执行计算,通过在命令行中指定字符串“sparse”作为第二个参数。
文件
| MATLAB 函数 | cholesky.m ludecomp.mqrdecomp.m |
| MATLAB 函数位置 | |
| C# 代码位置 | |
| Visual Basic 代码位置 | |
过程
将 MATLAB 产品附带的以下文件夹复制到您的工作文件夹:
matlabroot\toolbox\dotnetbuilder\Examples\VSVersion\NET\MatrixMathExample
在 MATLAB 命令提示符下,导航到工作文件夹中的新
MatrixMathExample\MatrixMathComp子文件夹。检查 MATLAB 函数
cholesky.m、ludecomp.m和qrdecomp.m。function [L] = Cholesky(A) L = chol(A);function [L,U] = LUDecomp(A) [L,U] = lu(A);function [Q,R] = QRDecomp(A) [Q,R] = qr(A);使用以下信息,使用 .NET 程序集编译器或
compiler.build.dotNETAssembly构建 .NET 组件:字段 值 库名称 MatrixMathComp类名 Factor要编译的文件 choleskyludecompqrdecomp例如,如果您使用的是
compiler.build.dotNETAssembly,请输入:buildResults = compiler.build.dotNETAssembly(["cholesky.m","ludecomp.m","qrdecomp.m"], ... 'AssemblyName','MatrixMathComp', ... 'ClassName','Factor');
有关详细信息,请参阅生成 .NET 程序集并编译 .NET 应用程序中的说明。
确定是否使用 C# 还是 Visual Basic 来访问组件。
C#
如果您使用 C#,请为访问该组件的 C# 应用程序编写源代码。
此示例的示例应用程序位于
MatrixMathExample\MatrixMathCSApp\MatrixMathApp.cs中。此语句创建
Factor类的一个实例:Factor factor= new Factor();以下语句调用封装 MATLAB 函数的方法:
argOut= factor.cholesky((MWArray)matrix); ... argsOut= factor.ludecomp(2, matrix); ... argsOut= factor.qrdecomp(2, matrix); ...Visual Basic
如果您使用 Visual Basic,请为访问该组件的 Visual Basic 应用程序编写源代码。
此示例的示例应用程序位于
MatrixMathExample\MatrixMathVBApp\MatrixMathApp.vb中。此语句创建
Factor类的一个实例:Dim factor As Factor = New Factor以下语句调用封装 MATLAB 函数的方法:
argOut = factor.cholesky(matrix) argsOut = factor.ludecomp(2, matrix) argsOut = factor.qrdecomp(2, matrix)
使用 Visual Studio 打开与您的应用程序语言相对应的 .NET 工程文件。
C#
如果您使用的是 C#,则
MatrixMathCSApp文件夹包含此示例的 Visual Studio .NET 工程文件。在 Windows® 资源管理器中双击MatrixMathCSApp.csproj在 Visual Studio .NET 中打开该工程。您也可以通过右键点击 MatrixMathCSApp.csproj 并选择在 MATLAB 外部打开从桌面打开它。Visual Basic
如果您使用的是 Visual Basic,则
MatrixMathVBApp文件夹包含此示例的 Visual Studio .NET 工程文件。在 Windows 资源管理器中双击MatrixMathVBApp.vbproj在 Visual Studio .NET 中打开该工程。您也可以通过右键点击 MatrixMathVBApp.vbproj 并选择在 MATLAB 外部打开从桌面打开它。
添加对位于生成程序集的文件夹中的程序集文件
MatrixMathComp.dll引用。添加对
MWArrayAPI 的引用。如果您的系统上安装了 MATLAB matlabroot\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll如果您的系统上安装了 MATLAB Runtime <MATLAB_RUNTIME_INSTALL_DIR>\toolbox\dotnetbuilder\bin\win64\<framework_version>\MWArray.dll在 Visual Studio 中构建并运行
MatrixMathApp应用程序。该程序显示以下输出:
Test Matrix: (1,1) 2 (2,1) -1 (1,2) -1 (2,2) 2 (3,2) -1 (2,3) -1 (3,3) 2 (4,3) -1 (3,4) -1 (4,4) 2 Cholesky Factorization: (1,1) 1.4142 (1,2) -0.7071 (2,2) 1.2247 (2,3) -0.8165 (3,3) 1.1547 (3,4) -0.8660 (4,4) 1.1180 LU Factorization: L Matrix: (1,1) 1.0000 (2,1) -0.5000 (2,2) 1.0000 (3,2) -0.6667 (3,3) 1.0000 (4,3) -0.7500 (4,4) 1.0000 U Matrix: (1,1) 2.0000 (1,2) -1.0000 (2,2) 1.5000 (2,3) -1.0000 (3,3) 1.3333 (3,4) -1.0000 (4,4) 1.2500 QR Factorization: Q Matrix: (1,1) -0.8944 (2,1) 0.4472 (1,2) -0.3586 (2,2) -0.7171 (3,2) 0.5976 (1,3) -0.1952 (2,3) -0.3904 (3,3) -0.5855 (4,3) 0.6831 (1,4) 0.1826 (2,4) 0.3651 (3,4) 0.5477 (4,4) 0.7303 R Matrix: (1,1) -2.2361 (1,2) 1.7889 (2,2) -1.6733 (1,3) -0.4472 (2,3) 1.9124 (3,3) -1.4639 (2,4) -0.5976 (3,4) 1.9518 (4,4) 0.9129
理解 MatrixMath 程序
MatrixMath 程序从命令行获取一个或两个参量。第一个参量转换为测试矩阵的整数阶。如果将字符串 sparse 作为第二个参量传递,则会创建一个稀疏矩阵来包含测试数组。然后计算 Cholesky、LU 和 QR 因式分解并显示结果。
主要方法有三个部分:
第一部分设置输入矩阵,创建一个新的因子对象,并调用
cholesky、ludecomp和qrdecomp方法。这部分在try模块内执行。这样做是为了如果在执行期间发生异常,则执行相应的catch模块。第二部分是
catch模块。代码将消息打印到标准输出,让用户知道发生的错误。第三部分是
finally模块,用于在退出之前手动清理本机资源。这是可选的,因为垃圾收集器会自动为您清理资源。
