注册 登录
编程论坛 VB6论坛

想在 Excel 中自带的VB 编写一个小计算公式求解方程

chlgk 发布于 2015-05-15 22:55, 686 次点击
Function r(r1, r2, r3, a)
For j = 2 To 1000
x = r1 * (1 - 0.001 * j)
y = 2 * x * (r1 - r2) + r1 * r1 - r2 * r2 + (r1 + r2) * (r1 + r2) - 2 * (r1 + r2) * Cos(a) * (r1 + x * (r1 - r3) / (r1 + r3)) - 2 * (r1 + r2) * Sin(a) * 2 / (r1 + r3) * Sqr(r1 * r3) * Sqr(x ^ 2 + x * (r1 + r3))
If y < 0 Then Next j
x = r1 * (1 - 0.001 * j)
y = 2 * x * (r1 - r2) + r1 * r1 - r2 * r2 + (r1 + r2) * (r1 + r2) - 2 * (r1 + r2) * Cos(a) * (r1 + x * (r1 - r3) / (r1 + r3)) - 2 * (r1 + r2) * Sin(a) * 2 / (r1 + r3) * Sqr(r1 * r3) * Sqr(x ^ 2 + x * (r1 + r3))
If y > 0 Then Exit For
End If
End If
End Function

主要想求求解以下方程:
只有本站会员才能查看附件,请 登录

R1,R2,R3,a  都是已知量,就是求r.

 请哪位高手帮忙,万分感谢。
2 回复
#2
lianyicq2015-05-18 08:48
到底是求r还是f(r)?
是想用试探法来求?但是不知道函数值f(r)无法试探。阿尔法也未知?r有没有取值范围。
...
只想到笨办法
程序代码:
Function r(R1 As Single, R2 As Single, R3 As Single, a As Single, StepJ As Single, ErrJ As Single) As Single
  Dim temp As Single
  For j = MinJ To MaxJ Step StepJ
    temp = 2 * j * (R1 - R2) + R1 ^ 2 - R2 ^ 2 + (R1 + R2) ^ 2 - 2 * (R1 + R2) * Cos(a * (R1 + j * (R1 - R3) / (R1 + R3))) - 2 * (R1 + R2) * Sin(a * 2 * Sqr(R1 * R3) * Sqr(j ^ 2 + j * (R1 + R3)) / (R1 + R3))
    If Abs(temp) < ErrJ Then
      r = j
      Exit For
    End If
  Next
End Function
看看能不能达到目的
...
 EXCEL自带用迭代法求解超越方程的功能,用到了数据工具里的假设分析,可以试试。
如果用代码写迭代算法
只有本站会员才能查看附件,请 登录

[attach]80337[/attach]
代码按笨办法的方式写。
写了一个小例子计算y=cosx-x的解
程序代码:

'Example for y=cos-x
Option Explicit
Private Sub Command1_Click()
  Dim Y As Single, DY As Single
  Dim ERR As Single
  Dim times As Long
  Dim XK As Single
  times = 0
  Y = 1 'Ensure Y>ERR in the first time
  ERR = 0.0001
  XK = Val(Text3.Text)
  While (Abs(Y) > ERR)
    If times <> 0 Then XK = XK - Y / DY
    Y = Cos(XK) - XK
    DY = -Sin(XK) - 1
    times = times + 1
  Wend
  Form1.Caption = Y & " " & times & " " & XK

End Sub
把公式换了试试

[ 本帖最后由 lianyicq 于 2015-5-19 09:28 编辑 ]
#3
wmf20142015-05-18 08:50
楼主是要求r值,因为f(r)=0.
1