Sub testl()
Dim a As Double
Dim b As Double
Dim lnA As Long
Dim lnB As Long
Dim M As Double
Dim lnM As Long
Dim n As Long
Dim n0 As Long
Dim X As Double
Dim Y As Double
a = InputBox("请输入积分下限a", "积分下限", "")
b = InputBox("请输入积分上限b", "积分上限", "")
n = InputBox("请输入模拟投点的次数n", "模拟投点的次数", "")
M = Exp(a) + Exp(b)
Dim tmp, xs As Integer
xs = 1
If a > b Then
tmp = a
a = b
b = tmp
xs = -1
End If
lnA = a * 10 ^ 6: lnB = b * 10 ^ 6: lnM = M * 10 ^ 6
Dim i
Dim tmpY As Double
i = 1
Do While i <= n
Randomize
X = Int((lnB - lnA + 1) * Rnd + lnA) / 10 ^ 6
Y = Int((lnM - 0 + 1) * Rnd + 0) / 10 ^ 6
tmpY = Exp(X)
If tmpY >= Y Then
nO = n0 + 1
End If
i = i + 1
Loop
MsgBox xs * M * (b - a) * n0 / n
End Sub
得到的结果一直是0
Excel VBA求定积分的程序运行的不到结果 代码如下
答案:2 悬赏:60
解决时间 2021-02-20 08:52
- 提问者网友:护她一生,唯爱
- 2021-02-19 18:00
最佳答案
- 二级知识专家网友:陪衬角色
- 2021-02-19 18:48
Sub testl()
Dim a As Double
Dim b As Double
Dim lnA As Long
Dim lnB As Long
Dim M As Double
Dim lnM As Long
Dim n As Long
Dim n0 As Long
Dim X As Double
Dim Y As Double
a = InputBox("请输入积分下限a", "积分下限", "")
b = InputBox("请输入积分上限b", "积分上限", "")
n = InputBox("请输入模拟投点的次数n", "模拟投点的次数", "")
M = Exp(a) + Exp(b)
Dim tmp, xs As Integer
xs = 1
If a > b Then
tmp = a
a = b
b = tmp
xs = -1
End If
lnA = a * 10 ^ 6: lnB = b * 10 ^ 6: lnM = M * 10 ^ 6
Dim i
Dim tmpY As Double
i = 1
Do While i <= n
Randomize
X = Int((lnB - lnA + 1) * Rnd + lnA) / 10 ^ 6
Y = Int((lnM - 0 + 1) * Rnd + 0) / 10 ^ 6
tmpY = Exp(X)
If tmpY >= Y Then
n0 = n0 + 1
End If
i = i + 1
Loop
MsgBox xs * M * (b - a) * n0 / n
End Sub上面是修改正确的代码,请全选、粘贴测试。
Dim a As Double
Dim b As Double
Dim lnA As Long
Dim lnB As Long
Dim M As Double
Dim lnM As Long
Dim n As Long
Dim n0 As Long
Dim X As Double
Dim Y As Double
a = InputBox("请输入积分下限a", "积分下限", "")
b = InputBox("请输入积分上限b", "积分上限", "")
n = InputBox("请输入模拟投点的次数n", "模拟投点的次数", "")
M = Exp(a) + Exp(b)
Dim tmp, xs As Integer
xs = 1
If a > b Then
tmp = a
a = b
b = tmp
xs = -1
End If
lnA = a * 10 ^ 6: lnB = b * 10 ^ 6: lnM = M * 10 ^ 6
Dim i
Dim tmpY As Double
i = 1
Do While i <= n
Randomize
X = Int((lnB - lnA + 1) * Rnd + lnA) / 10 ^ 6
Y = Int((lnM - 0 + 1) * Rnd + 0) / 10 ^ 6
tmpY = Exp(X)
If tmpY >= Y Then
n0 = n0 + 1
End If
i = i + 1
Loop
MsgBox xs * M * (b - a) * n0 / n
End Sub上面是修改正确的代码,请全选、粘贴测试。
全部回答
- 1楼网友:伤口狠精致
- 2021-02-19 20:21
function f1(li,aa,pa,pb.l)
for i = 0 to li
x = sin((aa+pa*l+(pb-pa)*(l^2/l))*(pi()/180))
f1 = f1 + x
next
end function
function f2(li,aa,pa,pb.l)
for i = 0 to li
x = cos((aa+pa*l+(pb-pa)*(l^2/l))*(pi()/180))
f1 = f1 + x
next
end function
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