2015-03-21 1 views
1

Я хотел бы решить систему уравнений символически для beta1, beta2 и beta3. Я определил переменные следующим образом и настроить систему уравнений:0-by-1 sym - Что мне нужно изменить, чтобы получить правильные символические результаты?

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. Может кто-нибудь мне помочь?

+0

Я предполагаю, что нет решения, но без ввода невозможно сказать. – Daniel

+0

Я не использовал Input здесь, так как я думал, что было бы легче разрешить символически в первую очередь. Не может ли Matlab просто решить первое уравнение для бета1, а затем подключиться ко второму, решить для бета2 и, наконец, построить все в бета-3? – imeisteri

+0

Почему вы думаете, что эта система имеет аналитическое решение? Это почти не имеет особого значения, особенно когда вы берете несколько вещей произвольной силе 'gamma' (плохой выбор для имени переменной, так как ее имя обычно используется). – horchler

ответ

0

Опция 'IgnoreAnalyticConstraints' не магия, позволяющая аналитически анализировать любую символическую систему. Вы не упомянули об этом в своем вопросе (хорошая идея в будущем), но запуск вашего кода в R2015a также приводит к предупреждению:

Предупреждение: не удается найти явное решение.

Из документации solve:

Если решить возвращает пустой объект, то не существует никаких решений. Если решение возвращает пустой объект с предупреждением, решения могут существовать, но решение не находит никаких решений.

Очень маловероятно, что для вашей системы существуют все общие аналитические решения со всеми произвольными параметрами. Если вы явно задали некоторые из ваших параметров для определенных значений (например, небольшие целые числа), вы можете найти несколько решений. Использование assumptions также может помочь иногда.

 Смежные вопросы

  • Нет связанных вопросов^_^