Извлечь определенные части символьного выражения matlab / octave? - PullRequest
0 голосов
/ 28 ноября 2018

Как извлечь определенные части выражения в пакет символов Matlab / Octave?В XCAS можно использовать индексные выражения, но я не могу найти ничего похожего в Octave / Matlab.

Например, с X = C*L*s**2 + C*R*s + 1 есть ли способ получить C*R*s на X(2) иликак?

Было бы неплохо сделать это и с факторами.X = (alpha + s)*(beta**2 + s**2)*(C*R*s + 1), и X(2) дают (beta**2 + s**2).

Спасибо!

1 Ответ

0 голосов
/ 29 ноября 2018

children ( MATLAB doc , Octave doc ) делает это, но порядок, в котором вы пишете выражения, не будетобязательно быть таким же.Порядок также различается в MATLAB и Octave.

Расширенное выражение:

syms R L C s;
X1 = C*L*s^2 + C*R*s + 1;
partsX1 = children(X1);

В MATLAB:

>> X1
X1 =
C*L*s^2 + C*R*s + 1

>> partsX1
partsX1 =
[ C*R*s, C*L*s^2, 1]

ВОктава:

octave:1> X1
X1 = (sym)

      2            
  C⋅L⋅s  + C⋅R⋅s + 1

octave:2> partsX1
partsX1 = (sym 1×3 matrix)

  ⎡       2      ⎤
  ⎣1  C⋅L⋅s   C⋅R⋅s⎦

Факторизованное выражение:

syms R C a beta s;   %alpha is also a MATLAB function so don't shadow it with your variable
X2 = (a + s) * (beta^2 + s^2) * (C*R*s + 1);
partsX2 = children(X2);

В MATLAB:

>> X2
X2 =
(a + s)*(C*R*s + 1)*(beta^2 + s^2)

>> partsX2
partsX2 =
[ a + s, C*R*s + 1, beta^2 + s^2]

В октаве:

octave:3> X2
X2 = (sym)

          ⎛ 2    2⎞            
  (a + s)⋅⎝β  + s ⎠⋅(C⋅R⋅s + 1)

octave:4> partsX2
partsX2 = (sym 1×3 matrix)

  ⎡                    2   2⎤
  ⎣C⋅R⋅s + 1   a + s   β + s ⎦
...