第5章 MATLAB符号运算总结
2第五讲MATLAB符号运算

(二)符号表达式运算
1.符号表达式的四则运算
符号表达式的加、减、乘、除运算可直接由算 符’+’,’-’*’,’/’,’\’ 来实现,幂运算可以由’^n’来实现。
算符’.*’,’./’,’.\’,’.^’,分别实现元素对元素的数组的乘、 左除、右除、和幂的运算。
MATLAB中没有ln运算符遇到它用log运算符代替。 另外log2(x),log10(y)表示求x和y的以2为底和以10为 底的对数。
实例演示
• 作符号计算(解方程组,其中a,b为常数,
x,y为变量):
• a,b,x,y均为符号运算量。在符号运算前,
应先将a,b,x,y定义为符号运算量。
实例演示
a=sym('a'); %定义‘a’为符号运算量,输出 变量名为a
b=sym('b');x=sym('x');y=sym('y');
(四)符号替换
• MATLAB软件提供的符号替换命令为subs,通常使 用下面三种形式(对数组也适用): • (1) subs(s,new) 用new替换s中的自由变量; • (2) subs(s,old,new) 用new替换s中的变量old; • (3) subs(s) 用当前内存中的已赋值变量去代 替s中的同名变量; • 例:执行命令 • subs(a+b,a,4) • 执行结果为 • 4+b
学习内容 • 一、符号对象
• 二、符号运算与高等数学 • 三、符号方程的求解
符号运算与高等数学
一、极限的计算
二、导数的运算
三、积分的运算
四、级数求和问题
五、函数的极值和零点
一、极限的计算
• 求极限问题解析解的MATLAB命令格式: • Limit(f)
5 MATLAB 符号计算 (2)new

• d2z_dxdy=diff(diff(x^6-3*y^4+2*x^2*y^2,x),y)
• %给出关于x y的偏导数 • 可得到: • d2z_dxdy = • 8*x*y
• d2z_dydx=diff(diff(x^6-3*y^4+2*x^2*y^2,y),x)
• %给出关于y x的偏导数 • 可得到: • d2z_dydx = • 8*x*y
5 符号计算 (2)
• • • • •
5.4 符号微积分 5.4.1 符号极限 求函数极限的函数是limit,调用格式如下: limit(f,x,a) 求符号函数f(x)的极限值。即计算当自变量x趋 近于常数a时,f(x)函数的极限值。 • limit(f,a) • 求符号函数f(x)的极限值。由于没有指定符号 函数f(x)的自变量,则使用该格式时,符号函 数f(x)的变量为函数findsym(f)确定的默认自 变量,即变量x趋近于a。
• 执行结果为:
• The integral of f is • [ 2 • [1/2 a x • [ • [ log(x)
3] 1/3 b x ] ] -cos(x) ]
• 例5-49 求积分
• syms x y z; • F2=int(int(int(x^2+y^2+z^2,z ,sqrt(x*y),x^2*y),y,sqrt(x), x^2),x,1,2) • VF2=vpa(F2)
• • • • •
• • • •
输入语句: dz_dx=-a(1)/a(3) 求得: dz_dx = (-cos(x*y)*y-(1+tan(z*x)^2)*z)/(sin(y*z)*y+(1+tan(z*x)^2)*x) dz_dy=-a(2)/a(3) 求得: dz_dy = (-cos(x*y)*x+sin(y*z)*z)/(sin(y*z)*y+(1+tan(z*x)^2)*x)
第五章 MATLAB符号运算

对正整数的质因数分解,结果用向量表示。 对正整数的质因数分解,结果用向量表示。
factor(1025) 答案: 答案:5 5 41
例:对多项式进行嵌套式分解 clear; syms x; f1=x^4-5*x^3+5*x^2+5*x-6; horner(f1)
factor指令的使用。 指令的使用。 指令的使用
外不含其他自由变量的情况。 除x外不含其他自由变量的情况。 外不含其他自由变量的情况
syms a x f1=x^4-5*x^3+5*x^2+5*x-6 factor(f1) 答案:(x-1)*(x-2)*(x-3)*(x+1) 答案:
含其他自由变量的情况。 含其他自由变量的情况。
第五章 MATLAB符号运算 符号运算
1 化 三 等 例 : 简 角 式 sinϕ1 cosϕ2 − cosϕ1 sinϕ2
syms fai1 fai2 y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))
例2:y = 2sin x cos x,y = ?
符号对象及符号表达式
符号对象的定义
符号对象:一种特殊的数据类型。 符号对象:一种特殊的数据类型。 定义基本指令:sym, 定义基本指令: syms
数值和数值变量用于数值的存储和各种数值计算, 数值和数值变量用于数值的存储和各种数值计算,而 符号常数、符号变量、符号函数、 符号常数、符号变量、符号函数、符号操作则是用来 形成符号表达式,严格按照代数、微积分等的规则、 形成符号表达式,严格按照代数、微积分等的规则、 公式进行运算,尽可能给出解析结果。 公式进行运算,尽可能给出解析结果。
符号运算 matlab

