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

问题描述 投票:2回答: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

我期望通过使用'IgnoreAnalyticConstraints'中提出的this StackOverflow question解决此问题。谁能帮我吗?

matlab symbolic-math equation-solving
1个回答
0
投票

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

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

摘自solve的文档:

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

几乎不可能为您的系统提供具有所有任意参数的常规分析解决方案。如果您将某些参数明确设置为特定值(例如,小整数),则可能会找到一些解决方案。有时使用solve也有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.