EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 MOTOACE 于 2020-5-29 19:28 编辑 : ]/ y: T5 ]7 v" a
. p& `0 q7 o/ q8 M# K0 c
要实现的功能:将已知表达式的分段函数中的变量进行替换。比如有一个分段函数
1 Q) i8 {0 N, @- Y7 w6 y" \' }2 C; @8 S
用siny替换x,理想的转换效果:
) X- i }( M5 z% L# C我的程序实现如下所示: - syms x
- f = piecewise(0< x <=1, x/6, 1 < x <= 2, -3*x^3); %原始分段函数的表达式
- f_char=char(f); %先把表达式变成字符串
- f_char=strrep(f_char,’x’,’siny’); %对字符串里的内容进行我想要的替换
- f=eval(f_char); %再把字符串变回表达式
3 k; s- `& r0 b! @( P 2 Y [7 n* ]- K' y% T
- f$ m! I' v: M5 r4 L& A& D1 ?1 \
0 T& M- k8 P6 [! a3 D. d+ y : M0 l) `- `" F% n- H
但是遇到了问题,分段函数 f 会被自动改写成: - piecewise(x in Dom::Interval(0, [1]), x/6, x in Dom::Interval(1, [2]), -3*x^3)
9 N$ i1 T" M8 s
' i: |: S# T% f( X0 z' n- C$ l& ~* C* L4 x4 A, r
各位可以看看f的输出,会变成上面这个样子。 ' r/ o! i& i. z1 T* Q/ }
由于出现了 in Dom::Interval 这些无法被计算的字符,因此eval会报错,导致无法表示成表达式。 - p+ [! O/ R! o/ i% h: _, D
( }" a G5 \" S5 J: d% V请教大神,有什么办法可以替换?非常感谢!
' G4 [7 P0 } n7 u$ C$ s. V |