符号运算 matlab符号运算是一种在数学上进行推导和计算的重要方法,在Matlab 中也有相应的符号运算功能。
通过符号运算,可以进行高精度计算、求解方程、求导积分、代数化简等操作。
本文将介绍 Matlab 中符号运算的基本使用方法和相关函数。
1. 符号变量的定义和赋值在 Matlab 中,可以使用 syms 函数定义符号变量,并使用等号将其赋值。
例如,定义符号变量 x 和 y:syms x yx = 2;y = x + 3;这里,定义了两个符号变量 x 和 y,并将 x 赋值为 2,y 赋值为 x+3。
需要注意的是,符号变量和数值变量在 Matlab 中是不同的类型,不能直接进行运算。
2. 符号表达式的运算在 Matlab 中,可以使用符号表达式进行各种运算,包括加减乘除、幂运算、三角函数、指数函数等。
例如,定义符号表达式 f(x) = 2*x^3 + 3*x^2 - 5*x + 1:syms xf(x) = 2*x^3 + 3*x^2 - 5*x + 1;然后可以对 f(x) 进行各种运算,如求导、积分、代数化简等。
例如,求 f(x) 的一阶导数:diff(f(x), x)这里使用 diff 函数求 f(x) 的一阶导数,结果为 6*x^2 + 6*x - 5。
3. 方程求解在 Matlab 中,可以使用 solve 函数求解方程。
例如,求解方程 x^2 + 3*x + 2 = 0:syms xsolve(x^2 + 3*x + 2 == 0)solve 函数返回的是符号变量的解,需要使用 double 函数将其转换为数值变量。
4. 代数化简在 Matlab 中,可以使用 simplify 函数对符号表达式进行代数化简。
例如,代数化简表达式 (x^2 + 2*x + 1)/(x + 1):syms xsimplify((x^2 + 2*x + 1)/(x + 1))simplify 函数会自动将表达式化简为最简形式。
MATLAB符号计算函数用法总结

MATLAB符号计算函数用法总结符号计算是对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。
MTALAB具有符号数学工具箱(Symbolic Math toolbox),将符号运算结合到MATLAB的属具运算环境。
符号数学工具箱是建立在Maple软件基础上的。
算术符号操作:命令有:+、-、*、.*、\、.\、/、./、^、.^、’、.’用法如下:A+B、A-B符号阵列的加法和减法。
若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。
A*B符号矩阵乘法。
A*B为线性代数中定义的矩阵乘法。
按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。
即:若An*k*Bk*m=(aij)n*k.*(bij)k*m=Cn*m=(cij)n*m,则,i=1,2,…,n;j=1,2,…,m。
或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信息。
A.*B符号数组的乘法。
A.*B为按参量A与B对应的分量进行相乘。
A与B必须为同型阵列,或至少有一个为标量。
即:An*m.*Bn*m=(aij)n*m.*(bij)n*m=Cn*m=(cij)n*m,则cij= aij* bij,i=1,2,…,n;j=1,2,…,m。
A\B矩阵的左除法。
X=A\B为符号线性方程组A*X=B的解。
我们指出的是,A\B近似地等于inv(A)*B。
若X不存在或者不唯一,则产生一警告信息。
矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。
A.\B数组的左除法。
A.\B为按对应的分量进行相除。
若A与B为同型阵列时,An*m.\Bn*m=(aij)n*m.\(bij)n*m=Cn*m=(cij)n*m,则cij= aij\ bij,i=1,2,…,n;j=1,2,…,m。
若若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。
MATLAB符号计算函数用法总结

