第三章:matlab的符号运算

上传人:F****n 文档编号:107568126 上传时间:2019-10-20 格式:PPTX 页数:68 大小:1.39MB
返回 下载 相关 举报
第三章:matlab的符号运算_第1页
第1页 / 共68页
第三章:matlab的符号运算_第2页
第2页 / 共68页
第三章:matlab的符号运算_第3页
第3页 / 共68页
第三章:matlab的符号运算_第4页
第4页 / 共68页
第三章:matlab的符号运算_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《第三章:matlab的符号运算》由会员分享,可在线阅读,更多相关《第三章:matlab的符号运算(68页珍藏版)》请在金锄头文库上搜索。

1、符号运算,符号对象和符号表达式,符号运算:利用推理规则进行的运算。 特点:精确、表达简洁 缺点:计算是逻辑推理,计算量大,且大量的问题无法利用符号运算得到结果。,数值计算:利用计算机中的加法器和乘法器进行的计算。计算是近似计算,计算结果是一组数据而不是公式。 特点:计算速度快,可以胜任绝大多数科学计算。 缺点:不能进行含参数的计算和精确推理。,在MATLAB的算术表达式中,如果有符号对象出现,则执行符号运算,否则执行数值运算。,符号对象的生成:,1、利用sym函数,可生成符号常数、符号变量和符号表达式。,例: a=sym(1/3); b=sym(x); c=sym(2*x3-3*x);,2、利

2、用syms 语句,语句格式: syms a b c %变量之间用空格分割,不能用逗号,数值计算和符号运算的比较,例3: x=sym(1/3) x = 1/3 y=x+1/2 y = 5/6,计算结果来自一个精确的推导过程。如果利用如下数值计算(算术表达式中不含有符号变量),则得到一个近似的计算结果 x=sym(1/3);y=x+1/2 y = 5/6 y=1/2+1/3 y = 0.8333,例4:分别利用符号运算和数值运算计算下面的和式 并比较其计算速度。,s=sym(0); tic for k=1:1000 s=s+1/k; end toc s,符号运算程序,注:Matlab语言中利用ti

3、c 和toc 计算时间,语言格式为 tic 程序块 toc 显示器显示tic和toc之间的程序块运行时间,运行结果: elapsed time is 17.471170 seconds. s = 5336291328229478504559104562404298040965247228038426009710134924845626888949710175750609790198503569140908873155046809837844217211788500946430234432656602250210027842563285208140554494121044251014267277

4、0294774712708917963967779610453224692426866468888281582071984897105110796873249319155529397017508931564519976085734473014183284011724412280649074307703736683170055800293659235088589360235285852808160759574737836655413175508131522517/7128865274665093053166384155714272920668358861885893040452001991154

5、324087581111499476444151913871586911717817019575256512980264067621009251465871004305131072686268143200196609974862745937188343705015434452523739745298963145674982128236956232823794011068809262317708861979540791247754558049326475737829923352751796735248042463638051137034331214781746850878453485678021

