0-by-1符号-为了获得正确的符号结果,我需要更改什么



我想象征性地求解beta1beta2beta3的方程组。我定义变量如下,并建立了方程系统:

w1 = sym('w1', 'real');
w2 = sym('w2', 'real');
me1 = sym('me1', 'real');
me2 = sym('me2', 'real');
btm1 = sym('btm1', 'real');
btm2 = sym('btm2', 'real');
mom1 = sym('mom1', 'real');
mom2 = sym('mom2', 'real');
gamma = sym('gamma', 'real');
T = sym('T', 'real');
beta1 = sym('beta1', 'real');
beta2 = sym('beta2', 'real');
beta3 = sym('beta3', 'real');
Nt = sym('Nt', 'real');
r1 = sym('r1', 'real');
r2 = sym('r2', 'real');
syms e1 e2 e3 real
b = [1/T * (1 + ( w1 + 1/Nt * beta1 * me1 + beta2 * btm1 + beta3 * mom1 ) *r1 ) ^(-gamma) * ( 1/Nt * me1 * r1 ) + 1/T * (1 + ( w2 + 1/Nt * beta1 * me2 + beta2 * btm2 + beta3 * mom2 ) *r2 ) ^(-gamma) * ( 1/Nt * me2 * r2 )
     1/T * (1 + ( w1 + 1/Nt * beta1 * me1 + beta2 * btm1 + beta3 * mom1 ) *r1 ) ^(-gamma) * ( 1/Nt * btm1 * r1 ) + 1/T * (1 + ( w2 + 1/Nt * beta1 * me2 + beta2 * btm2 + beta3 * mom2 ) *r2 ) ^(-gamma) * ( 1/Nt * btm2 * r2 )
     1/T * (1 + ( w1 + 1/Nt * beta1 * me1 + beta2 * btm1 + beta3 * mom1 ) *r1 ) ^(-gamma) * ( 1/Nt * mom1 * r1 ) + 1/T * (1 + ( w2 + 1/Nt * beta1 * me2 + beta2 * btm2 + beta3 * mom2 ) *r2 ) ^(-gamma) * ( 1/Nt * mom2 * r2 )];

现在我想要我的结果,并且总是得到Empty sym: 0-by-1:

res = solve(b-[e1 e2 e3]', beta1, beta2, beta3, 'IgnoreAnalyticConstraints', true);
simplify(res.beta1) 
ans =
Empty sym: 0-by-1

我希望通过使用这个StackOverflow问题中提出的'IgnoreAnalyticConstraints'来解决这个问题。有人能帮我吗?

'IgnoreAnalyticConstraints'选项并不是一个可以解析求解任何符号系统的魔术。您在问题中没有提到它(这是将来的好主意),但在R2015a中运行代码也会导致一条警告消息:

警告:找不到显式解决方案。

来自solve:的文档

如果solve返回一个空对象,则不存在任何解决方案。如果solve返回一个带有警告的空对象,则可能存在解决方案,但solve未找到任何解决方案。

对于所有任意参数的系统,不太可能存在一般的解析解。如果您明确地将某些参数设置为特定值(例如,小整数),您可能会找到一些解决方案。使用assumptions有时也会有所帮助。

最新更新