在Matlab中,我有一个符号变量f,我想用0替换所有小于10 ^ -5的数字。
例如
f=sym('0.89445*x^3 + 1e-8*x^2 + 4*x + 1.8e-13');
应该变成:
0.89445*x^3 + 4*x
怎么做?
答案 0 :(得分:1)
你可以在调用sym函数之前声明常量:
clear
clc
a = 0.89555;
b = 1e-8;
c = 4;
d = 1.8e-13;
if a < 1e-5
a = 0;
end
if b < 1e-5
b = 0;
end
if c < 1e-5
c = 0;
end
if d < 1e-5
d = 0;
end
symVar = strcat(num2str(a), '*', 'x^3', '+', num2str(b), '*', 'x^2', '+', num2str(c), '*', 'x', '+', num2str(d));
f = sym(symVar);
可能有一种比使用4 if
更好的方法来检查和声明常量等于零。
我刚刚找到了一种方法:用匿名函数替换4 if
:
clear
clc
a = 0.89555;
b = 1e-8;
c = 4;
d = 1.8e-13;
h = @(x) x>=1e-5; 0;
symVar = strcat(num2str(a*h(a)), '*', 'x^3', '+', num2str(b*h(b)), '*', 'x^2', '+', num2str(c*h(c)), '*', 'x', '+', num2str(d*h(d)));
f = sym(symVar);
让我知道这是否适合您。
答案 1 :(得分:1)