6、888075373249921995672056932029099390891687487672697950931603520000,这个例子也说明,在实际计算中,并不一定精度越高越好。,s=0; tic for k=1:1000 s=s+1/k; end toc s,运行结果: Elapsed time is 0.000015 seconds. s = 7.4855,数值运算程序,注:在符号运算中的数据不要用带小数点的实数和科学计数法表示的数。这些数在计算机上是以有限位小数存储的,在推理过程中不能精确表示。, s=sym(sin(3/10) s = sin(3/10) s1=sym(sin(

7、0.3) s1 = 0.29552020666133957510532074568503,例:,符号变量和符号常数,在符号运算中,常量(参数)和变量都是由符号表示的。如积分 在积分过程中,x是变量,a,b,y是参数。如果再对y求导数,则y是变量,a,b是参数,在MATLAB中,在运算中变化的符号变量称为自由变量。,自由变量可以在运算过程中指明。如果不指明,则计算机默认距离x最近的参数为自由变量。,例:符号方程组的求解,符号运算和数值运算的语句描述基本相同。当表达式中有符号变量时执行符号运算,否则执行数值运算。,例:解线性方程组,syms a b c A=a 2 1 2 b 3 1 3 c; u

8、=1;2;1; x=Au,参考程序,x = (b + 4*c - b*c - 3)/(9*a + b + 4*c - a*b*c - 12) (3*a + 2*c - 2*a*c - 3)/(9*a + b + 4*c - a*b*c - 12) -(a - 1)*(b - 6)/(9*a + b + 4*c - a*b*c - 12),运行结果,符号运算可以进行含参数运算,对非线性方程(组),可以采用solve函数求解,函数调用格式: y=solve(Eqs, vars) 其中,Eqs是方程的集合,vars是所解变量的集合。, syms a b c x f=a*x2+b*x+c f = a*

9、x2 + b*x + c y=solve(f) y = -(b + (b2 - 4*a*c)(1/2)/(2*a) -(b - (b2 - 4*a*c)(1/2)/(2*a) y=solve(f,a) y = -(c + b*x)/x2,例:求解方程,符号表达式,符号表达式有两种不同的生成方式: 1、直接由sym函数生成 如: f=sym(2*sin(x)+5*cos(x) 这样的表达式称为串型表达式。 2、利用符号变量经符号运算生成 如: syms x y f=sin(x)+2*cos(y),由于后一种生成方式应用更广,我们推荐使用。,符号对象的限定 在我们求解数学问题时,常常需要限定变量的

10、范围,如求解一个方程组时,要求在实数域上求解或者求整数解等。,在符号运算中,如果不限定变量的取值,系统默认在复数域上求解。,当需要限定变量的取值范围时,可以利用函数 assume(expr) %expr 是关系表达式 assume(expr,set) %set是数集如real,integer,rational assumeAlso(expr) assumeAlso(expr,set),还可以直接利用符号变量定义函数sym和命令syms直接在定义中限定 x=sym(x,set) syms y set,符号对象的限定的撤销,如果要撤销对符号对象的限定,可以使用以下的命令或函数: syms x cl

11、ear %撤销MuPAD内存中对变量x的限定,恢复复数变量 sym(x,clear),注1:即使利用clear语句删除x,并不能改变MuPAD内存中对x的限制设定,再引入变量x是,仍然带有这一设定。,注2:sym x clear 只改变x的限定,并没有删除和改变x的值。,例:求 的解, clear syms x solve(3*x2+5*x+1) ans = - 13(1/2)/6 - 5/6 13(1/2)/6 - 5/6, assume(x=-5/6) solve(3*x2+5*x+1) ans = 13(1/2)/6 - 5/6,例:求方程 的根,求复数根,ans = -1/2 1/4

12、- (79(1/2)*i)/4 (79(1/2)*i)/4 + 1/4,syms x f=x3+475*x/100+5/2; solve(f),求实数根, syms x real solve(x3+475*x/100+5/2) ans = -1/2,求第一象限的根, syms x clear assume(real(x)=0) assumeAlso(imag(x)=0) solve(x3+475*x/100+5/2) ans = (79(1/2)*i)/4 + 1/4,符号数字和表达式的操作,符号数字转换为双精度数字 N=double(sym_num),符号数字的任意精度表达形式,在科学计算中

13、,由于符号计算的结果表达经常过于繁琐,经常需要作近似表达来简化公式。Matlab中可以把精确的符号运算结果转换为“任意精度的符号数”。转换命令为 digits(n) xs=vpa(x,n),在科学计算中,由于符号计算的结果表达经常过于繁琐,经常需要作近似表达来简化公式。Matlab中可以把精确的符号运算结果转换为“任意精度的符号数”。转换命令为 digits(n) xs=vpa(x,n),注1:如果digits,机器默认为32位。,注2:命令vpa受它之前的命令digits控制。,注3:x可以是符号变量、字符串和双精度数值变量。,例:计算,reset(symengine) a=sym(2);

14、sa=sqrt(a)+1/3,sa = 2(1/2) + 1/3,format long sa=sym(sqrt(2)+1/3) a1=sqrt(2)+1/3; sa_1=vpa(sa+a1,20),sa = 2(1/2) + 1/3 sa_1 = 3.4950937914128567869,例:计算, aa=sym(acos(-1) aa = pi vpa(aa,200) ans = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821

15、48086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930382,例:计算的位数, digits(50) vpa(aa) ans = 3.1415926535897932384626433832795028841971693993751 vpa(aa,7) ans = 3.141593 vpa(aa) ans = 3.1415926535897932384626433832795028841971693993751,符号表达式: 符号表达式和数值表达式形式相同,只是表达

16、式中含有符号变量或符号常数。,符号表达式的操作函数: g=collect(f) %合并同类项 g1=collect(f,var) h=expand(f) %多项式展开 h1=expand(f,name,value) y=simplify(f) %公式化简 y=simplify(f,name,value) yy=factor(f) %因子分解或因式分解, syms x expand(x+1)6) ans = x6 + 6*x5 + 15*x4 + 20*x3 + 15*x2 + 6*x + 1, expand(sin(6*x) ans = 6*cos(x)*sin(x) - 32*cos(x)3*sin(x) + 32*cos(x)5*sin(x),expand 的用

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号