方程如下:f(Alf0) = 5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234
给个思路和那里有相关资料亦可,谢谢先

解决方案 »

  1.   

    编一个函数
    function f(alf0)
         f=5836*sin(70.8-alf0)-7531*sin(alf0)+234
    end function
    然后要用的时候就可以直接调用了
      

  2.   

    不好意思,没有写清楚,我想求出
    f(Alf0) = 5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234=0时的Alf0的解
      

  3.   

    rypgood(失魂) :如果5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234=0中系数动态变化时求解Alf0,怎么实现?
      

  4.   

    以0.1度为步长循环计算,结果最接近0的Alf0值就是你要的结果.....
      

  5.   

    For Alf0 = 0 To 70.8 Step 0.1
        f(Alf0) = l0 * Sin(70.8 - Alf0) - (d0 + nx) * Sin(Alf0) + r
        If Abs(f(Alf0)) < 0.001 Then
        h20 = (d0 + nx) * Sin(Alf0) - r
        Text7.Text = Format(Alf0, "#.00")
        Text8.Text = Format(h20, "#.00"
    End If
    Next Alf0
    总告诉我越界???
      

  6.   

    是不是需要在里面加个求f(Alf0)最小的语句?
      

  7.   

    VB里面三角函数变量是弧度,看你的代码是以角度为单位的,需要转换alfa0=alfa0*pi/180pi为圆周率
      

  8.   

    另外你的代码里面误差限设得太小,如果你的角度只需要精确到0.1度,那你最好是加求f(alfa0)最小的语句或者是直接改大误差限,但是由于你的方程参数是变量,求f(alfa0)最小会比较好一些
      

  9.   

    If Abs(f(Alf0)) < 0.001 Then
    =====================================
    这样不好..................
    应该将值记录下来,最接近0的为最佳答案...例如:
    dim temp as double
    dim s as string
    temp=999999999999999
    For Alf0 = 0 To 70.8 Step 0.1
        f(Alf0) = l0 * Sin(70.8 - Alf0) - (d0 + nx) * Sin(Alf0) + r
        If Abs(f(Alf0)) < abs(temp) Then
        s=cstr(alf0)&":"&cstr(f(alf0))
        h20 = (d0 + nx) * Sin(Alf0) - r
        Text7.Text = Format(Alf0, "#.00")
        Text8.Text = Format(h20, "#.00"
    End If
    Next Alf0
    debug.print s原理是这样.........
      

  10.   

    5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234=0
    要分步吧,把sin(alfo)用一个猜数代替
    求出表达式
    返回去求解
    不过我是刚学vb的
      

  11.   

    继续加分,请教高人!!
    For Alf0 = 0 To 70.8 * pi / 180 Step 0.1
        f = 5836.4 * Sin(70.8 * pi / 180 - Alf0) - 741531.4 * Sin(Alf0) + r
        If Abs(f) < 0.1 Then
        h20 = (d0 + nx) * Sin(Alf0) - r
        Text7.Text = Format(Alf0, "#.00")
        Text8.Text = Format(h20, "#.00")
    End If
    Next Alf0
    编译过去,但是没有结果显示在Text8.Text和Text7.Text
      

  12.   

    s = 0.00000000000001
    Alf00 = 0: Alf01 = 70.8 * pi / 180
    'f = 5836.4 * Sin(70.8 * pi / 180 - Alf0) - 741531.4 * Sin(Alf0) + r
    While Abs(Alf01 - Alf00) > s
    Alf0 = (Alf00 + Alf01) / 2
    If (5836.4 * Sin(70.8 * pi / 180 - Alf00) - 741531.4 * Sin(Alf00) + r) * (5836.4 * Sin(70.8 * pi / 180 - Alf0) - 741531.4 * Sin(Alf0) + r) > 0 Then
    Alf00 = Alf0
    Else
    Alf01 = Alf0
    End If目前已经求出一个解,另外一个怎么能同时显示???准备结帐喽............
      

  13.   

    你的代码里面有两个问题:
    1.你的代码里面将角度转化为弧度以后,步长不能再用0.1,因为0.1rad=0.1*180/pi=5.73度,显然步长太大,如果你要求的结果精度在0.1度,可以将步长改为0.1*pi/180
    2.你的误差限还是设得太小,建议你采用lsftest的方法,判断最接近0的值,才能得到解,你的代码里面if条件无法满足,所以text没有输出此外,如果可以的话,我建议你采用迭代的方法求解,不要用固定步长的方式,可以得到精度更高的解,迭代循环的次数比固定步长循环次数一般要低得多,并且容易改变所需要的求解精度。
      

  14.   

    谢谢大胖、lsftest、rypgood(失魂),已经搞定,和手算结果一样,代码如下:
    s = 0.00000000000001
    Alf00 = 0: Alf01 = 70.8 * pi / 180
    'f = 5836.4 * Sin(70.8 * pi / 180 - Alf0) - 7531.4 * Sin(Alf0) + r
    While Abs(Alf01 - Alf00) > s
    Alf0 = (Alf00 + Alf01) / 2
    If (5836.4 * Sin(50.8 * pi / 180 - Alf00) - 7531.4 * Sin(Alf00) + r) * (5836.4 * Sin(50.8 * pi / 180 - Alf0) - 7531.4 * Sin(Alf0) + r) > 0 Then
    Alf00 = Alf0
    Else
    Alf01 = Alf0
    End If
    Wend
       'Text7.Text = Format(Alf0, "#.00")
        Alf0 = (Alf00 + Alf01) / 2
        h20 = (d0 + nx) * Sin(Alf0)
        h200 = (h20 - r) * l / l0 + r
        Text7.Text = Format(Alf0 * 180 / pi, "#.00")
        Text8.Text = Format(h20, "#.00")
        Text9.Text = Format(h200, "#.00")
    结帐喽~~~~~~~~~~~~~~~~~~~~~~~尽管还有别的很多问题需要解决,以后大家看到我发帖,多帮忙啊!!!!!!!