好久没写代码了,写个复数类试试看
复数常用的形式有两种,一是定义式,即z=a+bi,其中a为实部b为虚部,二是指数式,即z=rExp(Qi),其中r为模Q为辐角,两者通过z=a+bi=r(cosQ+isinQ)来转换.
在复数间运算中,加减用定义式方便,乘除用指数式快捷,在开n次方求n次幂时,更是需要指数式.
下面给出代码,幂方运算还没验证,可能有错,因为那些数学我也丢得差不多了.
欢迎指正.也只是练习.
Complex.ComplexBase.vb
Partial Class Complex Private MustInherit Class ComplexBase Protected gMaster As Double '实部或模 Protected gSecondary As Double '虚部或辐角 Private gIsNAN As Boolean = False '数据无效标志 Private gRoundDigits As Integer = -1 '输出小数有效位。在0至15之间。如是负数,则不取舍 Sub New() Me.Load(0, 0) End Sub Sub New(ByVal master As Double, ByVal secondary As Double) Me.DoBeforeLoad(master, secondary) '使用(模,辐角)表示时,模不能为负值 Me.Load(master, secondary) End Sub Protected Sub Load(ByVal master As Double, ByVal secondary As Double) Me.gMaster = master Me.gSecondary = secondary DoAfterLoad() '使用(模,辐角)表示时,在此处理辐角主值 Me.CheckNAN() '测试数据是否无效 End Sub Protected Overridable Sub DoBeforeLoad(ByVal master As Double, ByVal secondary As Double) End Sub Protected Overridable Sub DoAfterLoad() End Sub Public ReadOnly Property IsNAN() As Boolean Get Return gIsNAN End Get End Property Protected MustOverride Function InternalCheckNAN() As Boolean '实现数据无效判定 Public Sub CheckNAN() gIsNAN = InternalCheckNAN() End Sub Public Property RoundDigits() As Integer Get Return gRoundDigits End Get Set(ByVal value As Integer) If value > 15 Then gRoundDigits = 15 Else gRoundDigits = value End If End Set End Property '小数位取舍 Protected Function Round(ByVal value As Double) As Double If Me.RoundDigits < 0 Then Return value Return Math.Round(value, Me.RoundDigits) End Function '小数位取舍后输出为字串 Protected Function RoundString(ByVal value As Double, Optional ByVal NotSign As Boolean = True) As String Dim tmp As Double = value If NotSign Then '忽略正负号 If tmp < 0 Then tmp = -tmp End If End If Return Round(tmp).ToString End Function MustOverride Sub Add(ByVal value As Object) MustOverride Sub Subtract(ByVal value As Object) MustOverride Sub Multy(ByVal value As Object) MustOverride Sub Divide(ByVal value As Object) MustOverride Overloads Function ToString(ByVal format As String) As String End ClassEnd Class
Public Overrides Function Equals(ByVal obj As Object) As Boolean If TypeOf obj Is Complex Then Return (Me = CType(obj, Complex)) End If Return False End Function
[解决办法]
Complex2里面的乘方有点问题,
Public Sub Pow(ByVal n As Double)
Dim mModulus As Double = Math.Pow(Me.Modulus, n)
Dim mArgument As Double = Me.Argument * n
Me.Load(mModulus, mArgument)
End Sub
n应该只能是整数,而不应该是实数。
虽然这个方法不会对外暴露,但是还是改成整数比较好。
[解决办法]
学习了,谢谢LZ分享
[解决办法]
学习
[解决办法]
学习
[解决办法]
顶一个
[解决办法]
嗯,不错,代码都是次要的——关键算法
大多数都还给老师了——前些日子写一个雷达图的绘制,没累死我——所有的正弦余弦。。。都忘记了,汗~~
圆形的点定位。。。就是计算上糊涂。。。当年初中的数学知识,中考那时候可是满分阿。。。都不记得了。。。
[解决办法]
mark
[解决办法]
mark
[解决办法]
我用的是C#,VB不熟悉。
[解决办法]
...长.... 强
[解决办法]
留个记号,以备不时只需
[解决办法]
收藏
[解决办法]
哈哈~强,收下了!多谢!^_^
[解决办法]
友情up下,谢谢啦!
[解决办法]
好东西啊~
[解决办法]
弓虽 ! ! !
[解决办法]
天书,又见天书!
收藏,慢慢地看,直到看不懂为止
------解决方案--------------------
汗,这些数据对象基本上忘得差不多了,学习!
[解决办法]
这贴好牛啊
[解决办法]
看到天荒地老啊~
[解决办法]
收藏~
谢楼主
[解决办法]
不急.留着慢慢看
[解决办法]
留個記號,以備后用。哈
[解决办法]
mark
[解决办法]
NB
[解决办法]
好帖
[解决办法]
谢谢版主
[解决办法]
高手阿 。。 我也收藏下。有时间研究研究
[解决办法]
史上最牛貼
俺邊頂邊學
[解决办法]
数学已经差不多忘光了-_-
[解决办法]
mark了。
[解决办法]
该回复于2007-10-18 21:40:43被版主删除
[解决办法]
学习
[解决办法]
先留个名,再来看,呵呵
LZ强人呐!!!
[解决办法]
留个记号,再慢慢看!
[解决办法]
看看……
[解决办法]
真强!
[解决办法]
弓虽!!! 留个脚印
[解决办法]
太强了,啥也不说了,支持
[解决办法]
记一下
[解决办法]
是不是在书中抄的