在Matlab中用符号/参数求解非线性方程

时间:2014-07-29 06:52:10

标签: matlab equation nonlinear-functions symbolic-computation

我有两个等式,x, yz是变量,p1, p2p3是参数。 MATLAB可以根据x y z找到p1, p2, p3的参数/符号解决方案吗?

  • 2(x−p1)+2(xy−p3)y = 0
  • 2(y−p2)+2(xy−p3)x = 0

1 个答案:

答案 0 :(得分:1)

简单地说是。获取所有变量,使用syms定义每个变量,使它们成为符号变量,然后使用solve为您求解等式。您将两个方程指定为solve中的两个参数。输出(我们将存储在sol中)将返回包含x字段和y字段的结构,因为您的等式是针对两个变量定义的,并且{{ 1}}是参数。换句话说,这样做:

p1,p2,p3

您可以通过访问各自的字段来访问syms p1 p2 p3; syms x y; sol = solve(2*(x-p1)+2*(x*y-p3)*y == 0, 2*(y-p2)+2*(x*y-p3)*x == 0); x的解决方案:

y

你会收到警告,说明解决方案是按符号参数化的,但这是可以预料的。具体做法是:

>> sol.x

ans =

(p1^3 + p3*p1^2*z1 + p1*z1^4 - 1.0*p2*p1*z1^3 + p1*z1^2 - 1.0*p2*p1*z1 + p3*z1^3 - 1.0*p2*p3*z1^2 + p3*z1 - 1.0*p2*p3)/(p1^2 + p3^2)

>> sol.y

ans =

z1