赞
踩
点击上方蓝字关注 无距书乡 获取即时更新
今天介绍一个新内容——符号变量及其函数,再展示一下符号函数的应用,多项式操作和Taylor级数展开。
符号变量
在介绍matlab一文中,我们写道在matlab中使用变量时不需要预先定义,但是在特殊情况下我们是需要先定义变量然后才能使用的,这种情况就是符号变量。在matlab中用 syms 声明一个符号变量。声明了符号变量后就可以构造一个函数了,然后可以在基础上应用,例如简单的函数求值。示例如下:
在matlab 中使用subs命令获取函数在某点的值,subs 是substitute 的简写,意为将x的值代入函数中。
符号函数
有了符号变量之后,我们就可以对符号函数表达式做各种操作了。例如因式分解和因式展开等。在matlab中使用factor做因式分解,使用expand做因式展开。示例如下:
对于多项式做完因式分解后,可以很容易看出来它的根。如果你还记得,上述表达式就是上一篇中我们使用过的求根的方程的等号左边项。
对于一个连乘的表达式,matlab也是可以做多项式展开的,还是以上面的表达式为例,示例如下:
可以看到fx 做因式分解后再做展开后得到的表达式与fx是相同的。
再看看三角函数的情形。
在符号函数的情形下,也可以做多项式简化和合并同类项。在matlab中使用simplify 来做多项式简化;使用collect 来做同类项合并。简述述如下:
多项式简化:
多项式合并:
符号函数方程求解
首先我们通过符号变量来构建一个一元二次方程的符号函数,再用上一篇我们说到的solve命令来求解这个方程,可以预见答案应该是一元二次方程的求根公式。示例如下:
对于一元三次方程也是可以的,但是解的表达形式比较复杂,这里贴一下。
解的完整形式如下:
(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) - b/(3*a) - (- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) (- b^2/(9*a^2) + c/(3*a))/(2*(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)) + (3^(1/2)*((- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) + (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3))*i)/2 - b/(3*a) - (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)/2 (- b^2/(9*a^2) + c/(3*a))/(2*(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)) - (3^(1/2)*((- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) + (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3))*i)/2 - b/(3*a) - (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)/2
这就是一元三次方程的求根公式,仔细观察会发现上篇中我们解一元三次方程时给出的结果就是用的这个公式。
泰勒级数
这是本篇比较重要的部分,也是读者朋友们平时接触到的比较多的一个知识点。这个公式的重要性想必学习过的读者们是十分有感受的,必考知识点,毕竟没有什么函数是不能用Taylor级数来解决的。在后面的科学计算中也会大量使用Taylor展开做近似计算。既然Taylor级数这么重要,那我们就来看看在matlab 中怎样做Taylor级数展开。在matlab中用taylor()命令做Taylor级数展开。
首先,我们来查看一下Taylor级数的帮助说明。
根据说明文件,我们可看到taylor方法有3种基本调用形式:
taylor(f),默认做五阶展开,在x=0处展开,就是常用的麦克劳林级数;
taylor(f,x),默认做五阶展开,在x=0处展开,x可以是一个向量,也就是多元函数的情形;
taylor(f,x,a),默认做五阶展开,在x=a处展开,x可以是一个向量,a也可以是一个向量,也是多元函数的情形。
下面来看看常见函数的Taylor级数吧。
sin(x):
例如,上图中我们对sin(x)做Taylor展开,默认展开到5阶。我们可以通过关键字‘Order’来说明展开到几阶。
cos(x):
exp(x):
ln(x):
sqrt(1+x):
最后,总结如下,今天我们学习了:
符号变量的使用方法;
符号函数的因式分解和展开,多项式的简化和合并同类项;
符号函数方程求解;
Taylor级数的方法。
这么简单实用的工具,不来用一下吗!
长按识别二维码关注我
点个赞,携手共进
回复“ishare”加入社区
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。