当前位置:文档之家› Matlab符号计算(含作业)

Matlab符号计算(含作业)

第 2 章符号计算符号计算:解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一系列恒等式,数学定理,通过推理和演绎,获得解析结果。

符号计算建立在数值完全准确表达和推演严格解析的基础之上,所得结果完全准确。

特点:一.相对于MATLAB的数值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。

二.在相当一些场合,符号计算解算问题的命令和过程,显得比数值计算更自然、更简明。

三.大多数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念和模式。

2.1符号对象和符号表达式MATLAB依靠基本符号对象(包括数字、参数、变量)、运算符及一些预定义函数来构造和衍生符号表达式和符号方程。

2.1.1基本符号对象和运算算符1.生成符号对象的基本规则●任何基本符号对象(数字、参数、变量、表达式、函数)都必须借助专门的符号命令sym、syms、symfun定义。

●任何包含符号对象的表达式或方程,将继承符号对象的属性。

2.精准符号数字和符号常数符号(类)数字的定义:sym(Num) 采用精准数值类数创建精准的符号数字(推荐格式!)sc=sym(Num) 采用精准数值类数创建精准的符号常数sc(推荐格式!)说明:若输入量Num是精准的浮点数(如0.321、10/3等),能生成精准的符号数字;若输入量Num是诸如sin(0.3)的数值表达式,那么就只能生成由数字表达式获得的16位精度的近似符号数字。

sym('Num') 采用有理分数字符串创建精准的符号数字sc=sym('Num') 采用有理分数字符串创建精准的符号常数sc说明: Num必须处于(英文状态下的)单引号内,构成字符串(关于字符串参见附录A);只有当字符串数字'Num'采用诸如321/1000、10/3等整数构成的有理分数形式表达时,sym('Num') 才能生成精准的符号数字;若字符串数字用诸如0.321、3.21e-1等“普通小数或科学记述数”表达,那么只能产生“近似符号数字”。

在默认情况下,该近似符号数字为32位精度。

【例2.1-1】(1)创建完全精准的符号数字或数字表达式clear allR1=sin(sym(0.3)) % 输入量为普通小数R2=sin(sym(3e-1)) % 输入量为科学记述数R3=sin(sym(3/10)) % 输入量为有理分数R4=sin(sym('3/10')) % 输入量为“整数构成的有理分数”字符串数字disp(['R1属于什么类别?答:',class(R1)])disp(['R1与R4是否相等?(是为1,否为0)答:',int2str(logical(R1==R4))]) R1 =sin(3/10)R2 =sin(3/10)R3 =sin(3/10)R4 =sin(3/10)R1属于什么类别?答:symR1与R4是否相等?(是为1,否为0)答:1(2)产生具有32位精度的“近似”符号数字(杜绝使用!)S1=sin(sym('0.3')) % sym的输入量是字符串小数,生成32位精度下的% 近似符号数,进而在sin作用下给出近似符号数。

S2=sin(sym('3e-1')) % syms的输入量是字符串科学记述数。

eRS=vpa(abs(R1-S1),64);disp(['S1属于什么类别?答:',class(S1)])disp(['S1与R1是否相同?答: ',int2str(logical(R1==S1))])disp('S1与R1的误差为')disp(double(eRS))S1 =0.29552020666133957510532074568503S2 =0.29552020666133957510532074568503S1属于什么类别?答:symS1与R1是否相同?答: 0S1与R1的误差为6.3494e-41(3)产生具有16位精度的“近似”符号数字(杜绝使用!)F1=sym(sin(3/10)) % sym的输入量为双精度表达式sin(3/10),% 就只能创建出仅16位精度的近似符号数。

F2=sym(sin(0.3)) % 同上eFS=vpa(abs(F1-S1),32);disp(['F1属于什么类别?答:',class(F1)])disp(['S1与F1是否相同?答: ',int2str(logical(F1==S1))])disp('F1与S1的误差为')disp(double(eFS))F1 =5323618770401843/18014398509481984F2 =5323618770401843/18014398509481984F1属于什么类别?答:symS1与F1是否相同?答: 0F1与S1的误差为2.8922e-173.基本符号变量经典教科书里,表达式e-ax sinbx中的a,b称为参数,x为变量。

在MATLAB的符号计算中,a、b、x统称为基本符号变量,其中,x总被默认为“待解(自由)符号变量”,其他被作为“符号参数”处理。

