(完整版)Matlab学习系列15.数值计算—高数篇
Matlab中常用的数值计算方法

Matlab中常用的数值计算方法数值计算是现代科学和工程领域中的一个重要问题。
Matlab是一种用于数值计算和科学计算的高级编程语言和环境,具有强大的数值计算功能。
本文将介绍Matlab中常用的数值计算方法,包括数值积分、数值解微分方程、非线性方程求解和线性方程组求解等。
一、数值积分数值积分是通过数值方法来近似计算函数的定积分。
在Matlab中,常用的数值积分函数是'quad'和'quadl'。
'quad'函数可以用于计算定积分,而'quadl'函数可以用于计算无穷积分。
下面是一个使用'quad'函数计算定积分的例子。
假设我们想计算函数f(x) = x^2在区间[0, 1]上的定积分。
我们可以使用如下的Matlab代码:```f = @(x) x^2;integral = quad(f, 0, 1);disp(integral);```运行这段代码后,我们可以得到定积分的近似值,即1/3。
二、数值解微分方程微分方程是描述自然界各种变化规律的数学方程。
在科学研究和工程应用中,常常需要求解微分方程的数值解。
在Matlab中,可以使用'ode45'函数来求解常微分方程的数值解。
'ode45'函数是采用基于Runge-Kutta方法的一种数值解法。
下面是一个使用'ode45'函数求解常微分方程的例子。
假设我们想求解一阶常微分方程dy/dx = 2*x,初始条件为y(0) = 1。
我们可以使用如下的Matlab代码:```fun = @(x, y) 2*x;[x, y] = ode45(fun, [0, 1], 1);plot(x, y);```运行这段代码后,我们可以得到微分方程的数值解,并绘制其图像。
三、非线性方程求解非线性方程是指方程中包含非线性项的方程。
在很多实际问题中,我们需要求解非线性方程的根。
MATLAB数值计算分解

1-范数:║x║1=│x1│+│x2│+…+│xn│ 2-范数:║x║2=(│x1│^2+│x2│^2+…+│xn│^2)^1/2 ∞-范数:║x║∞=max(│x1│,│x2│,…,│xn│)
V=[-1,1/2,1]; v1=norm(V,1) v2=norm(V) vinf=norm(V,inf)
x1+2x2+3x3=5
x1+4x2+9x3=-2
x1+8x2+27x3=6 命令如下:
A=[1,2,3;1,4,9;1,8,27]; b=[5,–2,6]';
x=inv(A)*b 一般情况下,用左除比求矩阵的逆的方法更 有效,即x=A\b。
2 矩阵的秩
一个向量组的极大线形无关组的个数。
MATLAB中,求矩阵秩的函数是rank(A)。例如, 求例5.7中方程组系数矩阵D的秩,命令是:
2.3 多维矩阵
以三维矩阵为例,常用的方法有4种:
(1)对二维矩阵进行扩充得到三维矩阵。
(2)若干个同样大小的二维矩阵进行组合得到三维矩 阵。
(3)除产生单位矩阵的eye函数外,前面介绍的建立 矩阵的函数都可以延伸到三维矩阵。
(4)用cat函数构建多维矩阵。一般调用格式是:
cat(n,A1,A2,…,An)
例 产生5阶随机方阵A,其元素为[10,90] 区间的随机整数,然后判断A的元素是否 能被3整除。 (1) 生成5阶随机方阵A。
A=fix((90-10+1)*rand(5)+10) (2) 判断A的元素是否可以被3整除。
P=rem(A,3)==0
其他特殊矩阵函数
希尔伯特矩阵 hilb(n) 希尔伯特矩阵的逆矩阵 invhilb(n) 托普利兹矩阵 toeplitz(k,r)、 toeplitz(c) 友矩阵 compan(p) 生成多项式p的友矩阵,也就是 他的特征多项式是p; hadamard(k) 生成hadamard矩阵 hankel函数,生成hankel矩阵 magic(n),生成n×n的魔方矩阵 pascal函数,生成pascal矩阵 rosser,给出Rosser矩阵 vander(x),给出向量x的范德蒙矩阵 wilkinson(n),给出Wilkinson特征值测试矩阵
(完整版)Matlab学习系列15.数值计算—高数篇

