实验三MATLAB符号计算
- 格式:doc
- 大小:50.00 KB
- 文档页数:2
如何在Matlab中进行符号计算Matlab是一种非常强大的数学计算软件,除了常见的数值计算,也可以进行符号计算。
符号计算是一种基于数学符号的计算方法,可以进行代数运算、求解方程、求导、积分等一系列符号运算。
在Matlab中进行符号计算,可以帮助我们更好地理解数学概念、解决复杂的数学问题。
本文将介绍如何在Matlab中进行符号计算,包括符号变量的定义、基本运算、方程求解、求导和积分等方面。
一、符号变量的定义在Matlab中进行符号计算,需要首先定义符号变量。
符号变量是用来表示未知数和函数的数学符号,可以使用syms关键字来定义。
例如,我们可以定义一个符号变量x,并进行一些基本操作。
```syms x;f = x^2 + sin(x);```在上述代码中,我们定义了一个符号变量x,并定义了一个函数f,代表x的平方加上sin(x)。
在后续的运算中,可以使用这些符号变量进行计算。
二、基本运算在Matlab中进行符号计算时,可以进行基本的数学运算,包括加减乘除、幂运算、开方等。
这些运算符在符号计算中与数值计算中的用法一致。
例如,我们可以进行如下的运算:```syms x;f = x^3 + 2*x^2 - x + 1;g = diff(f, x);```在上述代码中,我们定义了一个函数f,然后使用diff函数对f进行求导,将结果赋值给变量g。
通过这样的方式,可以方便地进行复杂的数学运算。
三、方程求解在Matlab中进行符号计算时,经常需要解方程。
Matlab提供了solve函数,可以对方程进行求解。
例如,我们可以解一个简单的一次方程:```syms x;eqn = 2*x + 3 == 7;sol = solve(eqn, x);```上述代码中,我们定义了一个方程eqn,然后使用solve函数求解方程,将结果赋值给变量sol。
在Matlab中可以同时解多个方程,并得到符号解或数值解。
四、求导和积分除了基本运算和方程求解,Matlab还提供了求导和积分的函数,方便进行符号计算。
Matlab中的符号计算方法在数学和科学领域,符号计算是一个重要的工具。
它可以帮助我们进行精确的数学计算和推理,而不仅仅是依赖计算机的数值近似。
Matlab作为一个强大的数值计算软件,也提供了丰富的符号计算功能,用于代数运算、微积分和代数方程求解等方面。
本文将介绍Matlab中的一些常用的符号计算方法和技巧。
一、符号变量在Matlab中,我们可以通过声明符号变量来表示符号对象。
符号变量通常用小写字母表示,例如x、y、z等。
使用符号变量,我们可以进行各种代数运算,例如加法、减法、乘法和除法等。
下面是一些示例:syms x y zf = x^2 + y^2 - z^2;g = (x + y + z)^3;h = sin(x) * cos(y);通过声明符号变量,并使用这些变量进行计算,我们可以得到精确的结果,而不是使用数值近似。
二、符号表达式在Matlab中,符号表达式是由符号变量和运算符组成的一种数据类型。
使用符号表达式,我们可以构建复杂的代数表达式和方程。
例如,我们可以定义一个符号表达式f表示一个多项式函数,并对其进行运算:f = x^3 - 2*x^2 + x - 1;我们可以对符号表达式进行加减乘除等运算,并得到一个新的符号表达式。
三、代数方程求解在解决数学问题时,我们经常需要求解代数方程。
Matlab提供了强大的符号求解工具,可以帮助我们求解各种类型的代数方程。
例如,我们可以使用solve函数求解一元方程:syms xeqn = x^2 - 3*x + 2 == 0;sol = solve(eqn, x);通过solve函数,我们可以找到满足方程eqn的所有解,并将其存储到sol变量中。
除了一元方程,Matlab还支持多元方程的求解。
例如,我们可以使用solve函数求解一个二元方程组:syms x yeqn1 = x + 2*y == 5;eqn2 = x - y == 1;sol = solve([eqn1, eqn2], [x, y]);通过solve函数,我们可以找到满足方程组eqn1和eqn2的所有解,并将其存储到sol变量中。
1. 已知x=6,y=5,利用符号表达式求z =>> syms x >> z=(x+1)/(sqrt(x+3)-sqrt(y)); >> subs(z,x,5) ans =6/(8^(1/2)-y^(1/2)) >> subs(ans,6) ans = 15.83382. 分解因式。
(1)x y -44; >> syms x y >> factor(x^4-y^4) ans =(x-y)*(x+y)*(x^2+y^2)(2)x x x +++64212575151 >> syms x >> factor(125*x^6+75*x^4+15*x^2+1) ans =(5*x^2+1)^33. 化简表达式(1)sin cos cos sin ββββ-1212;>> syms x y >> f=sin(x).*cos(y)-cos(x).*sin(y); >> sfy1=simple(f) 结果:sfy1 =sin(x-y)(2)x x x +++248321>> syms x >> f=(4*x^2+8*x+3)/(2*x+1);sfy1=simplify(f) sfy1 =2*x+34、求下列极限,将完成实验的程序写到文件sy1.m 中:(1) (2) (3) (4)(5) (1)>> syms x >> F1=atan(x)/(x); >> w=limit(F1) w =1(2)>> syms x F2=((1+x)/(1-x))^(1/x); >> w=limit(F2) w =exp(2)(3)>> syms x F3=(x.*log(1+x))/(sin(x^2)); >> w=limit(F3) w =1(4)>> syms x F4=atan(x)/(x); >> w=limit(F4,x,inf) w =0(5)>> syms x F5=(1/(1-x)-1/(1-x^3)); >> w=limit(F5,x,1) w =NaN5、求下列函数的导数,将完成实验的程序写到文件sy2.m 中:1、 >> x = sym('x'); >> y1=(cos(x))^3-cos(3*x); >> diff(y1)ans =-3*cos(x)^2*sin(x)+3*sin(3*x)2、 >> x = sym('x'); >> y2=x.*sin(x).*(log(x)); >> diff(y2)ans =sin(x)*log(x)+x*cos(x)*log(x)+sin(x)3、>> x = sym('x'); >> y3=(x.*exp(x)-1)/sin(x); >> diff(y3)ans =(exp(x)+x*exp(x))/sin(x)-(x*exp(x)-1)/sin(x)^2*cos(x)4、 x x x x F 1011lim 2⎪⎭⎫ ⎝⎛-+=→31115lim()11x F x x →=---20sin )1ln(lim 3x x x F x +=→x x F x arctan lim 10→=arctan 4lim x x F x →∞=xx y 3cos cos 13-=xx x y ln sin 2=x xe y xsin 13-=cos x y e x =>> x = sym('x');y=cos(x).*exp(x); >> diff(y) ans =-sin(x)*exp(x)+cos(x)*exp(x)5、 >> x = sym('x');y=x^2.*sin(x); >> diff(y) ans = 2*x*sin(x)+x^2*cos(x)6、求下列函数的积分1、syms x a b c;int(sin(a*x).*sin(b*x).*sin(c*x)) ans =-1/4/(c+a-b)*cos((c+a-b)*x)+1/4/(-c+a-b)*cos((-c+a-b)*x)+1/4/(c+a+b)*cos((c+a+b)*x)-1/4/(-c +a+b)*cos((-c+a+b)*x) 2、>> syms x ;int(x^5+x^3-sqrt(x)/4) ans =1/6*x^6+1/4*x^4-1/6*x^(3/2)3、>> syms x ;int(x.*exp(x)/(x+1)^2,x,0,1) ans =1/2*exp(1)-1 4、 >> syms x y;F=int(int('x/(1+x*y)',x,0,1),y,0,1) F =2*log(2)-15、 由曲面22y x z +=,1=z ,2=z 所围成 >> syms x y z;F=int(int(int('x^2+y^2',x,-inf,inf),y,-inf,inf),z,1,2) F =Inf7、求下列级数的和(1) (2)(1)>> syms n;symsum(2*n-1/2^n,1,Inf) ans =Inf(2)syms n;symsum(1/n*(2*n-1),1,Inf) ans =Inf8、将函数 展开成2-x 的幂级数>> syms x;mtaylor(1/(x^2+5*x-3),x-2) 2sin 2y x x=⎰cxdx bx ax sin sin sin dx x x x )4(35⎰-+⎰+102)1(dx x xe x ⎰⎰+D dxdy xy x 1]1,0[]1,0[⨯=D ⎰⎰⎰Vzdxdydz 11212n n n I ∞=-=∑211(21)n I n n ∞==+∑21()53f x x x =+-。
matlab符号计算实验总结
在这个实验中,我们使用了MATLAB中的符号计算工具,通过创建符号变量和符号表达式来进行数学计算和推导。
这些符号计算工具能够处理代数运算、微积分、方程求解等复杂的数学问题。
在实验过程中,我们首先学习了如何创建符号变量。
通过使用
'sym'函数,我们可以将常规变量转换为符号变量,从而进行符号计算。
例如,我们可以定义一个符号变量x:x = sym('x')。
接下来,我们学习了如何使用符号变量进行代数运算。
通过将符号变量组合成符号表达式,我们可以进行加减乘除等代数运算。
例如,我们可以定义一个符号表达式y = x^2 + 2*x + 1,并对其进行简化或展开操作。
除了代数运算,我们还学习了如何进行微积分计算。
通过使用符号变量和符号表达式,我们可以对函数进行求导和积分操作。
例如,我们可以对一个符号表达式y = x^3求导,并得到其导数表达式。
在实验中,我们还学习了如何使用符号计算工具解方程。
通过使用'solve'函数,我们可以求解方程的根。
例如,我们可以解一个一元二次方程,找到其根的解析解。
通过这个实验,我深刻理解了符号计算在数学问题中的重要性。
它能够帮助我们更好地理解数学概念和定理,并能够进行复杂的数学推导和计算。
MATLAB中的符号计算工具提供了强大的功能和简便的操作,使得数学问题的解决变得更加高效和准确。
总的来说,这个实验让我对MATLAB中的符号计算有了更深入的
了解和掌握。
我相信在今后的学习和研究中,这些符号计算工具将对我有很大的帮助。
西北农林科技大学实验报告学院名称:理学院专业年级:2013级信计1班姓名:学号:课程:数学软件实验报告日期:2014年11月1日实验三MATLAB的符号矩阵运算与符号微积分一.实验目的MATLAB 不仅具有数值运算功能,还开发了在matlab环境下实现符号计算的工具包Symbolic Math Toolbox。
本次实验的目的对所学的符号矩阵的创建与修改、各种符号运算进行巩固,学会使用数学软件来求极限、微分、积分,解方程和解微分方程等。
二.实验要求理解符号变量、符号表达式、符号矩阵等概念,掌握符号矩阵和符号表达式的创建,了解符号运算与数值运算的不同点,会修改已有的符号矩阵,并会符号矩阵与数值矩阵的相互转换,掌握符号矩阵矩阵的运算。
熟练掌握符号求极限、符号求微分(导数)、符号求积分(不定积分和定积分),掌握符号代数方程(组)求解、符号微分方程(组)求解,了解符号积分变换。
三.实验内容符号运算一、符号变量、符号表达式、符号矩阵等概念MATLAB符号运算工具箱处理的对象主要是符号变量与符号表达式。
要实现MATLAB的符号运算,首先要将处理的对象定义为符号变量或符号表达式,其定义格式如下:1.sym ('变量名') 或sym ('表达式')2.syms 变量名1变量名. . . 变量名n二、符号运算与数值运算的不同点数值运算:求出具体的数值,不含符号。
(如解方程,求出未知数x=1.5 ,不是未知数=ab+c)符号运算:结果用符号表示。
许多问题,只有数值解,没有符号解。
三、修改已有的符号矩阵及符号矩阵与数值矩阵的相互转换1. 修改已有的符号矩阵(1).直接修改可用↑、←键找到所要修改的矩阵,直接修改(2)指令修改用A1=sym(A,*,*,'new') 来修改。
用A1=subs(A, 'new', 'old')来修改2. 符号矩阵与数值矩阵的相互转换(1)将数值矩阵转化为符号矩阵>> A=[1/3,2.5;1/0.7,2/5]A =0.3333 2.50001.4286 0.4000>> sym(A)ans =[0.333333333333333 2.50000000000000 ][ ][1.42857142857143 0.400000000000000](2) 将符号矩阵转化为数值矩阵函数调用格式:double(a)>> a=sym ('[1,3;4,6;3,4]')a =[1 3][ ][4 6][ ][3 4]>> double(a)ans =1 34 63 4四、符号运算1.符号矩阵和符号表达式的创建(1) 符号表达式的创建>> syms x y z>> x,y,zx =xy =yz =z>> f1=x^2+2*x+1f1 =2x + 2 x + 1>> f2=exp(y)+exp(z)^2f2 =2exp(y) + exp(z)>> f3=f1+f2f3 =2 2x + 2 x + 1 + exp(y) + exp(z)(2)符号矩阵创建a.用sym()创建>> exam=sym ('[1,x;y/x,1+1/y;3+3,4*r]')exam =[ 1 x ][ ][y/x 1 + 1/y][ ][ 6 4 r ] b.普通矩阵方法>> syms a1 a2 a3 a4>> A=[a1 a2;a3 a4]A =[a1 a2][ ][a3 a4] >> A(1),A(3)ans =a1ans =a2c.用矩阵元素通式创建>> syms x y c r>> a=sin((c+(r-1)*3));>> b=exp(r+(c-1)*4);>> c=(c+(r-1)*3)*x+(r+(c-1)*4)*y;>> A=symmat(3,3,a)A =[sin(1) sin(2) sin(3)][ ][sin(4) sin(5) sin(6)][ ][sin(7) sin(8) sin(9)]2.符号微积分(1)极限返回符号对象f当x→a时的极限>> limit(f,x,a)ans =[2 2][ ][4 4]返回符号对象f当x→a时的右极限>> limit(f,x,a,'right')ans =[2 2][ ][4 4]返回符号对象f当x→a时的左极限>> limit(f,x,a,'left')ans =[2 2][ ][4 4] (2).导数求符号对象f关于默认变量的微分diff(f)ans =2 2求符号对象f关于指定变量v的微分>> v=2v =2>> diff(f,v)ans =求符号对象f关于默认变量的n次微分,n为自然数1、2、3…>> n=4n =4求符号对象f关于指定变量v的n次微分>> diff(f,n)ans =[]>> diff(f, v,n)ans =Empty array: 2-by-2-by-1-by-0(3)积分求符号对象f关于默认变量的不定积分>> int(f)ans =[2 x 2 x][ ][4 x 4 x]求符号对象f关于指定变量v的不定积分>> f=v+3f =v + 3>> int(f,v)ans =21/2 v + 3 x 求符号对象f关于默认变量的从a到b的定积分>> f=v+3f =5>> a=2,b=3a =2b =3>> int(f,a,b)ans =53.符号线性代数(1).解符号代数方程>> solve('f=a*x^2+b*x+c',x)ans =[ 2 1/2 ][ -b + (-4 a c + 4 a f + b ) ][1/2 ----------------------------- ][ a ][ ][ 2 1/2][ b + (-4 a c + 4 a f + b ) ][- 1/2 ----------------------------][ a ](2).解微分方程>> dsolve('Dy=1+y^2')ans =tan(t + _C1)四、实验总结通过本次试验,我了解到MATLAB 不仅具有数值运算功能,还开发了在matlab 环境下实现符号计算的工具包Symbolic Math Toolbox。
MATLAB 符号运算实验1、 用符号函数法求解方程a t 2+b*t +c=0。
clc;clear;solve('a*t^2+b*t+c')ans =-(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a)2、 用符号计算验证三角等式:sin(ϕ1)cos(ϕ2)-cos(ϕ1)sin(ϕ2) =sin(ϕ1-ϕ2)、clc;clear; syms a bexpand(sin(a)*cos(b)-cos(a)*sin(b)-sin(a-b))ans = 0因为sin(a)*cos(b)-cos(a)*sin(b)-sin(a-b)=0,所以sin(a)*cos(b)-cos(a)*sin(b)=sin(a-b)。
3、 用符号函数法求矩阵⎥⎦⎤⎢⎣⎡=22211211a a a a A 的行列式值、逆和特征根。
clc;clear;syms a11 a12 a21 a22 M=[a11,a12;a21,a22]; [m,n]=size(M) inv(M) [V,x]=eig(M)m = 2 n = 2 ans =[ a22/(a11*a22 - a12*a21), -a12/(a11*a22 - a12*a21)][ -a21/(a11*a22 - a12*a21), a11/(a11*a22 - a12*a21)] V =[ -(a22 - a11 + (a11^2 - 2*a11*a22 + a22^2 + 4*a12*a21)^(1/2))/(2*a21), (a11 - a22 + (a11^2 - 2*a11*a22 + a22^2 + 4*a12*a21)^(1/2))/(2*a21)] [1, 1] x =[ a11/2 + a22/2 - (a11^2 - 2*a11*a22 + a22^2 + 4*a12*a21)^(1/2)/2, 0][0, a11/2 + a22/2 + (a11^2 - 2*a11*a22 + a22^2 + 4*a12*a21)^(1/2)/2] 4、 用符号函数法求因式分解:6555234-++-x x x xclc;clear; syms xfactor(x^4-5*x^3+5*x^2+5*x-6)ans =(x - 1)*(x - 2)*(x - 3)*(x + 1) 5、 ⎥⎥⎦⎤⎢⎢⎣⎡=)sin()log(12x x ex x af ax ,用符号微分求df/dx 。
如何使用MATLAB进行符号计算1. 引言在科学计算和工程应用中,符号计算是一项重要的任务。
符号计算可以帮助我们推导数学公式、解方程、进行代数化简等等。
MATLAB作为一种强大的科学计算工具,也提供了符号计算的功能。
本文将介绍如何使用MATLAB进行符号计算。
2. 符号计算基础在MATLAB中,符号计算通过符号工具箱提供。
首先需要将变量声明为符号变量,使用`syms`关键字来完成。
例如,下面的代码将变量x和y声明为符号变量:```syms x y```其次,我们可以使用`sym`函数将数值转换为符号类型。
例如,下面的代码将整数2转换为符号类型:```a = sym(2)```最后,我们可以使用各种符号运算进行符号计算。
例如,下面的代码演示了符号变量之间的加法运算:```x + y```3. 推导数学公式符号计算的一个常见用途是推导数学公式。
MATLAB提供了一系列函数来进行推导,如`diff`、`int`等。
例如,下面的代码计算了函数sin(x)的导数: ```syms xf = sin(x);df = diff(f, x);```在这个例子中,`diff`函数用于计算导数,第一个参数是要计算导数的函数,第二个参数是相对于哪个变量求导数。
4. 解方程另一个常见的符号计算任务是解方程。
MATLAB提供了`solve`函数来解方程。
例如,下面的代码解了方程x^2 - 2 = 0:```syms xsol = solve(x^2 - 2);```解方程的结果是一个结构体数组,每个元素代表一个解。
5. 代数化简符号计算还可以用于代数化简。
MATLAB提供了`simplify`函数来进行代数化简。
例如,下面的代码对表达式(x+1)^2进行化简:```syms xexpr = (x+1)^2;simplified_expr = simplify(expr);````simplify`函数将表达式化简为最简形式。
实验三 MATLAB 的符号运算一 实验目的:1.掌握符号对象的创建及符号表达式化简的基本方法;2.掌握符号微积分、符号方程的求解的基本方法。
二 实验装置:计算机三 实验内容:1.符号对象的创建(1) 建立符号变量使用sym 函数把字符表达式'2*sin(x)*cos(x)'转换为符号变量。
2.符号表达式的化简(1)因式分解对表达式f=x 3-1 进行因式分解。
(2) 符号表达式的展开对符号表达式f=cos(x+y)进行展开。
(3)符号表达式的同类项合并对于表达式f=(2x 2*(x+3)-10)*t ,分别将自变量x 和t 的同类项合并。
(4)符号表达式的化简(5)符号表达式的分式通分对表达式 进行通分。
(6)符号表达式的替换用新变量替换表达式a+b 中变量b 。
3.符号微积分(1) 符号极限计算表达式 的极限。
(2)符号微分计算表达式f=sinx 的微分。
(3)符号积分。
例:简化32381261+++=xx x f 22x y y x f +=xtgx x lim 0→()⎰+dzz x31计算表达式 的积分。
(4)符号求和计算表达式 4.符号方程的求解求解代数方程组 四 实验要求:1.按照要求预习实验;2.在MATLAB 中运行实验程序验证仿真结果;3. 按照要求完成实验报告。
.10005∑k⎪⎩⎪⎨⎧=--=-+=+-043035218472z y x z y x z y x。
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 符号计算工具箱,并进行了一些基本的符号计算实验,总结如下:
1. Matlab 符号计算工具箱提供了方便的符号计算环境,可以进行代数运算、微积分、线性代数等操作,适合数学建模、符号计算、科学计算等领域。
2. 在 Matlab 符号计算工具箱中,可以使用符号变量来表示数学表达式,这些可以包含未知量、函数、常数以及一些特殊符号等。
3. 不同于数值计算,符号计算可以处理精确的数学表达式,因此可以应用于一些需要保证精度的计算,比如微分方程、符号积分、级数求和等问题。
4. 在 Matlab 中,我们可以使用符号表达式来进行计算。
需要注意的是,在使用符号计算工具进行复杂运算时,计算速度较慢,因此需要谨慎考虑计算的复杂度。
5. Matlab 符号计算工具箱提供了多种符号计算函数,如求导函数、积分函数、解代数方程函数、解微分方程函数等。
学习和掌握这些函数对于进行符号计算实验非常有帮助。
6. Matlab 符号计算工具箱的应用范围广泛,在数学、物理、化学、工程等领域都有应用。
学习和熟练掌握 Matlab 的符号计算工具箱对于各类科学计算工作都是很有帮助的。
总之,本次实验学习了 Matlab 符号计算工具箱,了解了符号计算基本原理和方法,并进行了一些简单的符号计算实验。
这对于进一步掌握 Matlab 符号计算工具箱有很大帮助,也有益于我们将来的科学计算工作。
matlab符号运算实验原理
MATLAB中的符号运算是一种使用符号变量和表达式的运算方式,与数值
运算不同。
其原理主要基于以下方面:
1. 符号表达式的创建:MATLAB中的符号运算使用符号常量、符号变量和
符号表达式。
这些都可以通过`sym`函数创建。
例如,`A=sym('1')`会创建
一个符号常量,`B=sym('x')`会创建一个符号变量,而`f=sym('2x^2+3y-
1')`则会创建一个符号表达式。
2. 符号运算的执行:符号运算主要包括基本的四则运算(加、减、乘、除)、复合运算、求导和积分等。
对于初等函数,这些运算可以直接使用基本的数学公式进行。
例如,求导和积分可以使用基本的初等函数导数公式和积分公式,以及四则运算法则和复合函数链式求导法则。
3. 结果的表示:符号运算的结果可以是数值或者符号。
对于数值结果,MATLAB会自动进行数值化表示。
对于符号结果,MATLAB会以符号形式
表示。
4. 特殊情况的处理:对于一些特殊情况,如求高次多项式的零点或者对一些特殊函数进行积分等,可能需要特殊的处理方法或者预存的求根或求积套路。
总的来说,MATLAB的符号运算实验原理主要基于符号表达式的创建、使
用基本的数学公式进行运算以及对特殊情况的处理。
这些原理使得
MATLAB能够方便地进行数学上的符号运算,为数学研究和工程计算提供了强大的工具。
关于matlab符号计算的综合实例在科学计算领域,matlab是一种非常常用的软件工具,它具有强大的符号计算功能,可以对符号表达式进行求导、积分、解方程等操作,为科学研究和工程设计提供了便利。
本文将通过一些实例,介绍matlab符号计算功能的应用和操作技巧。
一、符号变量的定义和基本运算我们需要明白matlab中符号计算需要先定义符号变量。
在matlab中,可以使用syms命令定义符号变量,比如:syms x y这样就定义了两个符号变量x和y。
接下来,我们就可以进行基本的符号运算,比如加法、减法、乘法和除法,示例代码如下:1. 加法:z = x + y2. 减法:w = x - y3. 乘法:4. 除法:v = x / y通过这些简单的示例,我们可以看到,matlab对于符号变量的基本运算操作和数学运算规则是一致的,只是使用符号变量进行运算,可以得到符号表达式作为结果。
二、符号函数的求导和积分在科学计算中,求导和积分是非常常见的操作,matlab可以对符号函数进行求导和积分操作,示例代码如下:1. 求导:f = x^2 + 3*x + 2df = diff(f, x)2. 积分:F = int(f, x)通过这些示例,我们可以看到,matlab可以对符号函数进行求导和积分操作,并得到相应的结果。
这对于解决一些数学问题和工程问题非三、符号方程的求解在科学研究和工程设计中,经常会遇到需要求解符号方程的情况,matlab提供了符号求解方程的功能,示例代码如下:1. 求解一元方程:syms xeqn = x^2 - 4*x + 3 == 0;sol = solve(eqn, x)2. 求解多元方程:syms x yeqn1 = x + y == 3;eqn2 = x - y == 1;sol = solve([eqn1,eqn2],[x,y])通过这些示例,我们可以看到,matlab可以对符号方程进行求解,并得到相应的结果。
实验报告实验4: 符号计算符号运算中,解算数学表达式、方程时,不是在离散化的数值点上进行,而是凭借一系列恒等式和数学定理,通过推理和演绎,获得解析结果。
这种计算建立在数值完全准确表达和推演严格解析的基础上,所得结果一般是完全准确,而没有近似的。
一、实验目的:1.通过完成实验,掌握MATLAB的符号计算。
2.熟悉MATLAB 符号计算的极限、微分、积分、泰勒展式,代数方程、常微分方程求解等运算的命令,以及符号运算的基本运用。
3.了解符号运算和数值运算的特点、区别和优缺点二、实验内容1.使用sym或syms定义符号变量,求时下式的极限x=sym('x');%定义符号变量h=sym('h');y=(sin(h+x)-sin(x))/h;%给y赋符号变量值limit((sin(h+x)-sin(x))/h,h,0)ans =%求h——>0时y的极限2. 分解因式1) ,2) ,结果分别是几个式子相乘syms x y a b c z;y=factor(9*x^4-3*x^3+7*x^2-3*x-2)y =%分解因式,结果分别是三个因式相乘z=factor(a^3+b^3+c^3-3*a*b*c)z =3. 求函数在指定点()处的幂级数展开式,然后按照x-1的幂次排序,看看完全计算机结果是什么,如果手工会写成什么(只写计算机没写好的项)。
syms x;f=1/(x*(x+3));y=taylor(f,x,1)y =%对f符号表达式在x=1处进行泰勒级数展开collect(y,x-1)ans =4.,试求符号微分、,并化简-,化简式子说明什么,还记得吗?syms x y z;z=(x^2+y^2)*exp((x+y^2)/(x*y));diff(z,'x')ans =%对符号表达式z求关于x的导数diff(z,'y')ans =f=diff(diff(z,'y'),'x')-diff(diff(z,'x'),'y')f = 05. 求定积分syms x y;y=x/(sin(x))^2;f=int(y,x,pi/4,pi/3)f =%求定积分6. 求解1)代数方程,分别求y(x) 和x(y) ;2)方程组,其中x、y、z为未知自变量,、、为已知。
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。