Re: [運算] 非線性三元二次方程組求解

看板MATLAB作者 (eji)時間13年前 (2012/08/16 15:02), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《joe7078 (Science & Truth)》之銘言: : 各位好! 新手小弟我第一次在這裡發文,如有疏漏,懇請指教^^ : 一個神祕的三元二次非線性方程組, 懇請各位先進幫忙, 謝謝 ! : 方程組如下 : : A * x^2 + B * y^2 + C * z^2 + D *xyz = E : i i i i i : i=1,2,3 , A , B , C , D , E 皆為已知數值. : i i i i i : 我用solve會解出一大坨不合理的東西, 用符號更是算不出來@@ : 不知道其他數值怎麼用? 或是有沒有更簡單的方法求出解? : 懇請各位高手幫忙 ORZ A_i~E_i, i=1,2,3 如果全部用符號的話 用solve似乎解不太出來 如果代數字的話就可以 我這邊是隨便代數字 clear syms x y z A=round(rand(3,1)*10)-5; B=round(rand(3,1)*10)-5; C=round(rand(3,1)*10)-5; D=round(rand(3,1)*10)-5; E=round(rand(3,1)*10)-5; for i=1:3 eq(i,1)=A(i)*x^2+B(i)*y^2+C(i)*z^2+D(i)*x*y*z-E(i); end [x,y,z]=solve(eq(1),eq(2),eq(3)) i=sqrt(-1); x=eval(x) y=eval(y) z=eval(z) norm(eval(eq)) 用solve解出來的因為是解析解 通常長得很難看 可以用eval這個指令代成數值比較容易看 解出來的x,y,z也可以用eval(eq)代回原方程檢查是否滿足 解出來有12組解 有時候solve解不出來也可以考慮用fsolve求數值解 首先要先給定A~E 然後輸入 F=@(x) [A*x(1)^2+B*x(2)^2+C*x(3)^2+D*prod(x)-E] xx=fsolve(F,rand(3,1)) f=F(xx) fsolve第一個輸入F就是你要解的方程式 第二個輸入是初始猜值 缺點是一組猜值只能得一組解 還有隨便亂猜可能找不到解 所以同樣地把解代回原方程式檢查 如果有找到解應該會是用solve解出12組解的其中一組 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.146.175

08/16 22:25, , 1F
感謝高手熱情回答 ^^
08/16 22:25, 1F
文章代碼(AID): #1GB9hfCi (MATLAB)
文章代碼(AID): #1GB9hfCi (MATLAB)