1

在 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

怎么做到呢?

4

2 回答 2

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);

可能有比使用 4if检查和声明常量为零更好的方法。

我刚刚找到了一种方法:用if匿名函数替换 4 :

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);

让我知道这是否适合您。

于 2013-05-31T12:06:16.693 回答
1

您需要使用sym2poly来获取多项式系数并使用poly2sym恢复为 sym 形式

dummy = sym2poly(f);
new_f = poly2sym(((abs(dummy)>1e-5)) .* dummy,'x');
于 2013-05-31T16:30:10.373 回答