下面再举一个例子。先用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