我想象征性地为beta1
,beta2
和beta3
解决一个方程组。我按如下方式定义变量并设置方程系统:
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'
来解决此问题。任何人都可以帮助我吗?
答案 0 :(得分:0)
'IgnoreAnalyticConstraints'
选项不是魔法,可以让人分析解决任何符号系统。你没有在你的问题中提到它(将来是一个好主意),但在R2015a中运行你的代码也会产生警告信息:
警告:找不到明确的解决方案。
来自solve
的文档:
如果solve返回一个空对象,则不存在解。如果solve返回带有警告的空对象,则可能存在解决方案但是solve没有找到任何解决方案。
对于具有所有任意参数的系统,一般的分析解决方案不太可能存在。如果您将某些参数明确设置为特定值(例如,小整数),您可能会找到一些解决方案。使用assumptions
有时也会有所帮助。