15. 数值计算—高数篇一、求极限limit(f,x,a)——求极限 lim ()x af x →limit(f,x,a,'right')——求右极限 lim ()x af x +→limit(f,x,a,'left')——求左极限 lim ()x af x -→例1 求 2352lim sin 53x x x x→∞++代码:syms x;y=(3*x^2+5)/(5*x+3)*sin(2/x); limit(y,x,inf)运行结果:ans = 6/5注:Matlab 求二元函数的极限,是用嵌套limit 函数实现的,相当于求的是累次极限,需要注意:有时候累次极限并不等于极限。
例2 求 30lim 2x x xx a b +→⎛⎫+ ⎪⎝⎭代码:syms x a b;y=((a^x+b^x)/2)^(3/x); limit(y,x,0,'right')运行结果:ans = a^(3/2)*b^(3/2)二、求导diff(f,x,n)——求函数f 关于x 的n 阶导数,默认n=1例3 求1sin 1cos xy x+=+的1阶导数,并绘图代码:syms x a b;y=((a^x+b^x)/2)^(3/x); limit(y,x,0,'right')运行结果:y1 = cos(x)/(cos(x) + 1) + (sin(x)*(sin(x) + 1))/(cos(x) + 1)^2例4 设sin xyz e=,求2,,z z z x y x y∂∂∂∂∂∂∂代码:syms x y;z=exp(sin(x*y)); zx=diff(z,x) zy=diff(z,y)zxy=diff(zx,y) % 也等于diff(zy,x)-55510152025x(sin(x) + 1)/(cos(x) + 1)-505-20-15-10-50510152025xcos(x)/(cos(x) + 1) + (sin(x) (sin(x) + 1))/(cos(x) + 1)2运行结果:zx = y*exp(sin(x*y))*cos(x*y)zy = x*exp(sin(x*y))*cos(x*y)zxy = x*y*exp(sin(x*y))*cos(x*y)^2 + exp(sin(x*y))*cos(x*y)–x*y*exp(sin(x*y))*sin(x*y)三、求极值1. 一元函数极值[x0,min]=fminbnd(f, a, b)——返回函数f(x)在区间(a,b)上的极小值点和极小值例5求函数32=--+在区间(-2,4)上的极值()26187f x x x x代码:f=@(x) 2*x^3-6*x^2-18*x+7;g=@(x) -2*x^3+6*x^2+18*x-7;[x0,min]=fminbnd(f,-2,4)[x1,max]=fminbnd(g,-2,4)fplot(f,[-2,4]);运行结果:x0 = 3.0000 min = -47.0000x1 = -1.0000 max = -17.00002. 多元函数极值[X1,f1]=fminunc(f,X0)——处理连续情形[X1,f1]=fminsearch(f,X0)——可以处理不连续情形二者用法相同,返回极小值点和极小值,其中X 为初始点。
如何使用MATLAB进行数值计算

