作者ejialan (eji)
看板MATLAB
标题Re: [运算] 非线性三元二次方程组求解
时间Thu Aug 16 15:01:58 2012
※ 引述《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
1F:推 joe7078:感谢高手热情回答 ^^ 08/16 22:25