matlab求解方程组问题

形如
Y^2=a*X^4+b*X^3+c*X^2
d*X^2+e*Y*X^2+f*X^3=Y*(X^2+Y^2)^(1/2)
的方程组,其中X,Y为未知数,a,b,c,d,e,f为常量
该如何利用matlab求解?用solve?还是fsolve?哪位大侠方便告知么?最好能有个程序示例,多谢啦!

sol=solve('Y^2=a*X^4+b*X^3+c*X^2','d*X^2+e*Y*X^2+f*X^3=Y*(X^2+Y^2)^(1/2)')
算出的答案在sol的结构体中,sol.X输出X的解,sol.Y输出Y的解
例如,取a=1,b=2,c=3,d=2,e=3,f=4
结果是
X=
0
2.2702141167906375861974944679779
0.19937748547900423843524163291072
-1.4501007388699634211078460197236
-0.55080167585563940629314195942655
- 1.226201995387982693839919663576 + 1.2065945502688295981223941652011*i
- 0.75814259838403680477595439729327 + 0.59990016055468768646553293525378*i
- 0.75814259838403680477595439729327 - 0.59990016055468768646553293525378*i
- 1.226201995387982693839919663576 - 1.2065945502688295981223941652011*i
Y=

0
-8.0885598818421860075731817452301
0.3697098572634950035193384414286
2.1521130053167234555230434616488
-0.81730118542526255120783307790647
0.63380965422709138779894891539446 - 1.4101679722974194047667275122941*i
1.0582094481165236620703675446351 - 0.70058613446807712625772900126414*i
1.0582094481165236620703675446351 + 0.70058613446807712625772900126414*i
0.63380965422709138779894891539446 + 1.4101679722974194047667275122941*i

关于你的追问:
首先,你给出的方程组是非线性的,而且明显solve可以用来解非线性方程组,
help solve
solve Symbolic solution of algebraic equations.
help只说他是用来解“算数方程”(algebraic equation)的,没有说只是是解线性方程(linear equation)的。
另外,这里强调了说是“符号解”(symbolic solution)。也就是说,你给出的方程可以用符号来代替常量而不需要具体数值,它能给出“解析解”,如果解析解存在的话。当解析解不存在而你又给出了具体数值的时候,他会尝试给出数值解。fslove与solve的不同之处就在于,他只能解有具体数值的方程,而且只会给出数值解。
更具体一点讲:solve指令解方程的方法和我们笔算解方程的方法类似,是通过代数等式变换来完成的。所以solve函数本身的目的就是为我们求出解析解。只有方程不存在解析解的时候他才会尝试数值算法。而fsolve指令则是为了更复杂的系统而创建的,由于工程上的实际系统基本不可能存在解析解,所以fsolve是通过迭代逐渐逼近真实解的数值算法来解系统方程的。
对于有具体数值的简单系统来讲,这两者得出的结果应该没有差别。当系统方程比较复杂,未知量比较多的时候,由于两者都无法保证给出系统方程的全部解,所以他们可能会给出不一样的部分解。至于两个指令会给出什么样的解,取决于他们所使用的数值算法,以及求解区间。
温馨提示:答案为网友推荐,仅供参考
相似回答