EDA365电子论坛网

标题: 请教大神,有什么办法可以替换? [打印本页]

作者: MOTOACE    时间: 2020-5-29 19:27
标题: 请教大神,有什么办法可以替换?
本帖最后由 MOTOACE 于 2020-5-29 19:28 编辑
' N+ c. [4 t, `' Y1 X$ R4 ?" Z7 |# K
要实现的功能:将已知表达式的分段函数中的变量进行替换。比如有一个分段函数

% U; P7 ?; b* ]! M- I
6 H3 V; X1 E% X& s* X! n2 m
siny替换x,理想的转换效果:
# X' ~- ]* g: }# t& i0 I6 K
我的程序实现如下所示:
0 f7 O+ n) A0 D; E( G# s- t

' z, t/ c( N  s! ]/ r
+ k2 r  a+ ^! E6 e# M, X
" V1 f+ b$ i7 Z7 k1 C9 k
但是遇到了问题,分段函数 f 会被自动改写成:
4 r0 V5 U; r2 @( E
8 Y; X- @# B1 ^& y: p
各位可以看看f的输出,会变成上面这个样子。

) L, `; P* M- |! \5 `  X( M" Z  y
由于出现了 in Dom::Interval 这些无法被计算的字符,因此eval会报错,导致无法表示成表达式。
9 `9 R- m2 c- D/ L. k& g3 p
/ E/ y+ w! k$ B4 u2 z3 F9 V* [( J
请教大神,有什么办法可以替换?非常感谢!

" _, l5 Y+ J/ Y. r/ x6 F
作者: leleeda    时间: 2020-5-29 19:56

# X2 v8 a  L! a4 k$ ?1、有看函数的帮助吗?0< x <=1  可以这样写??? siny,可以这样写吗???
( y8 ?$ k/ k6 M+ b; I& z: V2、为何开始就用sym的piecewise,不可以直接用字符吗?替换之后再转。2 C: n( F$ }- m! _
3、你的例子替换有意义不?sin(y)在-1,1之间。1 V0 q) f5 g: ?( F$ x
f = 'piecewise(0< x & x<=1, x/6, 1 < x & x<= 2, -3*x^3)';4 j$ B7 h3 {+ G+ J# o! B+ L
f_char=strrep(f,'x','sin(y)');
& x" J& \% Y3 _3 |4 Zf1=str2sym(f_char);3 s4 _% w6 J+ m" Z! v
y=1;subs(f1)
" y, j! N8 d4 Y! K. F6 \9 Ry=-1;subs(f1)2 M, D* w9 u6 [9 ^/ }

6 _$ W( P( h% q1 p: \7 `. L* z4 _$ A" A/ L7 t2 P* y- }* q
ans =sin(1)/6" C0 U: ]6 A8 U! R7 s
ans =NaN# E7 h) r8 N  A7 z# n; l" Y

; [3 R* ?! q; a# K0 W暂时想到能用subs赋值。不知道是否有其他的。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2