定义基本符号变量的命令格式:para=sym(' para') 定义单个复数域符号变量parapara=sym(' para', 'Flag') 定义单个Flag指定域符号变量parasyms para 定义单个复数域符号变量para的另一种方式syms para Flag 定义单个Flag指定域符号变量para的另一种方式syms para1 para2 paraN 定义多个复数域符号变量para1 para2 paraN syms para1 para2 paraN Flag 定义多个Flag指定域符号变量para1 para2 paraN●符号参数名不要用处于“字母表中小写字母x及其两侧的英文字母”开头。

●Flag表示数域的限定性假设,可具体取以下词条:positive 正实数域;real 实数域。

●默认值是复数域符号变量●sym命令只能对单变量作用,syms不能用于对数值、常数相关的定义。

4.符号计算中的各种算符●与数值计算中的算符在形状、名称和使用方法上相同。

2.1.2符号计算中的函数命令2.1.3符号表达式和符号函数1. 符号表达式和符号函数(1)为表达某种数学算式、实现某种计算目的,采用基本符号对象(数字、常数、变量)、运算符、MATLAB函数命令等基本要素编写而成的M码。

(2)为表达变量间抽象(或具体)约束关系而编写的M码。

在符号函数中,构成函数关系的变量名必须明确指定。

即,在定义符号函数时,不仅要指定函数名,而且要指定变量名。

比如syms f(x,y)就定义了一个以x、y为变量的抽象符号函数f。

2 自由符号变量解题通常是围绕自由符号变量进行。

确定自由符号变量的规则:●在专门指定变量名的符号运算中,解题一定围绕指定变量名进行。

●x是首选自由符号变量,其后的次序规则是:与x的ASCII码值之差的绝对值小的字母优先;差绝对值相同时,ASCII码值大的字母优先。

●自动识别符号变量时,字母的优先次序为x,y,w,z,v等,大写后排。

自动识别表达式中自由、独立的符号变量的命令:symvar(expression) 列出表达式中的所有基本符号变量symvar(expression, n) 列出表达式中n个认定的自由变量【例2.1-2】1)各种符号对象的创建clearsyms a b c x y u v % 定义基本符号对象 syms F(X,Y,Z) % 定义“抽象”符号函数 k=sym(3) % 定义符号常数 G=sym('p*sqrt(q)+r*sin(t)') % 创建符号表达式EXPR=a*G*u+(b*x^2+k)*v % 创建“衍生”符号表达式 f(x,y)=a*x^2+b*y^2-c % 创建“具体”符号函数 disp(F) % 显示抽象符号函数 k = 3 G =p*q^(1/2) + r*sin(t) EXPR =v*(b*x^2 + 3) + a*u*(p*q^(1/2) + r*sin(t)) f(x, y) =a*x^2 + b*y^2 - c F(X, Y, Z)symbolic function inputs: X, Y, Z2)symvar 对EXPR 符号表达式的作用symvar(EXPR) % % ans =[ a, b, p, q, r, t, u, v, x]symvar(EXPR,20) % ans =[ x, v, u, t, r, q, p, b, a]symvar(EXPR,1) % ans = x3)symvar 对符号函数的作用disp(symvar(f)) % [ a, b, c, x, y]disp(symvar(f,2)) % [ x, y]【例2.1-3】用符号法求方程2uw zw v +=的解。

1)产生符号表达式和符号函数clearsyms u v w z %Eq=u*w^2+z*w-v % 表达式 g(z)=u*w^2+z*w ==v % 函数Eq =u*w^2 + z*w - v g(z) =u*w^2 + z*w == v2)symvar 认定的自由变量symvar(Eq,1) %<5>ans =wsymvar(g(z),1) % <6>ans =w3)solve对默认自由变量解方程R1=solve(Eq) % 关于w解方程u*w^2+z*w-v=0 <7>R2=solve(g) % 关于w解g(z)所表达的方程 <8>R1 =-(z + (z^2 + 4*u*v)^(1/2))/(2*u)-(z - (z^2 + 4*u*v)^(1/2))/(2*u)R2 =-(z + (z^2 + 4*u*v)^(1/2))/(2*u)-(z - (z^2 + 4*u*v)^(1/2))/(2*u)4)对变量z求解S1=solve(Eq,z) % <9> S2=solve(g(z),z) % <10> S1 =(- u*w^2 + v)/wS2 =(- u*w^2 + v)/w5)检验求解结果的正确性disp(simplify(subs(Eq,z,S1))) % S1代替z,观察Eq是否为0disp(simplify(g(S2))) % S2代替z,观察g(S2)方程式是否成立TRUE〖说明〗不要把g(z)理解为以z为自由变量的符号函数。

相关主题