使用Matlab';带符号常量的s Solve()

使用Matlab';带符号常量的s Solve(),matlab,Matlab,我有一个由两个未知变量的两个问题组成的系统,我正试图使用Matlab的solve()函数来解决,但遇到的错误几乎肯定会发生在我这边。我试图解决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 &

我有一个由两个未知变量的两个问题组成的系统,我正试图使用Matlab的solve()函数来解决,但遇到的错误几乎肯定会发生在我这边。我试图解决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])
通常我会解释为实际上没有解决方案,但当我运行

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的解决方案

有人知道我如何用matlab的solve()来解[VA VB]的r、L和X吗

谢谢大家!

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

S = solve(eqns,[VA,VB],'ReturnConditions',true)
这将返回一个结构,其中包含解决方案数组和每个解决方案所需的条件

我对您的示例进行了一些研究,在做出相同的
假设时遇到了与您相同的障碍。如果我们从零假设开始,
solve
将找到给定方程的一组解。您可以检查每个给定解决方案的条件,看看是否有满足原始约束的条件

只要VA和VB不受实数限制,上述示例就会产生结果。您的EQN系统中是否存在键入错误?

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

S = solve(eqns,[VA,VB],'ReturnConditions',true)
这将返回一个结构,其中包含解决方案数组和每个解决方案所需的条件

我对您的示例进行了一些研究,在做出相同的
假设时遇到了与您相同的障碍。如果我们从零假设开始,
solve
将找到给定方程的一组解。您可以检查每个给定解决方案的条件,看看是否有满足原始约束的条件


只要VA和VB不受实数限制,上述示例就会产生结果。你的EQN系统中可能有打字错误吗?

我明白你的意思。运行代码,同时排除
VB的假设,我明白你的意思。运行代码,同时排除
VB的假设