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

时间:2015-03-21 12:25:16

标签: matlab symbolic-math equation-solving

我想象征性地为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

我希望使用this StackOverflow question中提议的'IgnoreAnalyticConstraints'来解决此问题。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

'IgnoreAnalyticConstraints'选项不是魔法,可以让人分析解决任何符号系统。你没有在你的问题中提到它(将来是一个好主意),但在R2015a中运行你的代码也会产生警告信息:

  

警告:找不到明确的解决方案。

来自solve的文档:

  

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

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