使用Matlab的Solve()和符号常量

时间:2017-03-20 18:44:29

标签: matlab

我有一个包含两个未知变量的两个问题的系统,我试图使用Matlab的solve()函数来解决,但是几乎肯定会出现我的错误。我试图解决The following two equations,其中r,lambda和X是常量。为此,我一直试图运行以下内容:

clear all;
syms VA VB r X L;
assumeAlso(VB <= VA);
assumeAlso(0 <=  VB);
assumeAlso(0 < r <= 1);
assumeAlso(0 < L);
assumeAlso(0 < X);
assumeAlso(VA, 'real');
assumeAlso(VB, 'real');
assumeAlso(r, 'real');
assumeAlso(L, 'real');
assumeAlso(X, 'real');


eqns = [VA == ((r*VA + L*(VA-VB))^2)/(2*X*(r+2*L)) + (L*(VA+VB)*(r*VA+L*(VA-VB)))/(X*(r+2*L)) + ...
(((r^2/L+r)*VA + r*VB)^2 - (r*VA+L*(VA-VB))^2)/(2*X*(r+L)) + ...
(L*VB*((r+L)*VB - L*VA + r^2/L*VA))/(X*(r+L)) + ...
(X/(2*r)) - (((r^2/L+r)*VA+r*VB)^2)/(2*X*r) - VA*(1-1/X*((r^2/L+r)*VA+r*VB)), ...
...
VB == (L^2*VA^2 - L^2*VB^2 + r*VA*(L*VA+L*VB))/(X*(r+2*L)) + ...
(L*VA*(r^2/L*VA + r*VB - L*(VA-VB)))/(X*(r+L)) + ...
(VA*(X-((r^2/L+r)*VA + r*VB)))/X];

S = solve(eqns,[VA VB])

我的目标是用r,X和L来解决VA和VB,这似乎应该是可能的。当我填写r,L和X的值时,我很容易获得解决方案。

然而,当我运行此代码时,我收到消息:

 Warning: Explicit solution could not be found. 

通常我会解释为实际上没有解决方案,但是当我运行时

S = solve(eqns)

我没有得到相同的输出,但是:

(solvelib::cartesianPower(R_, 2) minus solvelib::VectorImageSet(matrix([[z], [0]]), z, C_)) intersect solvelib::VectorImageSet(matrix([[-(VA^4*x^5 - 2*L^5*VA*VB^3 - 2*L^5*VA^3*VB - L*VA^4*x^4 - 3*L^4*VA^4*x + L^4*VB^4*x + 4*L^5*VA^2*VB^2 - 5*L^2*VA^4*x^3 + 4*L^3*VA^4*x^2 + L^3*VB^4*x^2 + 4*L^2*VA^2*VB^2*x^3 - 5*L^3*VA^2*VB^2*x^2 + 4*L*VA^3*VB*x^4 + L^4*VA*VB^3*x + 9*L^4*VA^3*VB*x + L*VA^2*VB^2*x^4 + 2*L^2*VA*VB^3*x^3 + 2*L^3*VA*VB^3*x^2 - 8*L^3*VA^3*VB*x^2 - 8*L^4*VA^2*VB^2*x)/(L^4*VA^3 - L^4*VB^3 - L^4*VA*VB^2 + L^4*VA^2*VB)], [x]]), x, R_ intersect RootOf(z^6 + (z^5*(L*VA^4 + L*VA^2*VB^2 + 4*L*VA^3*VB))/VA^4 + (z^4*(- 7*L^2*VA^4 + 2*L^2*VA*VB^3 + 8*L^2*VA^3*VB + 6*L^2*VA^2*VB^2))/VA^4 + (z^3*(- 5*L^3*VA^4 + L^3*VB^4 + 6*L^3*VA*VB^3 - 6*L^3*VA^3*VB + 4*L^3*VA^2*VB^2))/VA^4 + (z^2*(7*L^4*VA^4 + 3*L^4*VB^4 + 6*L^4*VA*VB^3 - 2*L^4*VA^3*VB - 14*L^4*VA^2*VB^2))/VA^4 - (z*(6*L^5*VA^4 - 2*L^5*VB^4 - 16*L^5*VA^3*VB + 12*L^5*VA^2*VB^2))/VA^4 + (L^6*VA^4 + L^6*VB^4 - 4*L^6*VA*VB^3 - 4*L^6*VA^3*VB + 6*L^6*VA^2*VB^2)/VA^4, z)) intersect solvelib::VectorImageSet(matrix([[x], [y]]), [x, y], [Dom::Interval(0, Inf), Dom::Interval(0, [1])])

没有VA和VB的解决方案。

有没有人知道如何用r,L和X来解决[VA VB]的matlab解决方案()?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用solve命令的 ReturnConditions 标志。如,

S = solve(eqns,[VA,VB],'ReturnConditions',true)

这将返回一个包含解决方案数组和每个条件所需条件的结构。

我在你的例子中玩了一下,并在制作相同的assumptions时遇到了与你相同的障碍。如果我们从零假设开始,solve将找到给定方程的一组解。您可以检查每个给定解决方案的条件,看看有没有满足您的原始约束条件?

只要VA和VB不受Reals约束,上面给出的例子就会产生结果。您的eqns系统中是否存在拼写错误?