如何使用MATLAB进行数值计算使用MATLAB进行数值计算一、引言数值计算是现代科学与工程领域中不可或缺的一部分,它能够解决许多实际问题,包括求解方程、优化问题和模拟实验等。
而MATLAB作为一种功能强大的数值计算软件,被广泛应用于各个领域。
本文将介绍如何使用MATLAB进行数值计算,并结合实例进行说明。
二、MATLAB基础首先,我们需要了解MATLAB的基本操作和语法,以便能够熟练运用。
MATLAB使用矩阵和数组来存储和处理数据,因此,熟悉矩阵和数组操作是非常重要的。
MATLAB中的矩阵和数组是通过方括号来定义的,例如:A = [1 2 3; 4 5 6; 7 8 9]表示一个3x3的矩阵A,其中每个元素由空格或分号隔开。
我们可以使用括号或索引来访问矩阵中的元素。
例如,要访问矩阵A的第二行第三列的元素,可以使用A(2,3)。
MATLAB提供了大量内置的数学函数,包括算术运算、三角函数、指数和对数函数等。
这些函数可以直接应用于矩阵和数组,简化了数值计算的过程。
三、方程求解方程求解是数值计算中的一个重要任务,MATLAB提供了多种方法来求解方程,包括代数方法和数值方法。
1. 代数方法对于一些简单的方程,例如一元一次方程或二次方程,可以直接使用MATLAB内置的解方程函数进行求解。
例如,对于一元一次方程ax + b = 0,可以使用solve函数来求解。
代码示例:syms x;eqn = a*x + b == 0;sol = solve(eqn, x);其中,syms x;指定x为符号变量,eqn为方程表达式,sol为方程的解。
2. 数值方法对于一些复杂的方程,无法用解析方法求解。
这时,可以使用数值方法来近似求解。
MATLAB提供了多种数值求解方法,包括二分法、牛顿法和割线法等。
这些方法可以通过迭代逼近的方式求解方程的根。
代码示例:f = @(x) x^2 - 4;x0 = 2;x = fzero(f, x0);其中,f为方程的表达式,x0为初始猜测值,x为方程的根。
MATLAB中的数学计算方法详解

MATLAB中的数学计算方法详解在科学研究和工程领域中,数学计算方法的应用是不可避免的。
MATLAB作为一种强大的数学工具,提供了丰富的数学函数和算法,为用户提供了便捷的数学计算方式。
本文将详细介绍MATLAB中常用的数学计算方法,包括数值计算、符号计算以及优化算法等。
一、数值计算方法数值计算是MATLAB中应用最广泛的数学计算方法之一。
它通过将数值代入数学模型,利用数值逼近的方式求得近似解。
MATLAB提供了各种数值计算函数,如插值、积分、微分等。
下面我们将介绍其中几种常用的数值计算方法。
1. 插值方法插值是一种通过已知数据点来估计未知数据点的方法。
在MATLAB中,可以使用interp1函数实现一维数据的插值。
该函数支持多种插值方法,例如线性插值、样条插值等。
用户只需提供已知的数据点和插值点,即可得到插值结果。
2. 数值积分方法数值积分是计算定积分近似值的方法。
在MATLAB中,可以使用quad函数来进行一维定积分计算。
该函数采用自适应的数值积分算法,能够适应不同类型的函数。
用户只需提供被积函数和积分区间,即可得到积分结果。
3. 数值微分方法数值微分是计算函数导数的方法。
在MATLAB中,可以使用diff函数对函数进行数值微分。
该函数可以计算一阶和二阶导数,还支持多点数值微分和符号数值微分。
通过数值微分,可以方便地求得函数在给定点的导数近似值。
二、符号计算方法符号计算是指在计算过程中处理符号表达式而不是数值。
MATLAB的Symbolic Math Toolbox提供了强大的符号计算功能,可以进行代数操作、求解方程、求导、积分等。
下面我们将介绍几种常用的符号计算方法。
1. 代数操作在MATLAB中,可以使用符号计算功能进行代数操作,如多项式求解、多项式展开、多项式化简等。
通过定义符号变量和符号表达式,可以进行各种代数计算,方便用户进行复杂的代数操作。
2. 方程求解MATLAB的符号计算工具箱提供了solve函数用于求解方程。
matlab高等数学部分

