[討論] 用解acos方程式出現錯誤的解...

看板MATLAB作者 (超哥)時間14年前 (2012/02/16 11:38), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串1/1
各位板友大家好: 小弟最近在使用解方程式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)

02/16 11:53, , 1F
為什麼要eval,為什麼要eval兩次? orz
02/16 11:53, 1F

02/16 19:53, , 2F
eval是因為內部有已知變數,也可以去掉改成正常模式
02/16 19:53, 2F

02/17 01:32, , 3F
我猜是因為y^2 matlab再做處理的時候當成二次方程式
02/17 01:32, 3F

02/17 01:32, , 4F
在解,所以會有兩個解。 實際上y-401必須<0 才會有91
02/17 01:32, 4F

02/17 01:32, , 5F
度出現 所以另一個是無效解
02/17 01:32, 5F

02/17 01:34, , 6F
把89跟91代入式子 移項後會發現剛好等於+-sin(1度)
02/17 01:34, 6F

02/17 10:50, , 7F
謝謝sanzosaskura,這個板果然高手如雲
02/17 10:50, 7F
文章代碼(AID): #1FF7ekJy (MATLAB)