МАТЛАБ: Почему решение возвращает пустой объект sym? - PullRequest
0 голосов
/ 20 августа 2009

Я пытаюсь решить этот набор уравнений в 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{:})

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

Ответы [ 4 ]

2 голосов
/ 20 августа 2009
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.

1 голос
/ 13 декабря 2012

solve () имеет проблемы с именами переменных заглавными буквами, как у вас.

Пожалуйста, обратитесь к http://www.mathworks.com/matlabcentral/newsreader/view_thread/303201

0 голосов
/ 30 ноября 2009

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

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

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

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

0 голосов
/ 20 августа 2009

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

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

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

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 уникальных переменных (если я не ошибся) в уравнениях, вы бы получили огромный список «что, если» для этих уравнений, если бы решатель смог получить результат. Я посмотрю на ваши уравнения и выясню, сможете ли вы сгруппировать их и решить их в меньших наборах.

...