Symbolic Toolbox 表达式化简与数值转换
2014-06-10 16:39
162 查看
符号表达式向数值变量转换
之前有提及: 符号变量表示的值都是精确的, 而数值变量表示的值可能是不精确的, 所以我们在符号表达式转换为数值变量时要考虑到转换精度的问题.一个简单的例子就是: f=sym('1/3'); 将f定义为1/3, 如果要转换为数值, 那么我们应该转为: 0.3 还是 0.33呢? 计算机存储总是有限制的, 我们只能存储到有限个'3'.
digits(n); vpa(f); digits作用是指定精确到多少位有效数字, 默认是32位; vpa将符号表达式f的结果精确到digits所设定的有效数字的位数. 值得注意的是, vpa返回的止还是符号表达式.
double(f); 这才是将符号表达式转换为浮点数数值变量类型, 一般我们将这三个函数作为组合拳, 先digits设定精确程度, 再vpa作近似运算, 最后才是double转换为数值变量.
化简符号表达式
计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简.collect(f): 函数用途是合并多项式中相同的项, 如:
syms x t f=(1+x)*t+x*t; collect(f)
expand(f):展开多项式,
syms x f=x*(x*(x-1)+3)+2; expand(f);
horner(f) 对转换多项式为Horner形式, 这种形式的特点是乘法嵌套, 其有着不错的数值计算性质.
syms x; f=x^3+2*x^2+5*x-2 horner(f)
factor(f): 多项式的因式分解. 如果无法在有理数的范围内作分解, 那么返回的结果还是输入值.
syms x; f=x^3-6*x^2+11*x-6; factor(f)
simplify(f): 通过数学运算化简符号表达式
syms x; f=cos(x)^2+sin(x)^2 simplify(f)
simple(f): 威力比较强大, 它会尝试各种办法来化简符号表达式, 其化简的标准是使得符号表达式的长度最短.
syms x f=sin(x)^2+cos(x)^2; simple(f)
subexpr(f): 通过计算机自动寻找, 将表达式中多次出现的因式用简短的符号表示, 返回的结果中包含替换之后的表达式, 以及被替换的因式.
syms x a; f=solve(x^2+a*x-1); r=subexpr(f);
pretty(f): 用"我们人能看到懂"的表示方法表示出符号表达式. 不过做好心理准备, 可能这样显示出来的表达式更发指!
syms a x; f=solve(x^2+a*x-1); pretty(f);
From:http://macro2.org/notes/matlab/symbolic/symbolic-simplification.htm
相关文章推荐
- Symbolic Toolbox 表达式化简与数值转换(ZZ)
- labview中位正则表达式使用和字符串二进制数值互相转换
- reverse_bits(二进制的数值转换)
- 十六进制和十进制的数值转换
- 字符串IP地址转换成IP数值函数
- 将一个十六进制字符串转换为十进制数值的问题
- 将表达式转换为逆波兰表达式-LintCode
- 前缀---中缀--后缀 表达式的相互转换
- 洛谷P1175 表达式的转换
- 作业03: 数值的输出转换
- [转贴]字符串转换数值 ,数值转换字符串
- 表达式与二叉树之间的转换
- 如何:在十六进制字符串与数值类型之间转换
- 算术表达式的转换——算术表达树
- python类型转换、数值操作(收藏)
- SQL中时间数值int类型转换为时间类型
- AS3.0 String转换成数值时的判断
- C# 数值转换相关
- Linq to Entity经验:表达式转换
- Trafodion 数值转换为时间戳格式