在线等~~~~~~~~~~如何求解三角函数

snowwolf80 2006-06-06 04:55:02
方程如下:f(Alf0) = 5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234
给个思路和那里有相关资料亦可,谢谢先
...全文
177 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowwolf80 2006-06-07
  • 打赏
  • 举报
回复
谢谢大胖、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")


结帐喽~~~~~~~~~~~~~~~~~~~~~~~尽管还有别的很多问题需要解决,以后大家看到我发帖,多帮忙啊!!!!!!!
liuks 2006-06-07
  • 打赏
  • 举报
回复
你的方程有两个解?如果你知道两个解的范围,采用上面的方法,分别求解两段范围,例如一个解在0~35度,另外一个在35~70.8度之间,那可以在两段范围内分别求解
liuks 2006-06-07
  • 打赏
  • 举报
回复
你的代码里面有两个问题:
1.你的代码里面将角度转化为弧度以后,步长不能再用0.1,因为0.1rad=0.1*180/pi=5.73度,显然步长太大,如果你要求的结果精度在0.1度,可以将步长改为0.1*pi/180
2.你的误差限还是设得太小,建议你采用lsftest的方法,判断最接近0的值,才能得到解,你的代码里面if条件无法满足,所以text没有输出

此外,如果可以的话,我建议你采用迭代的方法求解,不要用固定步长的方式,可以得到精度更高的解,迭代循环的次数比固定步长循环次数一般要低得多,并且容易改变所需要的求解精度。
snowwolf80 2006-06-07
  • 打赏
  • 举报
回复
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

目前已经求出一个解,另外一个怎么能同时显示???准备结帐喽............
snowwolf80 2006-06-07
  • 打赏
  • 举报
回复
继续加分,请教高人!!
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
rypgood 2006-06-06
  • 打赏
  • 举报
回复
5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234=0
要分步吧,把sin(alfo)用一个猜数代替
求出表达式
返回去求解
不过我是刚学vb的
lsftest 2006-06-06
  • 打赏
  • 举报
回复
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

原理是这样.........
liuks 2006-06-06
  • 打赏
  • 举报
回复
另外你的代码里面误差限设得太小,如果你的角度只需要精确到0.1度,那你最好是加求f(alfa0)最小的语句或者是直接改大误差限,但是由于你的方程参数是变量,求f(alfa0)最小会比较好一些
liuks 2006-06-06
  • 打赏
  • 举报
回复
VB里面三角函数变量是弧度,看你的代码是以角度为单位的,需要转换

alfa0=alfa0*pi/180

pi为圆周率
snowwolf80 2006-06-06
  • 打赏
  • 举报
回复
是不是需要在里面加个求f(Alf0)最小的语句?
snowwolf80 2006-06-06
  • 打赏
  • 举报
回复
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
总告诉我越界???
lsftest 2006-06-06
  • 打赏
  • 举报
回复
以0.1度为步长循环计算,结果最接近0的Alf0值就是你要的结果.....
snowwolf80 2006-06-06
  • 打赏
  • 举报
回复
rypgood(失魂) :如果5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234=0中系数动态变化时求解Alf0,怎么实现?
snowwolf80 2006-06-06
  • 打赏
  • 举报
回复
不好意思,没有写清楚,我想求出
f(Alf0) = 5836 * Sin(70.8 - Alf0) - 7531* Sin(Alf0) + 234=0时的Alf0的解
rypgood 2006-06-06
  • 打赏
  • 举报
回复
编一个函数
function f(alf0)
f=5836*sin(70.8-alf0)-7531*sin(alf0)+234
end function
然后要用的时候就可以直接调用了
rypgood 2006-06-06
  • 打赏
  • 举报
回复
就按你写的那样写就对了

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