Re: [運算] 非線性三元二次方程組求解
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):