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原理是这样.........
继续加分,请教高人!! 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
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目前已经求出一个解,另外一个怎么能同时显示???准备结帐喽............
function f(alf0)
f=5836*sin(70.8-alf0)-7531*sin(alf0)+234
end function
然后要用的时候就可以直接调用了
f(Alf0) = 5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234=0时的Alf0的解
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
总告诉我越界???
=====================================
这样不好..................
应该将值记录下来,最接近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原理是这样.........
要分步吧,把sin(alfo)用一个猜数代替
求出表达式
返回去求解
不过我是刚学vb的
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
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目前已经求出一个解,另外一个怎么能同时显示???准备结帐喽............
1.你的代码里面将角度转化为弧度以后,步长不能再用0.1,因为0.1rad=0.1*180/pi=5.73度,显然步长太大,如果你要求的结果精度在0.1度,可以将步长改为0.1*pi/180
2.你的误差限还是设得太小,建议你采用lsftest的方法,判断最接近0的值,才能得到解,你的代码里面if条件无法满足,所以text没有输出此外,如果可以的话,我建议你采用迭代的方法求解,不要用固定步长的方式,可以得到精度更高的解,迭代循环的次数比固定步长循环次数一般要低得多,并且容易改变所需要的求解精度。
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")
结帐喽~~~~~~~~~~~~~~~~~~~~~~~尽管还有别的很多问题需要解决,以后大家看到我发帖,多帮忙啊!!!!!!!