第二章 Matlab软件的数值计算方法2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.3 符号表达式中自由变量的确定 findsym可实现对表达式中所有自由符号变量或指定数 可实现对表达Baidu Nhomakorabea中所有自由符号变量或指定数 目的独立自变量的自动认定。 目的独立自变量的自动认定。 findsym(expr) findsym(expr,n) 【例7】对独立自由符号变量的自动辨认。 】对独立自由符号变量的自动辨认。 syms a b x X Y; k=sym('3'); z=sym('c*sqrt(delta)+y*sin(theta)'); EXPR=a*z*X+(b*x^2+k)*Y; findsym(EXPR)
2.2 置换操作 一、子表达式置换操作 [RS,ssub]=subexpr(S,ssub) 【例10】把复杂表达式中所含的多个相同子表达式用一个符 】 号代替,使表达简洁。 号代替,使表达简洁。 clear all syms a b c d W [V,D]=eig([a b;c d]); [RVD,W]=subexpr([V;D],W) RVD = [ -(1/2*d-1/2*a-1/2*W)/c, -(1/2*d-1/2*a+1/2*W)/c] [ 1, 1] [ 1/2*d+1/2*a+1/2*W, 0] [ 0, 1/2*d+1/2*a-1/2*W] W= (d^2-2*a*d+a^2+4*b*c)^(1/2)
ans = X, Y, a, b, c, delta, theta, x, y findsym(EXPR,1) ans = x findsym(EXPR,2),findsym(EXPR,3) ans = x,y ans = x,y,theta
确定自由变量是对整个矩阵进行的。 【例8】findsym确定自由变量是对整个矩阵进行的。 】 确定自由变量是对整个矩阵进行的 syms a b t u v x y;A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v] findsym(A,1) A= [ a+b*x, sin(t)+u] [ x*exp(-t), log(y)+v] ans = x
1.2 符号计算中的算符和基本函数 由于matlab中采用了重载技术,使得用来构成符号计算 中采用了重载技术, 由于 中采用了重载技术 表达式的算符和基本函数,无论在形状、名称上, 表达式的算符和基本函数,无论在形状、名称上,还是在使 用方法上,都与数值计算中的算符和基本函数几乎完全相同。 用方法上,都与数值计算中的算符和基本函数几乎完全相同。 1)基本运算符 ) +-*\/ 矩阵 .* ./ .\ 元素对元素 ‘ .’ 矩阵 2)关系运算符 ) 符号对象中没有大于、大于等于、小于、 符号对象中没有大于、大于等于、小于、小于等于的概 而只有是否等于的概念。 念,而只有是否等于的概念。 算符==、~=分别对算符两边的对象进行相等、 ==、~=分别对算符两边的对象进行相等 算符==、~=分别对算符两边的对象进行相等、不等 的比较。当事实为真时,比较结果用1表示 假用0表示 表示, 表示。 的比较。当事实为真时,比较结果用 表示,假用 表示。
【例2】把字符表达式转换为符号变量 】 y=sym('2*sin(x)*cos(x)') y=simple(y) y= 2*sin(x)*cos(x) y= sin(2*x) 说明:符号运算中, 说明:符号运算中,如事先没对表达式中的独立符号变量进 行定义,软件会自动检查哪些字符是软件的符号函数, 行定义,软件会自动检查哪些字符是软件的符号函数,哪些 是变量符号,且总把在英文字母表中离x最近的字母认为独 是变量符号,且总把在英文字母表中离 最近的字母认为独 立符号变量。 立符号变量。
二、函数求极值
1.fmin的命令格式 的命令格式 X=fmin(‘Fun’,x1,x2) 举例35 举例 2.fmins的命令格式 的命令格式 X=fmins(‘Fun’,x0) 举例36 举例
三、函数求零点 命令格式: 命令格式: X=fzero(‘Fun’,x0) 举例37 举例 举例39 举例
表2-6 数值分析的部分 - 数值分析的部分MATLAB命令函数 命令函数
数值分析的M|ATLAB命令函数 命令函数 数值分析的 命令函数的格式 fplot(‘fname’,[lb ub]) fmin(‘fname’,[lb ub]) fmins(‘fname’,xo) fminbnd fminsearch fzero(‘fname’,xo) frapz(x,y) diff(x) [t,y]=ode45(‘fname’,to,tf,yo) 描述 绘出上下限之间的函数 寻找上下限内的标量最小值 寻找xo附近的向量最小值 寻找 附近的向量最小值 由一有范围限制的变量找出函数的最小值 由几个变量找出函数的最小值 寻找xo附近的标量函数的零点 解 寻找 附近的标量函数的零点(解) 附近的标量函数的零点 给定数据点x和 计算 计算y=f(x)下的梯形面积 给定数据点 和y,计算 下的梯形面积 积分 数组元素间的差分
二、通用置换指令 RES=subs(ES,old,new) RES=subs(ES,new) 的置换规则。 【例11】用简单算例演示 】用简单算例演示subs的置换规则。 的置换规则 syms a x;f=a*sin(x)+5; f1=subs(f,'sin(x)',sym('y')) f1 = a*y+5 f2=subs(f,{a,x},{2,sym(pi/3)}) f2 = 3^(1/2)+5 f3=subs(f,{a,x},{2,pi/3}) f3 = 6.7321
a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)] a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)]) a3=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]') a23=a2-a3 a1 = 0.3333 0.4488 2.2361 5.3777 a2 = [ 1/3, pi/7, sqrt(5), 6054707603575008*2^(-50)] a3 = [ 1/3, pi/7, sqrt(5), pi+sqrt(5)] a23 = [ 0, 0, 0, 189209612611719/35184372088832-pi5^(1/2)]
!2 符号对象的操作和转换 2.1 符号表达式的操作 collect expand factor horner numden simplify pretty 最常用的式simple(expr) 最常用的式
【例9】简化 】
f =
3
1 6 12 + 2 + +8 3 x x x
syms x f=(1/x^3+6/x^2+12/x+8)^(1/3); g1=simple(f) g2=simple(g1) g1 = (2*x+1)/x g2 = 2+1/x
【例3】用符号计算验证三角等式。 】用符号计算验证三角等式。 syms fai1 fai2 y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2)) y= sin(fai1-fai2)
【例4】求矩阵的行列式值、逆和特征根 】求矩阵的行列式值、 syms a11 a12 a21 a22 A=[a11,a12;a21,a22] DA=det(A),IA=inv(A),EA=eig(A) A= [ a11, a12] [ a21, a22] DA = a11*a22-a12*a21 IA = [ a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21)] [ -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21)] EA = [ 1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)] [ 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]
3)三角函数、双曲函数及它们的反函数 )三角函数、 只用于数值计算外, 除atan2只用于数值计算外,其余的三角函数(如sin)、 只用于数值计算外 其余的三角函数( )、 双曲函数( 双曲函数(如cosh)以及它们的反函数(如asin, acosh) )以及它们的反函数( ) 在数值计算和符号计算中使用方法都相同。 在数值计算和符号计算中使用方法都相同。 4)指数、对数函数 )指数、 数值、符号计算中,函数sqrt, exp, expm的使用方法 数值、符号计算中,函数 的使用方法 完全相同,至于对数函数,符号计算中只有自然对数log, 完全相同,至于对数函数,符号计算中只有自然对数log, 而没有数值计算中的log2, log10。 而没有数值计算中的 。 5) 复数函数 ) conj, real, imag, abs相同,但无求相角的指令。 相同, 相同 但无求相角的指令。 6) 矩阵代数指令 ) diag, triu, tril, inv, det, rank, rref, null, colspace, poly, expm, eig基本与数值计算相同,只有 基本与数值计算相同, 稍微不同。 基本与数值计算相同 只有svd稍微不同。 稍微不同
[t,y]=ode23(‘fname’,to,tf,yo) 用2阶/3阶龙格 库塔算法解微分方程组 阶龙格-库塔算法解微分方程组 阶 阶龙格
补充: 补充:符号计算
!1、符号对象和符号表达式 、 在MATLAB中,数值和数值变量用于数值的存储和各种 中 数值计算。而符号常数、符号变量、符号函数、 数值计算。而符号常数、符号变量、符号函数、符号操作等 则是用来形成符号表达式,严格按照代数、 则是用来形成符号表达式,严格按照代数、微积分等课程中 的规则公式进行运算,并尽可能给出解析表达结果。 的规则公式进行运算,并尽可能给出解析表达结果。 1.1 符号对象的生成和使用 数值计算中,数值表达式所用的变量必须事先被赋过值, 数值计算中,数值表达式所用的变量必须事先被赋过值, 否则无法计算。 否则无法计算。Symbolic Math Toolbox 2.1版沿用这种模 版沿用这种模 规定:在进行符号运算时, 式,规定:在进行符号运算时, 首先要定义基本的符号对象(可以是常数、变量、 首先要定义基本的符号对象(可以是常数、变量、表达 ),然后利用这些基本符号对象去构成新的表达式 然后利用这些基本符号对象去构成新的表达式, 式),然后利用这些基本符号对象去构成新的表达式,进而 从事所需的符号运算。 从事所需的符号运算。
6.0000
8.4641
7.5000
2.3 符号数值精度控制和任意精度计算 数值计算受字长的限制,每次数值操作都带截断误差, 数值计算受字长的限制,每次数值操作都带截断误差, 任何数值计算不管什么算法都将产生积累误差。 任何数值计算不管什么算法都将产生积累误差。Matlab中每 中每 个算术操作结果的相对精度约为16位数字 位数字。 个算术操作结果的相对精度约为 位数字。但符号计算的结 果是绝对准确的,不包含任何计算误差。 果是绝对准确的,不包含任何计算误差。 double(x) digits(n) xs=vpa(x) xs=vpa(x,n)
运算中, 运算中,凡是由包含符号对象的表达式所生成的衍生对 象也都是符号对象。 象也都是符号对象。 定义基本符号对象的指令有两个: 定义基本符号对象的指令有两个:sym, syms。 。 f = sym( arg ) f = sym( argn,flagn) argv =sym(‘argv’,flagv) syms(‘argv1’,’argv2’,’argvk’) syms argv1 argv2 argvk 【例1】符号常数形成中的差异 】
f4=subs(subs(f,a,2),x,0:pi/6:pi) f4 = 5.0000 6.0000 6.7321 7.0000 5.0000 f5=subs(f,{a,x},{0:6,0:pi/6:pi}) f5 = 5.0000 5.5000 6.7321 8.0000 5.0000
6.7321
相关文档
最新文档