2009-08-20 5 views
0

я пытаюсь решить эту систему уравнений в MATLAB и я получаю пустой sym объект:MATLAB: Почему решение возвращает пустой объект sym?

equations = {'I2B+I2EQAB=I22B+I2EQBC',... 
      'I2A=I2EQAB+I2EQAC+I22A',... 
      'I2C+I2EQBC+I2EQAC=I22C',... 
      'I22B=IZB+IC1B',... 
      'IZB=IC2B+IZBB',... 
      'I22C=-I2C*Z2C*YC/2+IZC',... 
      'IZC=IC2C+IZCC',... 
      'I22A=IC1A+IZA1',... 
      'IC4A+IZA2=IZBB+IZCC',... 
      'IZB*Z2LB+IC2B*2/YB=IC1B*2/YB',... 
      'I2C*Z2C=-IC2C*2/YC+IZC*Z2LC',... 
      'IZA1*m*Z2LA+IC2A*2/(m*YA)=IC1A*2/(m*YA)',... 
      'IC4A*2/((1-m)*YA)=IC2A*2/(m*YA)+IZA2*(1-m)*Z2LA',... 
      'I2EQBC*Z2EQBC+IZC*Z2LC=IZB*Z2LB',... 
      'I2B*Z2B+IC1B*2/YB',... 
      'I2C*Z2C+IC1C*2/YC',... 
      'I2A*Z2A+IC1A*2/(m*YA)',... 
      'IZB*Z2LB+(1-m)*Z2LA*IZA2=IZA1*m*ZL2A-I2EQAB*Z2EQAB',... 
      'IZA1*m*Z2LA=IZA2*(1-m)*Z2LA+IZC*Z2LC+I2EQAC*Z2EQAC',... 
      'IC4A/((1-m)*YA)=IC2C/YC'}; 
variables = {'m','I2A','I2B','I2C','I2EQAB','I2EQAC','I2EQBC',... 
      'IZA1','IC1A','IC2A','IZA2','IC4A','IC1B','IZB',... 
      'IC2B','IZBB','IZC','IC2C','IZCC'}; 
LL = solve(equations{:},variables{:}) 

Можете ли вы помочь мне понять, что происходит не так?

ответ

2
Warning: 20 equations in 19 variables. 
> In solve at 139 
Warning: Explicit solution could not be found. 
> In solve at 170 

LL = 

[ empty sym ] 

Я думаю, что это само за себя, если не проверить документацию, относящуюся к DSOLVE где:

Диагностика Если dsolve не может найти аналитическое решение уравнения, оно выводит предупреждение: Внимание : Явное решение не найдено. и возвращает пустой объект sym.

0

Я попытался переформатировать уравнения и ввести непосредственно в символическую панель инструментов, а функция solve просто выплескивает все уравнения, поэтому она не может решить эти переменные, поскольку текущие уравнения стоят.

Есть ли у вас какие-либо знания о доменах или ограничениях для всех этих переменных? Если вы это сделаете, я бы посмотрел на указание всех этих, возможно, это позволило бы решателю найти решение для вас.

Чтобы вы быстро и работает в символическом инструментов, вот ваши уравнения переформатирован, чтобы соответствовать:

equations := { 
    I2B + I2EQAB       = I22B + I2EQBC, 
    I2A         = I2EQAB + I2EQAC + I22A, 
    I2C + I2EQBC + I2EQAC     = I22C, 
    I22B         = IZB + IC1B, 
    IZB         = IC2B + IZBB, 
    I22C         = -I2C * Z2C * YC/2 + IZC, 
    IZC         = IC2C + IZCC, 
    I22A         = IC1A + IZA1, 
    IC4A + IZA2       = IZBB + IZCC, 
    IZB * Z2LB + IC2B * 2/YB   = IC1B * 2/YB, 
    I2C * Z2C        = -IC2C * 2/YC + IZC * Z2LC, 
    IZA1 * m * Z2LA + IC2A * 2/(m * YA) = IC1A * 2/(m * YA), 
    IC4A * 2/((1 - m) * YA)    = IC2A * 2/(m * YA) + IZA2 * (1 - m) * Z2LA, 
    I2EQBC * Z2EQBC + IZC * Z2LC   = IZB * Z2LB, 
    I2B * Z2B + IC1B * 2/YB, 
    I2C * Z2C + IC1C * 2/YC, 
    I2A * Z2A + IC1A * 2/(m * YA), 
    IZB * Z2LB + (1 - m) * Z2LA * IZA2 = IZA1 * m * ZL2A - I2EQAB * Z2EQAB, 
    IZA1 * m * Z2LA      = IZA2 * (1 - m) * Z2LA + IZC * Z2LC + I2EQAC * Z2EQAC, 
    IC4A/((1 - m) * YA)     = IC2C/YC 
}: 

variables := { 
    m, I2A, I2B, I2C, I2EQAB, I2EQAC ,I2EQBC, 
    IZA1, IC1A, IC2A, IZA2, IC4A, IC1B, IZB, 
    IC2B, IZBB, IZC, IC2C, IZCC 
}: 

solve(equations, variables) 

Чтобы указать, что все известные переменные являются вещественными числами, используйте следующую команду:

assume(variables, Type::Real) 

Также обратите внимание, что в уравнениях я подсчитываю 36 уникальных переменных (если не ошибаюсь), вы получите огромный список «what-if» для этих уравнений, если решатель смог создать результат. Я бы посмотрел на ваши уравнения и посмотрел, можно ли их группировать и решать их в меньших наборах.

+0

это MuPAD код? – gnovice

+0

Да, это, или «символический инструментарий», как известно теперь, MathWorks купил его и интегрировать его в Matlab. –

-2

Matlab, символические решения: решения()

Я думаю, что есть проблемы с символическими переменных чьи имена более чем один символ.

a-z работает, но в любое время я пытаюсь решить что-то с двумя буквами или больше, просто плюет обратно пустым набором.

Например, как-то просто, как решить («ху * 10 = 1», «ху») не работает :(

+1

'решить ('ху * 10 = 1 ',' xy ') 'действительно работает – Samuel