Re: [問題] 解完聯立無法直接得到值

看板MATLAB作者 (eji)時間6年前 (2018/07/10 10:14), 編輯推噓1(100)
留言1則, 1人參與, 6年前最新討論串2/2 (看更多)
※ 引述《ccam (′・ω・`)》之銘言: : 遇到的問題是 : 透過兩條由連接兩個點的線來找交點 : 都是簡單的二元一次線性方程式 : 但是方程式的斜率和常數會需要一直改變 : 所以先用下面的方法測試 : 但是得出的交點卻顯示代數而不是直接顯示數值 : 想要看數值必須把那串代數答案重新輸入才看的到 : 有沒有辦法在跑的過程中直接得到數值答案? : 變成: : x=4 : y=4 : 這樣。 : 感謝。 : 程式碼: : %Line_1 : x1=0; : y1=0; : x2=8; : y2=8; : a = polyfit([x1,x2],[y1,y2],1); : %Line_2 : x3=0; : y3=8; : x4=8; : y4=0; : b = polyfit([x3,x4],[y3,y4],1); : value_ax = a(1,1); %Line1斜率 : value_ay = a(1,2); %Line1常數 : value_bx = b(1,1); %Line2斜率 : value_by = b(1,2); %Line2常數 : syms x y : [x,y] = solve('y = value_ax * x + value_ay','y = value_bx * x + value_by') : 結果: : x = : -(value_ay - value_by)/(value_ax - value_bx) : y = : (value_ax*value_by - value_ay*value_bx)/(value_ax - value_bx) 法1: 問題在於你的寫法不會幫你把值代入字串 你可以把你solve裡的字串貼到Command Window執行 會發現你value_ax等變數還是保留成字串 要代入的話要使用num2str把數值轉成字串如下 [x,y] = solve(['y=' num2str(a(1,1)),'*x+',num2str(a(1,2))],['y=',... num2str(b(1,1)),'*x +', num2str(b(1,2))]) 法2: solve也可以吃符號變數 所以可以把要解的方程式令成eq1=0,eq2=0的形式 syms x y eq1=a(1,1)*x+a(1,2)-y; eq2=b(1,1)*x+b(1,2)-y; [x,y]=solve(eq1,eq2) 法3: 既然是線性方程可以整理成矩陣Ax=b的形式 然後x=A\b A=[a(1,1) -1 b(1,1) -1]; bb=-[a(1,2);b(1,2)]; xy=A\bb 法4: 其實你解出來的結果就是沒代值的代數解 用subs或eval就可以把值代入了 所以最後加個 x=subs(x) y=subs(y) 或 x=eval(x) y=eval(y) 注意每個方法解完的變數型態略有不同 solve、subs出來會是符號變數 左除(\)、eval會是浮點數 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.121.147.14 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1531188852.A.8F2.html

07/10 13:40, 6年前 , 1F
大感謝!!!
07/10 13:40, 1F
文章代碼(AID): #1RH1PqZo (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1RH1PqZo (MATLAB)