数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 26|回复: 3

如何用积分公式求反正切值

[复制链接]
发表于 2025-12-5 06:31 | 显示全部楼层 |阅读模式
如何用积分公式求反正切值?如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2025-12-6 10:31 | 显示全部楼层
如下是用鲍丰武的解方程公式做的程序,用于解一元三次方程(得到数值解):
Private Sub Command1_Click()
Dim a, b, c
ja = Val(Text1): jb = Val(Text2): jc = Val(Text3): jd = Val(Text4)
a = Val(jb / ja): b = Val(jc / ja): c = Val(jd / ja)
m = Val(36 * a * b - 8 * a ^ 3 - 108 * c)
If Val(m ^ 2 + (12 * b - 4 * a ^ 2) ^ 3) > 0 Then
n = Val(m ^ 2 + (12 * b - 4 * a ^ 2) ^ 3) ^ 0.5
If m + n < 0 Then
p = Abs(m + n) ^ (1 / 3)
p = Val(-p)
Else
p = Abs(m + n) ^ (1 / 3)
End If

If Val(m - n) < 0 Then
q = Abs(m - n) ^ (1 / 3)
q = Val(-q)
Else
q = Val(m - n) ^ (1 / 3)
End If
X1 = Val(p + q - 2 * a) / 6
jx = Val(-(p + q + 4 * a)) / 12
jy = Val(3 ^ 0.5 * (p - q)) / 12
X2 = jx & " +" & jy & "i"
x3 = jx & " -" & jy & "i"

Else
Print m
n = Abs(m ^ 2 + (12 * b - 4 * a ^ 2) ^ 3) ^ (1 / 2)
r1 = (m ^ 2 + n ^ 2) ^ (1 / 6)
tb = Abs(n / m)
Print "x= -"; tb
ttb = Atn(tb)
ttb1 = Val(ttb / 3)
sta = Sin(ttb1)
sta1 = Cos(ttb1)
If m > 0 Then
pa = r1 * sta1
Else
pa = 0 - r1 * sta1
End If
qa = r1 * sta

X1 = Val(2 * pa - 2 * a) / 6
jx = Val(-(2 * pa + 4 * a)) / 12
jy = Val(3 ^ 0.5 * 2 * qa) / 12
X2 = Val(jx + jy)
x3 = Val(jx - jy)
End If


Text5 = "输入  a=" & ja & "  b=" & jb & "  c=" & jc & "  d=" & jd & " 输出   x1=" & X1 & "  x2=" & X2 & "  x3=" & x3


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""
Me.Cls
End Sub
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-12-6 10:34 | 显示全部楼层
如下也是用鲍丰武的解方程公式做的程序,用于解一元三次方程(得到数值解):
Private Sub Command1_Click()
Dim a, b, c
ja = Val(Text1): jb = Val(Text2): jc = Val(Text3): jd = Val(Text4)
a = Val(jb / ja): b = Val(jc / ja): c = Val(jd / ja)
m = Val(36 * a * b - 8 * a ^ 3 - 108 * c)
If Val(m ^ 2 + (12 * b - 4 * a ^ 2) ^ 3) > 0 Then
n = Val(m ^ 2 + (12 * b - 4 * a ^ 2) ^ 3) ^ 0.5
If m + n < 0 Then
p = Abs(m + n) ^ (1 / 3)
p = Val(-p)
Else
p = Abs(m + n) ^ (1 / 3)
End If

If Val(m - n) < 0 Then
q = Abs(m - n) ^ (1 / 3)
q = Val(-q)
Else
q = Val(m - n) ^ (1 / 3)
End If
X1 = Val(p + q - 2 * a) / 6
jx = Val(-(p + q + 4 * a)) / 12
jy = Val(3 ^ 0.5 * (p - q)) / 12
X2 = jx & " +" & jy & "i"
x3 = jx & " -" & jy & "i"

Else
Print m
n = Abs(m ^ 2 + (12 * b - 4 * a ^ 2) ^ 3) ^ (1 / 2)
r = (m ^ 2 + n ^ 2) ^ 0.5
r1 = (m ^ 2 + n ^ 2) ^ (1 / 6)
tb = Abs(n / r)
ttb = ArcSin(tb)
ttb1 = Val(ttb / 3)
sta = Sin(ttb1)
sta1 = Cos(ttb1)
If m > 0 Then
pa = r1 * sta1
Else
pa = 0 - r1 * sta1
End If

qa = r1 * sta
X1 = Val(pa - a) / 3
jx = Val(-(2 * pa + 4 * a)) / 12
jy = Val(3 ^ 0.5 * 2 * qa) / 12
X2 = Val(jx + jy)
x3 = Val(jx - jy)
End If


Text5 = "输入  a=" & ja & "  b=" & jb & "  c=" & jc & "  d=" & jd & " 输出   x1=" & X1 & "  x2=" & X2 & "  x3=" & x3


End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Text5 = ""
Me.Cls
End Sub

Function ArcSin(x) As Double '反正弦
ArcSin = Atn(x / Sqr(-x * x + 1))
End Function
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-12-6 23:13 | 显示全部楼层
输入  a=1  b=13  c=-100  d=-1300 输出   x1=10  x2=-10  x3=-13
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-12-7 15:50 , Processed in 0.093446 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表