MATLAB符号计算函数用法总结MATLAB是一种功能强大的计算软件,除了常见的数值计算外,它还提供了符号计算的功能。
符号计算是一种基于表达式的计算方法,可以对数学表达式进行精确计算和推导。
在MATLAB中,通过符号计算工具箱可以进行符号计算操作。
下面是MATLAB符号计算函数的用法总结。
1.符号定义和表达式构建在MATLAB中,可以使用符号计算工具箱中的`sym`函数定义符号变量。
例如:```syms x;```这样就定义了一个符号变量x。
可以使用这个符号变量来构建表达式。
例如:```expr = x^2 + 2*x + 1;```这个表达式就代表了一个二次多项式。
2.符号计算基本操作符号计算工具箱提供了一些基本的符号计算函数,包括求导、积分、解方程等。
例如:- 求导:使用`diff`函数可以对表达式进行求导。
例如,对上面的表达式求一阶导数:```diff(expr, x)```- 积分:使用`int`函数可以对表达式进行积分。
例如,对上面的表达式进行不定积分:```int(expr, x)```- 解方程:使用`solve`函数可以解方程。
例如,解二次方程x^2 + 2*x + 1 = 0:```solve(expr, x)```这样就可以得到方程的解。
3.符号计算的精确性符号计算可以进行精确的计算和推导,不会出现数值计算中的舍入误差。
这对于一些需要精确结果的计算是非常重要的。
但是,由于符号计算涉及到代数表达式的操作,其计算速度一般比数值计算慢得多。
4.符号计算的应用符号计算在数学、工程和科学领域中有着广泛的应用。
它可以用于求解微积分、线性代数、微分方程等问题,还可以用于符号化简、符号化展开等操作。
符号计算还可以用于生成数学公式和方程推导的证明过程。
5.符号计算和数值计算的结合```subs(expr, x, 2)```这样就可以将表达式中的x替换为2,然后计算出结果。
总结:MATLAB符号计算函数提供了一种精确计算和推导的方法,可以对数学表达式进行求导、积分、解方程等操作。
matlab符号运算知识点总结
matlab符号运算知识点总结符号运算在Matlab中的应用非常广泛,包括代数运算、微积分、方程求解、矩阵运算等。
下面对Matlab中符号运算的一些重要知识点进行总结:代数运算在Matlab中进行代数运算,可使用符号工具箱中的函数,如syms,sym,和符号运算的基本运算符包括加减乘除、指数、对数、幂函数等。
另外,Matlab还提供了一些用于多项式运算的特殊函数,如expand、factor、simplify、collect等。
通过这些函数,可以对代数表达式进行化简、因式分解、展开等操作。
微积分在Matlab中进行微积分运算,可使用符号工具箱中的函数,如diff,int,limit等。
这些函数可用于求导、积分、极限等微积分运算。
通过这些函数,可以对符号表达式进行微积分运算,得到导数、积分、极限等结果。
方程求解在Matlab中进行方程求解,可使用符号工具箱中的函数,如solve,dsolve等。
这些函数可用于求解方程、微分方程等问题。
通过这些函数,可以对符号表达式进行方程求解,得到方程的根、微分方程的解等结果。
矩阵运算在Matlab中进行矩阵运算,可使用符号工具箱中的函数,如inv,det,eig等。
这些函数可用于求逆矩阵、求行列式、求特征值等操作。
通过这些函数,可以对符号矩阵进行各种运算,得到矩阵的逆、行列式、特征值等结果。
符号计算的优点符号计算在Matlab中的应用有许多优点。
首先,符号计算能够保留数学表达式的符号形式,不会将其计算成数值,这对于一些需要保留符号的问题非常重要。
其次,符号计算具有精度高、灵活性强的特点,能够处理复杂的数学问题。
此外,符号计算还能够进行符号表达式的化简、因式分解、展开等操作,有助于分析数学表达式的性质。
总之,Matlab中的符号运算功能丰富,能够处理各种数学问题,包括代数运算、微积分、方程求解、矩阵运算等。
符号计算在Matlab中的应用具有许多优点,能够保留数学表达式的符号形式,处理复杂的数学问题,并进行符号表达式的化简、因式分解、展开等操作。
matlab符号计算实验总结
matlab符号计算实验总结
MATLAB 是一种广泛使用的数学软件,其中包括符号计算功能。
符号计算实验可以帮助用户了解如何使用 MATLAB 进行符号计算,以及如何解决实际问题。
以下是 MATLAB 符号计算实验的总结:
1. 熟悉 MATLAB 符号计算环境:MATLAB 符号计算环境包括Symbolic and Algebraic Calculator(SAC) 和 Symbolic Math Kernel(SMK)。
SAC 是一个交互式计算器,可用于符号计算和代数计算。
SMK 是一个内核,可嵌入到 MATLAB 主程序中,用于符号计算和数学推理。
2. 掌握 MATLAB 符号计算基本语法:MATLAB 符号计算的基本语法包括变量名、符号表达式、对数、指数、三角函数、反函数等。
此外,MATLAB 还支持特殊的符号运算符,如+、-、*、/和^。
3. 熟悉 MATLAB 符号计算工具箱:MATLAB 提供了许多符号计算工具箱,包括高级代数、符号微积分、符号微分方程、符号计算物理等。
使用这些工具箱可以更高效地进行符号计算。
4. 掌握 MATLAB 符号计算算法:MATLAB 符号计算算法包括对称群、对称矩阵、雅可比矩阵、特征值和特征向量等。
掌握这些算法可以更好地理解符号计算的原理和实现方法。
5. 实践 MATLAB 符号计算:通过实践 MATLAB 符号计算,可以更好地掌握其语法和算法。
可以尝试解决一些简单的符号计算问题,如求根、解方程、求导、积分等。
MATLAB 符号计算实验可以帮助用户了解符号计算的原理和实现
方法,提高其符号计算技能。
matlab符号计算实验总结
matlab符号计算实验总结
在本次实验中,我们学习了 Matlab 符号计算工具箱,并进行了一些基本的符号计算实验,总结如下:
1. Matlab 符号计算工具箱提供了方便的符号计算环境,可以进行代数运算、微积分、线性代数等操作,适合数学建模、符号计算、科学计算等领域。
2. 在 Matlab 符号计算工具箱中,可以使用符号变量来表示数学表达式,这些可以包含未知量、函数、常数以及一些特殊符号等。
3. 不同于数值计算,符号计算可以处理精确的数学表达式,因此可以应用于一些需要保证精度的计算,比如微分方程、符号积分、级数求和等问题。
4. 在 Matlab 中,我们可以使用符号表达式来进行计算。
需要注意的是,在使用符号计算工具进行复杂运算时,计算速度较慢,因此需要谨慎考虑计算的复杂度。
5. Matlab 符号计算工具箱提供了多种符号计算函数,如求导函数、积分函数、解代数方程函数、解微分方程函数等。
学习和掌握这些函数对于进行符号计算实验非常有帮助。
6. Matlab 符号计算工具箱的应用范围广泛,在数学、物理、化学、工程等领域都有应用。
学习和熟练掌握 Matlab 的符号计算工具箱对于各类科学计算工作都是很有帮助的。
总之,本次实验学习了 Matlab 符号计算工具箱,了解了符号计算基本原理和方法,并进行了一些简单的符号计算实验。
这对于进一步掌握 Matlab 符号计算工具箱有很大帮助,也有益于我们将来的科学计算工作。
MATLAB的符号运算
MATLAB 的符号运算前面介绍的内容基本上是MATLAB 的数值计算功能,参与运算过程的变量都是被赋了值的数值变量.在MATLAB 环境下,符号运算是指参与运算的变量都是符号变量,即使是数字也认为是符号变量. 数值变量和符号变量是不同的.1 符号微积分下面着重介绍一些与微积分有关的指令,这些指令都需要符号表达式作为输入宗量. 求和symsum(S) 对通项S 求和,其中k 为变量且从0变到k-1.symsum(S,v) 对通项S 求和,指定其中v 为变量且v 从0变到v-1. symsum(S,a,b) 对通项S 求和,其中k 为变量且从a 变到b .symsum(S,v,a,b) 对通项S 求和,指定其中v 为变量且v 从a 变到b . 例:求∑-=10k i i ,键入k=sym('k') % k 是一个符号变量;symsum(k)得 ans = 1/2*k^2-1/2*k例:求∑=1002k k,键入:symsum(k^2,0,10)得 ans = 385 例:求∑+∞=0!k kk x 键入 symsum('x'^k/sym('k!'),k,0,inf),得 ans = exp(x)这最后的一个例子是无穷项求和.求极限limit(P) 表达式P 中自变量趋于零时的极限limit(P,a) 表达式P 中自变量趋于a 时的极限limit(P,x,a,'left') 表达式P 中自变量x 趋于a 时的左极限limit(P,x,a,'right') 表达式P 中自变量x 趋于a 时的右极限 例:求xx x sin lim 0→,键入 P=sym('sin(x)/x');limit(P)得 ans = 1例:求xx 1lim 0+→ 键入 P=sym('1/x');limit(P,'x',0,'right')得 ans = inf 例:求hx h x h sin )sin(lim 0-+→,键入: P=sym('(sin(x+h)-sin(x))/h');h=sym('h');limit(P,h,0)得ans = cos(x) 例:求)lim , )1(lim (-x x x x e xa -∞→-∞→+, 键入 v=sym('[(1+a/x)^x,exp(-x)]');limit(v,'x',inf,'left')得 ans = [ exp(a), 0]求导数diff(S,v) 求表达式S 对变量v 的一阶导数.diff(S,v,n) 求表达式S 对变量v 的n 阶导数.例如:设A=⎪⎪⎪⎭⎫ ⎝⎛++21cos 11x e x x b a ,求dx dA 键入命令: syms a b x; A= [1/(1+a),(b+x)/cos(x);1,exp(x^2)];diff(A,'x')得 ans = [0, 1/cos(x)+(b+x)/cos(x)^2*sin(x)][0, 2*x*exp(x^2)]例:求y=sinx+e x 的三阶导数,键入命令:diff('sin(x)+x*exp(x)',3)得 ans = -cos(x)+3*exp(x)+x*exp(x) 例:设⎪⎪⎪⎭⎫ ⎝⎛+=xyi n e xy y x y x A 1sin ,求A 的先对x 再对y 的混合偏导数.可键入命令: S=sym('[x*sin(y),x^n+y;1/x/y,exp(i*x*y)]');dsdxdy=diff(diff(S,'x'),'y')得: dsdxdy = [ cos(y), 0][ 1/x^2/y^2, i*exp(i*x*y)-y*x*exp(i*x*y)]例:求y=(lnx)x 的导数.可键入命令:p='(log(x))^x';p1=diff(p,'x')得:p1 = log(x)^x*(log(log(x))+1/log(x))例:求y=xf(x2)的导数.可键入命令:p='x*f(x^2)';p1=diff(p,'x')得:p1 = f(x^2)+2*x^2*D(f)(x^2)例:求xy=e x+y的导数.可键入命令:p='x*y(x)-exp(x+y(x))';p1=diff(p,'x')得:p1 = y(x)+x*diff(y(x),x)-(1+diff(y(x),x))*exp(x+y(x))再键入p2='y+x*dy-(1+dy)*exp(x+y)=0';dy=solve(p2,'dy')%把dy作为变量解方程得dy= -(y-exp(x+y))/(x-exp(x+y))求Taylor展开式taylor(f,v) f对v的五阶Maclaurin展开.taylor(f,v,n) f对v的n-1阶Maclaurin展开.例:求sinxe-x 的7阶Maclaurin展开.可键入f=sym('sin(x)*exp(-x)');F=taylor(f,8)得F = x-x^2+1/3*x^3-1/30*x^5+1/90*x^6-1/630*x^7例:求sinxe-x 在x=1 处的7阶Taylor展开.可键入f=sym('sin(x)*exp(-x)');F=taylor(f,8,1) 得F = sin(1)*exp(-1)+(-sin(1)*exp(-1)+cos(1)*exp(-1))*(x-1)-cos(1)*exp(-1)*(x-1)^2+(1/3*sin(1)*exp(-1)+1/3*cos(1)*exp(-1))*(x-1)^3-1/6*sin(1)*exp(-1)*(x-1)^4+(1/30*sin(1)*exp(-1)-1/30*cos(1)*exp(-1))*(x-1)^5+1/90*cos(1)*exp(-1)*(x-1)^6+(-1/630*cos(1)*exp(-1)-1/630*sin(1)*exp(-1))*(x-1)^7多元函数的Taylor展开MATLAB不能直接进行多元函数的Taylor展开.必须先调用MAPLE函数库中的mtaylor命令.方法为:在MATLAB的工作窗口中键入maple('readlib(mtaylor)')mtaylor的格式为mtaylor(f,v,n)f为欲展开的函数式v 为变量名.写成向量的形式:[var1=p1,var2=p2,…,varn=pn],展开式将在(p1,p2,…,pn )处进行.如只有变量名,将在0点处展开.n 为展开式的阶数(n -1阶).要完成Taylor 展开,只需键入maple('mtaylor (f,v,n )')即可.例:在(x0,y0,z0)处将F=sin xyz 进行2阶Taylor 展开.键入syms x0 y0 z0maple('readlib(mtaylor)');maple('mtaylor(sin(x*y*z),[x=x0,y=y0,z=z0],2)') 得:ans = sin(x0*y0*z0)+cos(x0*y0*z0)*y0*z0*(x-x0)+cos(x0*y0*z0)*x0*z0*(y-y0)+cos(x0*y0*z0)*x0*y0*(z-z0)求积分int(P) 对表达式P 进行不定积分.int(P,v) 以v 为积分变量对P 进行不定积分.int(P,v,a,b) 以v 为积分变量,以a 为下限,b 为上限对P 进行定积分. 例:求⎰+-dx x x 22)1(2,可键入int('-2*x/(1+x^2)^2')得 ans = 1/(1+x^2) 例:求⎰+dz z x )1(2,可键入键入int('x/(1+z^2)','z')得 ans = atan(z)*x例:求⎰+10)1ln(dx x x ,可键入 int('x*log(1+x)',0,1) 得ans = 1/4例:求⎰tt xdx ln sin 2可键入:int('2*x','sin(t)','log(t)') 得:ans = log(t)^2-sin(t)^2对(符号)矩阵积分例:求()⎰⎰dt e dt e att ,输入 int('[exp(t),exp(a*t)]'),得:ans = [ exp(t), 1/a*exp(a*t)]求符号方程的解ⅰ线性方程组的求解线性方程组的形式为A*X=B ;其中A 至少行满秩.X=linsolve(A,B) 输出方程的特解X .例:解方程组⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛11cos sin sin cos X t t t t .键入 A=sym('[cos(t),sin(t);sin(t),cos(t)]');B=sym('[1;1]');c=linsolve(A,B)c =[ 1/(sin(t)+cos(t))][ 1/(sin(t)+cos(t))]ⅱ 代数方程的求解solve(P,v)对方程P 中的指定变量v 求解.v 可省略.solve(p1,P2,…,Pn,v1,v2,…,vn)对方程P1,P2,…Pn 中的指定变量v1, v2…vn 求解.例:解r x p =+sin ,可输入solve('p+sin(x)=r') 得:ans =-asin(p-r)例:解⎩⎨⎧=+-=++034322x x y xy x ,可输入: P1='x^2+x*y+y=3';P2='x^2-4*x+3=0';[x,y]=solve(P1,P2) 得:x = [ 1][ 3]y = [ 1][ -3/2]解⎩⎨⎧=-=++1022v u v u a ,可输入: P1='a+u^2+v^2=0';P2='u-v=1';[u,v]=solve(P1,P2,'u','v') 得:u = [ 1/2+1/2*(-1-2*a)^(1/2)][ 1/2-1/2*(-1-2*a)^(1/2)]v = [ -1/2+1/2*(-1-2*a)^(1/2)][ -1/2-1/2*(-1-2*a)^(1/2)]对于有些无法求出解析解的非线性方程组,MATLAB 只给出一个数值解.这一点可以从表示解的数字不被方括号括住而确定.例:解⎪⎩⎪⎨⎧=-=-+20)sin(2y x ye y x x 键入:[x,y]=solve('sin(x+y)-exp(x)*y=0','x^2-y=2') 得:x = -6.0173272500593065641097297117905y = 34.208227234306296508646214438330由于这两个数字没有被[ ]括住,所以它们是数值解.另外,可利用solve 来解线性方程组的通解.例:解⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛246714922531372X 键入P1='2*x1+7*x2+3*x3+x4=6'; P2='3*x1+5*x2+2*x3+2*x4=4';P3='9*x1+4*x2+x3+7*x4=2';u=solve(P1,P2,P3,'x1','x2','x3','x4')Warning: 3 equations in 4 variables.u = x1: [1x1 sym]x2: [1x1 sym]x3: [1x1 sym]x4: [1x1 sym]可以看到:屏幕提示“有3个方程4个变量”,意为解不唯一(有时会提示解不唯一).且输出的是解的结构形式.为进一步得到解,可输入:u.x1,u.x2,u.x3,u.x4, 得:ans = x1ans = -5*x1-4*x4ans = 11*x1+9*x4+2ans = x4这样就得到了原方程组的通解.⑷ 解符号微分方程解符号微分方程的命令格式为: dsolve('eq1','eq2',…).其中eq 表示相互独立的常微分方程、初始条件或指定的自变量.默认的自变量为t .如果输入的初始条件少于方程的个数,则在输出结果中出现常数c1,c2等字符.关于微分方程的表达式有如下的约定:字母y 表式函数,Dy 表示y 对t 的一阶导数;Dny 表示y 对t 的n 阶导数. 例如:求⎪⎩⎪⎨⎧-==x dtdy ydt dx 的解可键入:[x,y]=dsolve('Dx=y','Dy=-x') 得x =cos(t)*C1+sin(t)*C2y =-sin(t)*C1+cos(t)*C2dsolve 中的输入宗量最多只能有12个,但这并不妨碍解具有多个方程的方程组,因为可以把多个方程或初始条件定义为一个符号变量进行输入.例如求 g f dt df 43+= ,g f dtdg 34+-= , f(0)=0 , g(0)=1 的解.可输入指令: P='Df=3*f+4*g,Dg=-4*f+3*g';v='f(0)=0,g(0)=1';[f,g]=dsolve(P,v)f = exp(3*t)*sin(4*t)g = exp(3*t)*cos(4*t)注意:微分方程表达式中字母D 必须大写. 例如求解微分方程⎪⎩⎪⎨⎧=''='=-=0(0)y 0,(0)y 1,y(0)33y dx y d 可输入y=dsolve('D3y=-y','y(0)=1,Dy(0)=0,D2y(0)=0','x') 得:y = (1/3+2/3*exp(1/2*x)*cos(1/2*3^(1/2)*x)*exp(x))/exp(x)最后看一个解非线性微分方程的例子:dsolve('(Dy)^2+y^2=1','y(0)=0','x')ans = [ sin(x)][ -sin(x)]对于无法求出解析解的非线性微分方程,屏幕将提示出错信息.微分方程的数值解及其它问题的数值解ⅰ 常微分方程的数值解MATLAB 提供了求微分方程数值解的指令:[t,x]=ode23('fname',[t0,tf],x0,tol,trace)[t,x]=ode45('fname',[t0,tf],x0,tol,trace)这两个格式中的输入参数意义完全一样.下面介绍这两个格式的有关内容及各参数的意义.这两个格式都采用Runge--Kutta 法求解微分方程的数值解.它们是针对一阶微分方程组设计的.因此,如果待解的是高阶微分方程,那么首先要化成形式为x'=f(t,x)的一阶微分方程组.称为“状态方程”.‘fname ’是f(t,x)的函数名.该函数以x'为输出,以t,x 为输入变量,注意次序不能颠倒. t0和tf 分别是积分的起始值和终止值.x0是初始值,以向量的形式输入.tol 是用来控制精度的参数,可缺省.缺省时ode23默认tol=1.e-3;ode45默认tol=1.e -6.trace 用来控制是否显示中间结果,可缺省.缺省时,默认trace=0,不显示.输出结果t 和x 分别是时间向量和相应的状态向量.虽然ode45比ode23的精度高,但它的运算速度更快.例:求著名的Van der pol 方程⎩⎨⎧=--=x yy x y x )1(2,并绘出其解的图形. 第一步:在编辑器中编写名为fname 的M 文件.function X=fname(t,x)X=zeros(2,1);X(1)=(1-x(2)^2)*x(1)-x(2);X(2)=x(1);第二步:将此文件存放于自己的文件夹中听候调用.第三步:在MATLAB 的命令窗口调用这个函数,即键入如下命令:[t,x]=ode45('fname',[0,20],[0,0.5]);plot(t,x)ⅱ 数值积分quad('fname',a,b,tol,trace) Simpson 法求数值积分.quad8('fname',a,b,tol,trace) Newton-Cotes 法求数值积分.fname 是被积函数文件名b,a 分别是积分上下限用tol 来控制积分精度.可缺省.缺省时默认tol=0.001.用trace 来控制是否用图形显示积分过程.可缺省.缺省时默认trace=0,不显示图形.例如:求 ⎰-302x e dx第一步:在编辑器中建立被积函数的M 文件.取名为fname 即在编辑器中输入: function y=fname(x)y=exp(-x^2);第二步:将此文件存放于自己的文件夹中.第三步:在MATLAB 环境下调用fname.即输入s=quad8('fname',0,3)就可以得到结果:s =8862。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>> num=log(2) num = 0.6931 >> a=sym(log(2)) a= 6243314768165359*2^(-53) >> b=sym(log(2),'r') b= 6243314768165359*2^(-53)
指数形பைடு நூலகம்的有理数格式
>> c=sym(log(2),'d') c= .69314718055994528622676398299518
>> H=sym('[cos(t), -sin(t); sin(t), cos(t)]')
H= [ cos(t), -sin(t)] >> syms t [ sin(t), cos(t)] >> H=[cos(t), -sin(t); sin(t), cos(t)]
5.1.2 符号表达式 符号表达式是由符号对象参与运算的表达式即是符 号表达式。与数值表达式不同,符号表达式中的变量不 要求有预先确定的值。 符号方程式是含有等号的符号表达式。
>> syms x y z r s t >> r^2+sin(x)+cos(y)+log(s)+exp(t) ans = r^2+sin(x)+cos(y)+log(s)+exp(t) >> f1= r^2+sin(x)+cos(y)+log(s)+exp(t) f1 = r^2+sin(x)+cos(y)+log(s)+exp(t) >> f2=sym(r^2+sin(x)+cos(y)+log(s)+exp(t)) %必须有第一行 f2 = r^2+sin(x)+cos(y)+log(s)+exp(t) >> f3=sym('r^2+sin(x)+cos(y)+log(s)+exp(t)') %可以无第一行 f3 = r^2+sin(x)+cos(y)+log(s)+exp(t) >> f4='r^2+sin(x)+cos(y)+log(s)+exp(t)' f4 = r^2+sin(x)+cos(y)+log(s)+exp(t)
(symbolic)对象的说明:
函数sym( ) 命令syms
1. 定义符号常量:函数sym( )
sym('A')或sym('A','flag') flag 为可选参数,有4 种形式,它们将数值量转换成符号 量并以各自不同的格式表达其结果。 'r':用有理数格式表达符号量(默认的表达格式,其具体
5.1.3 符号矩阵
符号矩阵的元素可以是符号常量、符号变量和符号表
达式,创建符号矩阵的方法有:
函数sym;
类似创建普通数值矩阵的方法创建符号矩阵;
由数值矩阵转换为符号矩阵;
以矩阵元素的通式来创建符号矩阵。
>> S=sym('[l,x,y,z;n,u,v,w;a,b,c,d;g,h,j,p]') S=
sym() >> sym('x') ans = x >> sym('y','real') ans =
syms
>> syms a b c
>> syms m n real >> syms x y z unreal
注:命令 syms 可以同时定义多个符号变量,只能用空格 分隔各个变量,不能在各变量之间加逗号。而函数 sym()一 y 次只能定义一个符号变量! >> sym('z','unreal')
>> whos f* Name Size
f1 f2 f3 f4 1x1 1x1 1x1 1x31
Bytes Class 186 186 186 62 sym object sym object sym object char array
Grand total is 127 elements using 620 bytes
形式又有多种,如分式,指数式,开方式等。)
'd':用十进制数格式表达符号量(默认显示精度可达32 位 )。 'e':用带有机器浮点误差的有理数格式表达符号量。 'f':用浮点数格式表达符号量。
>> log(2) %数值常量 ans = 0.6931 >> (3*4-2)/5+1 %表达式形式的数值常量 ans = 3 >> f1=sym('log(2)') %符号常量 f1 = log(2) >> f2=sym('(3*4-2)/5+1') %表达式形式的符号常量 f2 = (3*4-2)/5+1
Bytes Class 172 172 190 172 172 8 sym object sym object sym object sym object sym object double array
2. 定义符号变量 (1) 使用函数sym( ) sym('x') sym('x','real') sym('x','unreal') (2) 使用命令syms syms arg1 arg2 ... syms arg1 arg2 ... real syms arg1 arg2 ... unreal 参数'real'定义为实型符号量,'unreal'定义为非实型 符号量。
第5章 MATLAB符号运算
5.1 符号对象及其表达方式
MATLAB符号运算以符号数学工具箱提供的一系列符号 运算函数为依据。 符号对象是对参与符号运算的各种形式量,包括符号常 量、符号变量、符号表达式和符号矩阵或数组。
5.1.1 符号常量和变量
符号常量和变量 数值常量和变量 符号常量和符号变量在被当做符号对象引用时必须有符号
十进制数格式,长达32位
>> d=sym(log(2),'e') d= 6243314768165359*2^(-53)
带有机器浮点误差的有理数格式
>> e=sym(log(2),'f') e= '1.62e42fefa39ef'*2^(-1)
浮点数格式
>> whos Name Size a b c d e num 1x1 1x1 1x1 1x1 1x1 1x1
[ l, x, y, z]
[ n, u, v, w] [ a, b, c, d] [ g, h, j, p]
>> syms l x y z n u v w a b c d g h j p S=[l,x,y,z;n,u,v,w;a,b,c,d;g,h,j,p] >> B=sym('[a b c;d e f;g h k]') B= [ a, b, c] [ d, e, f]