matlab高等数学部分
MATLAB是一种强大的数学软件,它提供了许多高等数学领域的
功能和工具,包括微积分、线性代数、微分方程等。
在MATLAB中,
你可以使用各种内置函数和工具箱来解决高等数学中的各种问题。
以下是MATLAB在高等数学部分的一些应用和功能:
1.微积分,MATLAB提供了符号计算工具箱,可以进行符号计算,如求导、积分、极限等。
此外,MATLAB还提供了数值积分和微分方
程求解的函数,可以用来解决各种微积分相关的问题。
2.线性代数,MATLAB拥有强大的线性代数工具,可以进行矩阵
运算、线性方程组求解、特征值分解等操作。
你可以使用MATLAB来
进行矩阵运算、求解线性方程组、进行特征值分解等。
3.微分方程,MATLAB提供了ODE工具箱,可以用来求解各种常
微分方程和偏微分方程。
你可以使用MATLAB来进行数值求解、绘制
相图、分析稳定性等。
4.数值方法,MATLAB提供了各种数值方法的函数和工具箱,可
以用来解决高等数学中的各种数值计算问题,如数值积分、数值求
解微分方程、数值优化等。
总之,MATLAB在高等数学部分提供了丰富的功能和工具,可以
用来解决各种高等数学领域的问题。
无论是符号计算还是数值计算,MATLAB都能够帮助你进行高效、准确的数学建模和分析。
希望这些
信息能够帮助你更好地了解MATLAB在高等数学领域的应用。
MATLAB数值计算.doc

MATLAB数值计算第5章 MATLAB数值计算 MATLAB的数学计算,数值计算,符号计算其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。
注:数值计算有误差。
数值计算受到计算机所保留的有效位数的限制,因此每一次运算都会有一定的误差,重复的多次数值计算就可能会造成很大的累积误差。
5.1 矩阵和数组MATLAB最基本也是最重要的功能就是进行实数或复数矩阵的运算。
矩阵和数组的概念在MATLAB的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下: , 标量:是指1×1的矩阵,即为只含一个数的矩阵。
, 向量:是指1×n或n×1的矩阵,即只有一行或者一列的矩阵。
, 矩阵:是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,0×0矩阵为空矩阵([])。
, 数组:是指n维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。
5.1.1矩阵输入(前已讲“向量的输入”,相同~) (1) 矩阵元素应用方括号([])括住;(2) 每行内的元素间用逗号或空格隔开;(3) 行与行之间用分号或回车键隔开;(4) 元素可以是数值或表达式。
1. 通过显式元素列表输入矩阵c=[1 2;3 4;5 3*2] % [ ]表示构成矩阵,分号分隔行,空格分隔元素c =1 23 45 6用回车键代替分号分隔行:c=[1 23 45 6]1 23 45 612. 通过语句生成矩阵(1) 使用from:step:to方式生成向量(2) 使用linspace和logspace函数生成向量3. 由矩阵生成函数产生特殊矩阵MATLAB提供了很多能够产生特殊矩阵的函数,各函数的功能如表5.2所示。
表5.2 矩阵生成函数例子函数名功能输入结果zeros(2,3) zeros(m,n) 产生m×nans = 的全0矩 0 0 0 阵 0 0 0ones(2,3) ones(m,n) 产生m×nans = 的全1矩1 1 1 阵 1 1 1rand(2,3) rand(m,n) 产生均匀ans = 分布的随 0.9501 0.6068 0.8913 机矩阵,元 0.2311 0.4860 0.7621 素取值范围0.0,1.0。
MATLAB数值计算教程

