【问题标题】:Extract specific parts of a matlab/ octave symbolic expression?提取matlab/八度符号表达式的特定部分?
【发布时间】:2018-11-28 15:12:38
【问题描述】:

如何在 Matlab/ Octave 符号包中提取表达式的特定部分?在 XCAS 中,可以使用索引表达式,但我在 Octave/Matlab 中找不到类似的东西。

比如X = C*L*s**2 + C*R*s + 1,有没有办法通过X(2)之类的方法得到C*R*s

用因子来做这件事也很好。 X = (alpha + s)*(beta**2 + s**2)*(C*R*s + 1),并让X(2)(beta**2 + s**2)

谢谢!

【问题讨论】:

  • children 会这样做,但不会保持您编写表达式的顺序。
  • 这就是答案,如果你发布它,我会接受它。

标签: matlab octave symbolic-math


【解决方案1】:

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 ⎦

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 2019-02-21
    • 1970-01-01
    • 2013-12-12
    • 2016-10-06
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多