MATLAB使用.NET类库示例

下面再举一个例子。先用VB.NET创建一个.NET类库mymath.dll,库中有3个函数,分别实现均值、标准差、方差和变异系数的计算。然后在MATLAB中使用该类库,求给定数据的统计量。[大谦MATLAB,dqmatlab点com]

打开VS2010,新建VB.NET项目mymath,按照1.2.3小节介绍的步骤进行操作。在属性页修改根命名空间为mymath。默认时会自动在类库中添加类Class1,修改类名为cstats,添加代码如下所示。

code.vb.net
Public Function CV(ByRef x() As Double, ByRef n As Integer) As Double
	'求变异系数
	Dim R1 As Double
	Dim R2 As Double
	Dim r As Double

	R1=mean(x, n)
	R2=StandardDev(x, n)

	If R1 <> 0 Then
		r=R2 / R1
		CV=r
	Else
		Exit Function
	End If
End Function
Public Function mean(ByRef x() As Double, ByRef n As Integer) As Double
	'求算术平均值
	Dim i As Integer
	Dim r As Double
	r=0
	For i=0 To n-1
		r=r + x(i)
	Next i
	mean=r / n
End Function
Public Function StandardDev(ByRef x() As Double, ByRef n As Integer) As Double
	'求标准差
	Dim r As Double

	Dim DifSq As Double
	DifSq=variance(x, n)

	r=System.Math.Sqrt(DifSq)
	StandardDev=r
End Function
Public Function variance(ByRef x() As Double, ByRef n As Integer) As Double
	'求方差
	Dim i As Integer
	Dim r As Double

	Dim Means As Double
	Means=mean(x, n)
	r=0
	For i=0 To n-1
		r=r + (x(i) - Means) ^ 2
	Next i
	r=r / (n - 1)
	variance=r
End Function

用“生成”菜单中的选项“生成mymath…”生成类库mymath.dll。将类库mymath.dll复制到D盘。

在MATLAB命令窗口导入类库:

code.matlab
>> NET.addAssembly('d:\mymath.dll')
ans=
  NET.Assembly 句柄
  包: NET
类 NET.Assembly 的属性:
    AssemblyHandle
    Classes
    Structures
    Enums
    GenericTypes
    Interfaces
    Delegates

创建类库中cstats类的实例obj。

code.matlab
>> obj=mymath.cstats
obj=
  cstats(不具有属性)。

给定数据,调用obj对象的mean, variance和CV方法求数据的均值、方差和变异系数。

code.matlab
>> a=[10 33 68 121 201 300];    #分析数据
>> b=obj.mean(a,6)    #求均值
b =
  122.1667
>> c=obj.variance(a,6)    #求方差
c =
   1.2261e+04
>> d=obj.CV(a,6)    #求变异系数
d =
    0.9064