MATLAB数值计算教程第一章:MATLAB入门1.1 MATLAB简介MATLAB(Matrix Laboratory)是一款强大的数值计算软件,广泛用于工程、科学和金融领域。
它的特点是简单易用、高效快速,并且拥有丰富的工具箱和函数库。
1.2 MATLAB环境搭建要使用MATLAB进行数值计算,首先需要安装MATLAB软件,并进行必要的配置。
通过官方网站下载安装程序,根据提示进行安装即可。
安装完成后,打开MATLAB环境,即可开始使用。
1.3 MATLAB基本操作在MATLAB环境中,可以通过命令行窗口输入和执行命令,也可以使用脚本文件进行批量处理。
常用的基本操作包括变量赋值、算术运算、函数调用等。
例如,使用"="符号赋值变量,使用"+"、"-"、"*"、"/"等符号进行算术运算。
第二章:向量和矩阵操作2.1 向量操作在MATLAB中,向量是一种特殊的矩阵,可以通过一组有序的元素构成。
向量可以进行基本的算术运算,如加法、减法、乘法、除法,还可以进行向量的点积、叉积等操作。
可以使用内置函数和运算符来实现。
2.2 矩阵操作矩阵是MATLAB中最常用的数据结构之一,使用矩阵可以进行多个向量的组合和运算。
可以进行矩阵的加法、减法、乘法、除法等操作,也可以进行矩阵的转置、求逆、求特征值等操作。
MATLAB提供了大量的函数和工具箱来支持矩阵的操作。
第三章:数值计算方法3.1 数值积分数值积分是一种用数值方法计算定积分的方法。
在MATLAB 中,可以使用内置函数来进行数值积分,如trapz函数和quad函数。
也可以使用Simpson法则、复合辛普森法等方法实现数值积分。
3.2 数值微分数值微分是一种用数值方法计算导数的方法。
在MATLAB中,可以使用内置函数进行数值微分,如diff函数和gradient函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15. 数值计算—高数篇一、求极限limit(f,x,a)——求极限 lim ()x af x →limit(f,x,a,'right')——求右极限 lim ()x af x +→limit(f,x,a,'left')——求左极限 lim ()x af x -→例1 求 2352lim sin 53x x x x→∞++代码:syms x;y=(3*x^2+5)/(5*x+3)*sin(2/x); limit(y,x,inf)运行结果:ans = 6/5注:Matlab 求二元函数的极限,是用嵌套limit 函数实现的,相当于求的是累次极限,需要注意:有时候累次极限并不等于极限。
例2 求 30lim 2x x xx a b +→⎛⎫+ ⎪⎝⎭代码:syms x a b;y=((a^x+b^x)/2)^(3/x); limit(y,x,0,'right')运行结果:ans = a^(3/2)*b^(3/2)二、求导diff(f,x,n)——求函数f 关于x 的n 阶导数,默认n=1例3 求1sin 1cos xy x+=+的1阶导数,并绘图代码:syms x a b;y=((a^x+b^x)/2)^(3/x); limit(y,x,0,'right')运行结果:y1 = cos(x)/(cos(x) + 1) + (sin(x)*(sin(x) + 1))/(cos(x) + 1)^2例4 设sin xyz e=,求2,,z z z x y x y∂∂∂∂∂∂∂代码:syms x y;z=exp(sin(x*y)); zx=diff(z,x) zy=diff(z,y)zxy=diff(zx,y) % 也等于diff(zy,x)-55510152025x(sin(x) + 1)/(cos(x) + 1)-505-20-15-10-50510152025xcos(x)/(cos(x) + 1) + (sin(x) (sin(x) + 1))/(cos(x) + 1)2运行结果:zx = y*exp(sin(x*y))*cos(x*y)zy = x*exp(sin(x*y))*cos(x*y)zxy = x*y*exp(sin(x*y))*cos(x*y)^2 + exp(sin(x*y))*cos(x*y)–x*y*exp(sin(x*y))*sin(x*y)三、求极值1. 一元函数极值[x0,min]=fminbnd(f, a, b)——返回函数f(x)在区间(a,b)上的极小值点和极小值例5求函数32=--+在区间(-2,4)上的极值()26187f x x x x代码:f=@(x) 2*x^3-6*x^2-18*x+7;g=@(x) -2*x^3+6*x^2+18*x-7;[x0,min]=fminbnd(f,-2,4)[x1,max]=fminbnd(g,-2,4)fplot(f,[-2,4]);运行结果:x0 = 3.0000 min = -47.0000x1 = -1.0000 max = -17.00002. 多元函数极值[X1,f1]=fminunc(f,X0)——处理连续情形[X1,f1]=fminsearch(f,X0)——可以处理不连续情形二者用法相同,返回极小值点和极小值,其中X 为初始点。
例6 求222(,)(1)100()f x y x y x =-+-的极小值代码:f=@(x) (1-x(1))^2+100*(x(2)-x(1)^2)^2; x0=[-5 -2];[x1,f1]=fminsearch(f,x0)运行结果:x1 = 1.0000 1.0000f1 = 2.7969e -010四、求不定积分与定积分1. 符号积分int(f,x)——求f(x)关于x 的不定积分01020int(f,x,a,b)——求f(x)关于x 的从a 到b 的定积分 例7 求积分2ln d x ax x -⎰和21ln d x a x x+∞-⎰ 代码:syms x a;int((log(x)-a)/x^2,x)int((log(x)-a)/x^2,x,1,inf)运行结果:ans = -(log(x) - a + 1)/x ans = 1 – a注:不定积分的结果是忽略任意常数C 的。
2. 二重积分可以化为累次积分,再用两次int 函数实现。
例8 求二重积分221(1)d d x y x y x y +≤++⎰⎰, 先化为累次积分:原式=11d )d x x y y -++⎰代码:syms x y;int(int(1+x+y,y,-sqrt(1-x^2),sqrt(1-x^2)),x,-1,1)运行结果:ans = pi3. 数值积分quad(f, a, b)——辛普森法定积分,默认误差为10-6,低精度的非光滑曲线计算中是最有效;quadl(f, a, b)——Lobatto 法定积分,在高精度的光滑曲线计算中更为高效;quad2d(f, a, b, c, d)——二重积分,其中f(x,y)为二元函数,[a, b]为x 的范围,[c(x), d(x)]为y 的范围; 例9 求1021ln 1d x x x-⎰代码:f=@(x) (log(x)-1)./x.^2; % 注意’.’不能忽略 y=quad(f,1,10)运行结果:y = -0.2303例10 用数值积分法求解例8.代码:quad2d(@(x,y) 1+x+y, -1, 1, @(x) -sqrt(1-x.^2), @(x) sqrt(1-x.^2), 'AbsTol', 1e-12) % 注意点运算运行结果:ans = 3.1416或者用两次quad 函数,中间需要用arrayfun 函数做向量值化处理,该方法可以推广到三重积分。
quad(@(x) arrayfun(@(xx) quad(@(y) 1+xx+y,-sqrt(1-xx.^2),sqrt(1-xx.^2)),x), -1,1)程序说明:先对f(x,y)关于y 从-sqrt(1-x.^2)到sqrt(1-x.^2)]做一次积分,为了后面使用变量名x ,这里先用xx ,得到一个关于xx 的函数(只能接受自变量为标量xx ):quad(@(y) 1+xx+y, -sqrt(1-xx.^2),sqrt(1-xx.^2))然后用arrayfun 函数把上一步得到的xx 的函数,处理成能接受向量值x (是个x 的函数):@(x)arrayfun(@(xx)quad(@(y) 1+xx+y, -sqrt(1-xx.^2),sqrt(1-xx.^2)), x)最后,再关于x 做一次积分。
五、泰勒级数、傅里叶级数展开taylor(f,n,x,a)——将函数f(x)在x=a 点处展开为n -1阶泰勒级数 fseries(f,x,n,a,b)——将函数f(x)在区间(a,b)展开n 项傅里叶级数 注:Matlab 未提供傅里叶级数展开函数,fseries 函数来自论坛。
例11 求()10af x x =-在x=4处展开到2阶泰勒式,2()g x x x =+在[,]ππ-的傅里叶展开。
代码:syms a x; f=a/(x-10);y1=taylor(f,3,x,4) g=x^2+x;[an,bn,f]=fseries(g,x,3,-pi,pi)运行结果:y1 = - a/6 - (a*(x - 4))/36 - (a*(x - 4)^2)/216 an = [ (2*pi^2)/3, -4, 1, -4/9] bn = [ 2, -1, 2/3]f = cos(2*x) - (4*cos(3*x))/9 - sin(2*x) + (2*sin(3*x))/3 - 4*cos(x) + 2*sin(x) + pi^2/3六、求级数symsum(f, k, m,n)——()nk mf k =∑例12 求级数121(1)(1)n n n +∞=-+∑ syms n;symsum((-1)^(n+1)/(n+1)^2,n,1,inf)运行结果:ans = 1 - pi^2/12七、代数方程1. 求代数方程的解析解solve(‘eq1’,’eq2’,…,’var1’,’var2’,…)例13 解方程20ax bx c ++=的x 和b ,以及方程组1115x y x y +=⎧⎨-=⎩代码:syms a b c x;solve('a*x^2+b*x+c','x') solve('a*x^2+b*x+c','b')[x,y]=solve('x+y=1','x-11*y=5','x','y')运行结果:ans = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a) ans = -(a*x^2 + c)/x x = 4/3 y = -1/32. 非线性方程(组)数值解fsolve(f,x0)——求方程f(x)=0在x0附近的近似解,也可以解方程组 注:一元连续函数的根,可以用fzero(f,x0)例14 求解方程0x x e --=。
代码:f=@(x) x-exp(-x); x1=fsolve(f,0)运行结果:x1 = 0.5671例15 求解方程组 2020x yx y e x y e --⎧--=⎨-+-=⎩ 代码:F=@(x) [2*x(1)-x(2)-exp(-x(1)); -x(1)+2*x(2)-exp(-x(2))]; [x,fval]=fsolve(F,[-5;-5])运行结果:x = 0.56710.5671fval = 1.0e -006 * -0.4059 -0.4059 八、常微分方程(组)1. 求解析解dsolve(‘eq1’,’eq2’,…,’cond1’,’cond2’,…,’t’)默认自变量为t ,cond1,2…为初值条件,若有足够初值条件,则得到特解;否则得到通解。
若解不出解析解,只能用ode23或ode45求数值解。
用Dy, D2y,…表示','',...y y ;用D2y(e)=a 表示''()|x e y x a ==. 例16 求解微分方程 2''''0y y y -=代码:y1=dsolve('y*D2y-Dy^2=0','x')运行结果:y1 = C4exp(C3 - C2*x) (注:两个解)例17 求解微分方程组 020d d 210cos , |2d d d d 24, |0d d t t t xy x t x t tx y y e y t t=-=⎧--==⎪⎪⎨⎪++==⎪⎩代码:[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t)','Dx+Dy+2*y=4*exp(-2*t)','x(0)=2','y(0)=0')运行结果:X = 4*cos(t) - 2/exp(2*t) + 3*sin(t) - (2*sin(t))/exp(t) Y = sin(t) - 2*cos(t) + (2*cos(t))/exp(t)2. 求数值集(利用求解器)实际问题中,许多常微分方程(组)是求不出解析解的,Matlab 提供了多个求数值集的求解器solver.调用格式:[T,X]=solver(odefun, tspan, X0)其中,tspan 为求解区间;X 0为初值条件向量;先改写高阶微分方程()(,',...,,)0n F y y y t =做变量代换处理:令(1)12,',...,n n y y y y y y -===,得到'11'22'(,)(,)'(,)nn f t Y y f t Y y Y f t Y y ⎛⎫⎛⎫ ⎪ ⎪ ⎪ ⎪== ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭M M , 120(1)(0)(0)(0)'(0)(0)(0)n n y y y y Y y y -⎛⎫⎛⎫ ⎪ ⎪ ⎪ ⎪== ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭M M 例18 求解描述振荡器的经典Ver der Pol 微分方程(取7μ=):222d d (1)0d d y y y y t tμ--+=, (0)1y =, '(0)0y = 做变量代换处理,12d ,d y x y x t==,则 1222121d d d 7(1)d x x t x x x x t ⎧=⎪⎪⎨⎪=--⎪⎩代码:先编写VDP.m 函数function fy=VDP(t,x)fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)];end主程序:Y0=[1;0];[t,x]=ode45('VDP',[0,40],Y0);y=x(:,1);dy=x(:,2);plot(t,y,t,dy); legend('y','y''');运行结果:注:想得到解y(t)在t0处的值,可以[t,x]=ode45('VDP',[0,t0],Y0);y=x(:,1);y(end) 0510152025303540-15-10-551015。