作者jeffchen106 (超哥)
看板MATLAB
标题[讨论] 用解acos方程式出现错误的解...
时间Thu Feb 16 11:38:19 2012
各位板友大家好:
小弟最近在使用解方程式solve,在给定已知角度,以及X轴座标,
欲算出Y轴的座标点。
由於我在方程式里面需使用到已知变数,因此我有使用eval指令。
以下是我的方程式:
a向量=(896,y-401) b向量=(0,5)
arccos{(a‧b)/(|a|*|b|)}=91度
此方程式欲解出y值,在Matlab我使用了以下程式做运算:
syms y;
k2=91*pi/180;
o=401;
TTT=eval(eval(['solve(''acos((y-' num2str(o) ')*5/(sqrt(896^2+(y-'
num2str(o) ')^2)*5))=k2' ''',y)']));
解出来TTT有两个解,分别是416.6397,另一个是385.3603。
但是我代入验算时,发现416.6397得到的角度是89度,而另一个解385.3603得到
的才是正确的91度,是为什麽呢?我k2都已经令好是91度*pi/180了阿。
谢谢各位板友!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.126.41.238
※ 编辑: jeffchen106 来自: 120.126.41.238 (02/16 11:47)
1F:推 sunev:为什麽要eval,为什麽要eval两次? orz 02/16 11:53
2F:→ jeffchen106:eval是因为内部有已知变数,也可以去掉改成正常模式 02/16 19:53
3F:推 sanzosaskura:我猜是因为y^2 matlab再做处理的时候当成二次方程式 02/17 01:32
4F:→ sanzosaskura:在解,所以会有两个解。 实际上y-401必须<0 才会有91 02/17 01:32
5F:→ sanzosaskura:度出现 所以另一个是无效解 02/17 01:32
6F:→ sanzosaskura:把89跟91代入式子 移项後会发现刚好等於+-sin(1度) 02/17 01:34
7F:→ jeffchen106:谢谢sanzosaskura,这个板果然高手如云 02/17 10:50