用MATLAB解常微分方程
重要:MATLAB常微分方程(组)数值解法
Matlab常微分方程求解问题分类
边值问题:
初值问题:
• 定解附加条件在自变量 的一端
• 一般形式为: y' f (x, y)
y(a)
y0
• 初值问题的数值解法一 般采用步进法,如 Runge-Kutta法
➢ 在自变量两端均给定附加 条件
y' f (x, y)
➢ 一般形式:y(a)y1, y(b)y2
1.根据常微分方程要求的求解精度与速度要求
求解初值问题:
y
'
y
2x y
y ( 0 ) 1
(0x1)
比较ode45和ode23的求解精度和速度
ode45和ode23的比较-1
function xODE clear all clc
format long
y0 = 1; [x1,y1] = ode45(@f,[0,1],y0); [x2,y2] = ode23(@f,[0,1],y0); plot(x1,y1,'k-',x2,y2,'b--') xlabel('x') ylabel('y')
rD = k(3)*C(2)-k(5)*C(4);
rE = k(4)*C(3)+k(5)*C(4);
% Mass balances dCdt = [rA; rB; rC; rD; rE];
三个串联的CSTR等温反应器(例4-3)
function IsothermCSTRs clear all clc CA0 = 1.8; % kmol/m^3 CA10 = 0.4; % kmol/m^3 CA20 = 0.2; % kmol/m^3 CA30 = 0.1; % kmol/m^3 k = 0.5; % 1/min tau = 2; stoptime = 2.9; % min [t,y] = ode45(@Equations,[0 stoptime],[CA10 CA20 CA30],[],k,CA0,tau); disp(' Results:') disp(' t CA1 CA2 CA3') disp([t,y]) plot(t,y(:,1),'k--',t,y(:,2),'b:',t,y(:,3),'r-') legend('CA_1','CA_2','CA_3') xlabel('Time (min)') ylabel('Concentration') % -----------------------------------------------------------------function dydt = Equations(t,y,k,CA0,tau) CA1 = y(1); CA2 = y(2); CA3 = y(3); dCA1dt = (CA0-CA1)/tau - k*CA1; dCA2dt = (CA1-CA2)/tau - k*CA2; dCA3dt = (CA2-CA3)/tau - k*CA3; dydt = [dCA1dt; dCA2dt; dCA3dt];
matlab求解矩阵常微分方程
matlab求解矩阵常微分方程标题:基于Matlab的矩阵常微分方程求解导言:矩阵常微分方程是指微分方程中的未知函数为矩阵,常见于控制系统、信号处理、计算机图形学等领域。
Matlab作为一款功能强大的数学软件,提供了许多工具和函数用于求解矩阵常微分方程。
本文将介绍如何使用Matlab求解矩阵常微分方程的基本方法和步骤。
一、矩阵常微分方程的定义矩阵常微分方程可以写成如下形式:$$\frac{dX(t)}{dt} = A(t)X(t)$$其中,$X(t)$是未知函数矩阵,$A(t)$是已知函数矩阵。
二、Matlab中的矩阵常微分方程求解函数Matlab提供了几个函数用于求解矩阵常微分方程,其中最常用的是ode45函数。
ode45函数是基于龙格-库塔法的数值求解器,可以高效地求解大多数常微分方程问题。
三、使用ode45函数求解矩阵常微分方程的步骤1. 定义矩阵常微分方程的参数和初始条件。
2. 编写一个函数,用于描述矩阵常微分方程的右端项。
3. 调用ode45函数,传入函数句柄和初始条件,求解矩阵常微分方程。
四、示例:求解矩阵常微分方程假设我们要求解如下矩阵常微分方程:$$\frac{dX(t)}{dt} = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} X(t)$$初始条件为$X(0) = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}$。
根据上述步骤,我们可以先定义矩阵常微分方程的参数和初始条件:```matlabA = [0 1; -1 0];X0 = [1 0; 0 1];```然后编写一个函数,用于描述矩阵常微分方程的右端项:```matlabfunction dXdt = matrixODE(t, X)A = [0 1; -1 0];dXdt = A * X;end```最后调用ode45函数求解矩阵常微分方程:```matlab[t, X] = ode45(@matrixODE, [0 10], X0);```其中,@matrixODE表示函数句柄,[0 10]表示求解时间范围。
matlab追赶法解常微分方程
研究领域:数学、计算机科学文章标题:深入探讨matlab追赶法解常微分方程在数学和计算机科学领域中,常微分方程是一个重要且广泛应用的课题。
而matlab追赶法作为常微分方程的求解方法,在实际应用中具有重要意义。
本文将以深度和广度兼具的方式,对matlab追赶法解常微分方程这一主题展开全面评估,并撰写一篇有价值的文章,同时结合个人观点和理解,为读者提供深刻的思考。
一、matlab追赶法解常微分方程简介1.1 matlab追赶法基本原理matlab追赶法,又称托马斯算法,是一种用于求解三对角线性方程组的方法。
在常微分方程的数值解法中,常常会遇到需要求解三对角线性方程组的情况,而matlab追赶法正是针对这一问题而提出的高效算法。
1.2 追赶法在常微分方程求解中的应用常微分方程在实际问题中有着广泛的应用,而求解常微分方程的过程中往往需要用到追赶法。
追赶法不仅可以提高计算效率,还可以有效地解决数值稳定性和精度的问题,因此在工程和科学计算中得到了广泛的应用。
二、深入探讨matlab追赶法解常微分方程2.1 算法实现及优化matlab追赶法的实现涉及到矩阵运算、追赶过程和追赶系数的求解等关键步骤。
如何针对不同类型的方程组进行算法优化,是一个需要深入探讨的问题。
通过优化算法,可以提高追赶法的计算效率和数值稳定性,使其在常微分方程求解中发挥更大的作用。
2.2 算法的数值分析通过数值分析,可以更加深入地了解matlab追赶法在解常微分方程过程中的数值特性。
包括收敛性、稳定性、误差分析等方面,这些都是影响算法性能和应用效果的重要因素,需要进行深入的研究和分析。
三、对matlab追赶法解常微分方程的个人观点和理解3.1 算法的优势与局限性matlab追赶法作为一种高效的求解算法,具有较好的稳定性和精度,特别适合于大规模的常微分方程求解。
但在某些特定问题上,追赶法的适用性和效率仍然存在局限性,需要进行合理的选择和应用。
matlab ode45 求解带积分的常微分方程
概述在工程和科学领域中,常微分方程是一种常见的数学建模工具。
其中,带积分的常微分方程更是一种需要特殊解法的方程形式。
MATLAB是一种功能强大的数学工具软件,而ode45是MATLAB中用于求解常微分方程的函数之一。
本文将详细介绍如何使用MATLAB中的ode45函数来求解带积分的常微分方程。
一、带积分的常微分方程简介带积分的常微分方程是指在微分方程中出现积分形式的项,通常表现为对某个函数进行积分。
这种形式的微分方程在工程和科学领域中有着广泛的应用,例如在电路分析、控制系统、生物学模型等领域中都能见到。
典型的带积分的常微分方程形式如下所示:y' = f(t,y) + ∫g(t,y)dt其中,y'表示y对自变量t的导数,f(t,y)为已知的函数,g(t,y)为未知的函数需要求解。
这种形式的微分方程要比普通的常微分方程更复杂,需要使用特定的求解方法来得到解析解或数值解。
二、MATLAB中的ode45函数介绍MATLAB是一种被广泛应用于科学计算和工程领域的数学软件工具,其中有丰富的数值计算函数库。
其中,用于求解常微分方程的ode45函数是应用较为广泛的函数之一。
ode45函数可以通过数值计算的方法来求解常微分方程的数值解,其基本调用格式如下:[t,y] = ode45(odefun,tspan,y0)其中,odefun是定义了微分方程的函数句柄,tspan是求解的时间范围,y0是初始条件。
ode45函数会返回微分方程在tspan范围内的数值解t和对应的y值。
三、使用MATLAB求解带积分的常微分方程对于带积分的常微分方程,我们需要将其转化为标准形式,然后利用MATLAB的ode45函数进行求解。
假设我们有如下形式的带积分的常微分方程:y' = f(t,y) + ∫g(t,y)dt我们将其转化为等价的无積分項的方程形式,例如∂F/∂t = f(t,y) + ∫g(t,y)dt我们可以利用MATLAB中的ode45函数来求解上述形式的微分方程。
常微分方程matlab程序
常微分方程MATLAB程序以下是一个简单的MATLAB 程序,用于求解一阶常微分方程:matlab复制代码% 定义微分方程 dy/dx = f(x, y)f = @(x, y) -x*y;% 初始条件 y(0) = 1y0 = 1;% 定义 x 的范围xspan = [0, 10];% 使用 MATLAB 内置函数 ode45 进行求解[t, y] = ode45(f, xspan, y0);% 绘制解的图形plot(t, y(:,1));xlabel('x');ylabel('y');title('Solution of the differential equation dy/dx = -xy');在这个程序中,我们定义了一个一阶常微分方程dy/dx = -xy,并使用MATLAB 内置函数ode45进行求解。
初始条件为y(0) = 1,求解范围为xspan = [0, 10]。
最后,我们使用plot函数绘制了解的图形。
这个程序是用来求解一阶常微分方程的,而这个方程是dy/dx = -xy。
这是一个简单的线性方程,但它的解在物理和工程中有许多实际应用。
接下来,我们逐行解释一下代码:1.% 定义微分方程 dy/dx = f(x, y):这是一个注释,说明下面的代码是定义微分方程。
2. f = @(x, y) -x*y;:这行定义了一个匿名函数f,它接受两个参数x和y,并返回-x*y。
这个函数就是我们的微分方程dy/dx的右边部分。
3.% 初始条件 y(0) = 1:这是一个注释,说明下面的代码是定义初始条件。
4.y0 = 1;:这行定义了初始条件y(0) = 1,也就是说当x=0时,y=1。
5.% 定义 x 的范围:这是一个注释,说明下面的代码是定义自变量x的范围。
6.xspan = [0, 10];:这行定义了自变量x的范围从0到10。
7.% 使用 MATLAB 内置函数 ode45 进行求解:这是一个注释,说明下面的代码将使用MATLAB 的内置函数ode45来求解微分方程。
matlab_常微分方程数值解法
dt 2
简朴问题可以求得解析解,多数实际问题靠数值求解 。
第4页
一阶常微分方程(ODE )初值问题 : ODE :Ordinary Differential Equation
dy
f
(x,
y)
dx
x0 x xn
y(x0 ) y0
数值解法就是求y(x)在某些分立旳节点 xn 上旳近似值 yn,用以近似y(xn)
x0
y0
x1 f y(x), x dx
x0
x2 f y(x), x dx
x1
y(x1) f y(x1), x1 h
第17页
同样,在[x0,xn+1] ,积分采用矩形近似,得:
y(xn1) y0
f xn1
x0
y(x), x dx
y(xn ) f y(xn ), xn h
yn y(xn )
第5页
2、欧拉近似办法
2.1 简朴欧拉(L.Euler, 1707-1783)办法。
dy
dx
f
(y, x)
y(x0 ) y0
欧拉数值算法就是由初值通过递推求解,递推求解
就是从初值开始,后一种函数值由前一种函数值得到。核 心是构造递推公式。
y0 y1 y2 yn
第6页
i 1,2,...
第36页
没有一种算法可以有效地解决所有旳 ODE 问题,因此 MATLAB 提供了多种ODE函数。
函数 ODE类
特点
阐明
型
ode45
非刚性 单步法;4,5 阶 R-K 措施;合计 大部分场合旳首选措施
截断误差为 (△x)3
ode23
非刚性 单步法;2,3 阶 R-K 措施;合计 使用于精度较低旳情形
MATLAB常微分方程数值解——欧拉法、改进的欧拉法与四阶龙格库塔方法
MATLAB常微分⽅程数值解——欧拉法、改进的欧拉法与四阶龙格库塔⽅法MATLAB常微分⽅程数值解作者:凯鲁嘎吉 - 博客园1.⼀阶常微分⽅程初值问题2.欧拉法3.改进的欧拉法4.四阶龙格库塔⽅法5.例题⽤欧拉法,改进的欧拉法及4阶经典Runge-Kutta⽅法在不同步长下计算初值问题。
步长分别为0.2,0.4,1.0.matlab程序:function z=f(x,y)z=-y*(1+x*y);function R_K(h)%欧拉法y=1;fprintf('欧拉法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K=f(x,y);y=y+h*K;fprintf('欧拉法:x=%f, y=%f\n',x+h,y);endfprintf('\n');%改进的欧拉法y=1;fprintf('改进的欧拉法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K1=f(x,y);K2=f(x+h,y+h*K1);y=y+(h/2)*(K1+K2);fprintf('改进的欧拉法:x=%f, y=%f\n',x+h,y);endfprintf('\n');%龙格库塔⽅法y=1;fprintf('龙格库塔法:x=%f, y=%f\n',0,1);for i=1:1/hx=(i-1)*h;K1=f(x,y);K2=f(x+h/2,y+(h/2)*K1);K3=f(x+h/2,y+(h/2)*K2);K4=f(x+h,y+h*K3);y=y+(h/6)*(K1+2*K2+2*K3+K4);fprintf('龙格库塔法:x=%f, y=%f\n',x+h,y);end结果:>> R_K(0.2)欧拉法:x=0.000000, y=1.000000欧拉法:x=0.200000, y=0.800000欧拉法:x=0.400000, y=0.614400欧拉法:x=0.600000, y=0.461321欧拉法:x=0.800000, y=0.343519欧拉法:x=1.000000, y=0.255934改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=0.200000, y=0.807200改进的欧拉法:x=0.400000, y=0.636118改进的欧拉法:x=0.600000, y=0.495044改进的欧拉法:x=0.800000, y=0.383419改进的欧拉法:x=1.000000, y=0.296974龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=0.200000, y=0.804636龙格库塔法:x=0.400000, y=0.631465龙格库塔法:x=0.600000, y=0.489198龙格库塔法:x=0.800000, y=0.377225龙格库塔法:x=1.000000, y=0.291009>> R_K(0.4)欧拉法:x=0.000000, y=1.000000欧拉法:x=0.400000, y=0.600000欧拉法:x=0.800000, y=0.302400改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=0.400000, y=0.651200改进的欧拉法:x=0.800000, y=0.405782龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=0.400000, y=0.631625龙格库塔法:x=0.800000, y=0.377556>> R_K(1)欧拉法:x=0.000000, y=1.000000欧拉法:x=1.000000, y=0.000000改进的欧拉法:x=0.000000, y=1.000000改进的欧拉法:x=1.000000, y=0.500000龙格库塔法:x=0.000000, y=1.000000龙格库塔法:x=1.000000, y=0.303395注意:在步长h为0.4时,要将for i=1:1/h改为for i=1:0.8/h。
matlab数值求解常微分方程快速方法
MATLAB是一种用于科学计算和工程应用的高级编程语言和交互式环境。
它在数学建模、模拟和分析等方面有着广泛的应用。
在MATLAB 中,常微分方程的数值求解是一个常见的应用场景。
在实际工程问题中,通常需要对常微分方程进行数值求解来模拟系统的动态行为。
本文将介绍MATLAB中对常微分方程进行数值求解的快速方法。
1. 基本概念在MATLAB中,可以使用ode45函数来对常微分方程进行数值求解。
ode45是一种常用的Runge-Kutta法,它可以自适应地选取步长,并且具有较高的数值精度。
使用ode45函数可以方便地对各种类型的常微分方程进行求解,包括一阶、高阶、常系数和变系数的微分方程。
2. 函数调用要使用ode45函数进行常微分方程的数值求解,需要按照以下格式进行函数调用:[t, y] = ode45(odefun, tspan, y0)其中,odefun表示用于描述微分方程的函数,tspan表示求解的时间跨度,y0表示初值条件,t和y分别表示求解得到的时间序列和对应的解向量。
3. 示例演示为了更好地理解如何使用ode45函数进行常微分方程的数值求解,下面我们以一个具体的例子来进行演示。
考虑如下的一阶常微分方程:dy/dt = -2*y其中,y(0) = 1。
我们可以编写一个描述微分方程的函数odefun:function dydt = odefun(t, y)dydt = -2*y;按照上述的函数调用格式,使用ode45函数进行求解:tspan = [0 10];y0 = 1;[t, y] = ode45(odefun, tspan, y0);绘制出解曲线:plot(t, y);4. 高级用法除了基本的函数调用方式外,MATLAB中还提供了更多高级的方法来对常微分方程进行数值求解。
可以通过设定选项参数来控制数值求解的精度和稳定性,并且还可以对刚性微分方程进行求解。
5. 性能优化在实际工程应用中,常常需要对大规模的常微分方程进行数值求解。
matlab求解常微分方程
matlab求解常微分⽅程本⽂主要介绍matlab中求解常微分⽅程(组)的dsolve和ode系列函数,并通过例⼦加深读者的理解。
⼀、符号介绍D: 微分符号;D2表⽰⼆阶微分,D3表⽰三阶微分,以此类推。
⼆、函数功能介绍及例程1、dsolve 函数dsolve函数⽤于求常微分⽅程组的精确解,也称为常微分⽅程的符号解。
如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。
1)函数格式Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)其中,‘eq1,eq2,…’:表⽰微分⽅程或微分⽅程组;’cond1,cond2,…’:表⽰初始条件或边界条件;‘Name’:表⽰变量。
没有指定变量时,matlab默认的变量为t;2)例程例1.1(dsolve 求解微分⽅程)求解微分⽅程:dsolve('Dy=3*x^2','x')例1.2(加上初始条件)求解微分⽅程:例2(dsolve 求解微分⽅程组)求解微分⽅程组:由于x,y均为t的导数,所以不需要在末尾添加’t’。
2、ode函数在上⽂中我们介绍了dsolve函数。
但有⼤量的常微分⽅程,虽然从理论上讲,其解是存在的,但我们却⽆法求出其解析解,此时,我们需要寻求⽅程的数值解。
ode是Matlab专门⽤于解微分⽅程的功能函数。
该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。
不同类型有着不同的求解器,具体说明如下图。
其中,ode45求解器属于变步长的⼀种,采⽤Runge-Kutta算法;其他采⽤相同算法的变步长求解器还有ode23。
ode45表⽰采⽤四阶-五阶Runge-Kutta算法,它⽤4阶⽅法提供候选解,5阶⽅法控制误差,是⼀种⾃适应步长(变步长)的常微分⽅程数值解法,其整体截断误差为(Δx)^5。
解决的是Nonstiff(⾮刚性)常微分⽅程。
Matlab中解常微分方程的ode45
matlab ode45 解微分方程在用odesolver(ode45, ode15s, …)来解微分方程的时候,最基本的用法是:[t, y] = odesolver(odefun, tspan, y0);这里的odefun是待求的微分方程。
那么odefun中一般会含有多个系统参数,通常要通过改变参数来观察系统动态的变化。
那么如何在调用odesolver的时候传递参数呢?以前,我都是用全局变量的写法,将参数在主函数和子函数中分别都定义为global,这样做有一个弱点:针对系统不同,参数的表达与数量有变化的时候,程序通常要做变化,通用性不强。
那么最好是在调用的时候进行传递,方法如下:实际上很简单,就是将一切其他的参数都写在括号中就可以了!但是要注意的是:odesolver的第四个参数一定是options,也就是对微分方程添加补充功能的参数(类型为structure,要用odeset来定义),那么其他系统参数就只能从第五个参数写起。
也就是说,第四个参数不可以为空,一定要定义某种option加进去,或者用使用空白矩阵(placeholder)。
这样调用的时候格式就是:[t, y] = odesolver(odefun, tspan, y0, options, parameter1, parameter2);或者[t, y] = odesolver(odefun, tspan, y0, [], parameter1, parameter2);然后定义微分方程的时候也要有参数的地方:function dydt = odefun(t, y, parameter1, parameter2)dydt = [ eqn-1; eqn-2; …];就OK了。
另一种用法:[T,Y] = ode45(@(t,y) rigid(t,y,Lambda,Lami,Cs,ionization,Ed),[0 100],[PHI_0,E_0,M_0,Gma_0],options);Lambda,Lami,Cs,ionization,Ed是参数之前有声明t y是变量,[PHI_0,E_0,M_0,Gma_0],是初始值--------------------------------------------------function dy = rigid(t,y,Lambda,Lami,Cs,ionization,Ed)dy = zeros(4,1); % a column vectordy(1) = y(2);dy(2) = exp(y(1))-y(3)/y(4);dy(3)=Lambda*ionization/Cs*exp(y(1));dy(4) =-y(4)*Lambda/Lami-Lambda*ionization/Cs-y(2)/y(4)-Ed/y(4);~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~[t,H]=ode45('solitiontry1',tspan,h0,[],m1,epsinon)——————————————————————————————function solfi=solitiontry1(t,H,flag,m1,epsinon)%m1=1.15;y=(1-epsinon)*(1-exp(H))+epsinon*m1^2*(1-sqrt(1+2*H*m1^-2))+m 1^2*(1-sqrt(1-2*H*m1^-2));solfi=-sqrt(-2*y);;;注意前面两个函数之间的区别,第二个多了一股flag参数。
matlab 解常微分方程
matlab 解常微分方程Matlab是一种功能强大的数学软件,它提供了解常微分方程的工具和函数。
常微分方程是数学中的一种重要的方程类型,描述了各种物理、工程和生物现象的变化规律。
本文将介绍如何使用Matlab 解常微分方程,并通过具体的实例来说明其应用。
我们需要了解常微分方程的基本概念。
常微分方程是指一个函数的导数与自变量之间的关系方程。
常微分方程的解是该函数在给定初始条件下的解析解或数值解。
在Matlab中,我们可以使用ode45函数来求解常微分方程的数值解。
接下来,我们将以一个简单的一阶常微分方程为例来说明Matlab 的使用。
考虑以下的一阶常微分方程:dy/dx = x^2 - y我们将该方程转化为Matlab中的函数形式,并设定初始条件y(0) = 1。
代码如下:```matlabfunction dydx = myODE(x, y)dydx = x^2 - y;endxspan = [0 10];y0 = 1;[x, y] = ode45(@myODE, xspan, y0);plot(x, y)xlabel('x')ylabel('y')title('Solution of dy/dx = x^2 - y')```在上述代码中,我们首先定义了一个名为myODE的函数,该函数接受两个参数x和y,并返回dy/dx的值。
然后,我们使用ode45函数来求解该常微分方程的数值解。
最后,我们绘制了解的曲线图,并添加了相应的坐标轴标签和标题。
通过运行上述代码,我们可以得到常微分方程dy/dx = x^2 - y的数值解,并绘制出解的曲线图。
这个例子展示了Matlab解常微分方程的基本步骤和方法。
除了一阶常微分方程,Matlab还可以解决更高阶的常微分方程。
对于高阶常微分方程,我们可以将其转化为一组一阶常微分方程,并使用类似的方法来求解。
Matlab提供了一系列的函数和工具箱来处理不同类型的常微分方程,并提供了丰富的文档和示例来帮助用户理解和应用这些工具。
matlab迭龙格库塔法解常微分方程
一、介绍迭龙格-库塔法(Runge-Kutta method)是一种数值求解常微分方程(ODE)的常用方法。
它是由卡尔·迭龙格(Carl Runge)和马丁·威尔黑尔姆·库塔(Wilhelm Kutta)在20世纪初提出的,该方法以两位数值分析家的名字来命名。
二、简单描述迭龙格-库塔法是通过数值逼近的方式,来计算常微分方程的近似解。
它是一种显式求解方法,适用于解非线性常微分方程和具有较大阶数的常微分方程。
三、数学原理迭龙格-库塔法主要是通过将微分方程转化为差分方程,利用数值解的方式来逼近微分方程的解。
它是一种显式方法,通过不断迭代得到下一个时间步的近似解。
四、matlab中的应用在matlab中,可以使用ode45函数来调用迭龙格-库塔法求解常微分方程。
ode45函数是matlab中集成的一个函数,通过调用ode45函数,可以直接求解常微分方程的数值解。
五、实例演示下面通过一个简单的例子来演示如何使用matlab中的ode45函数来求解常微分方程。
我们考虑一个简单的一阶常微分方程:dy/dt = -y初始条件为y(0) = 1。
在matlab中,可以通过以下代码来求解该微分方程:```定义微分方程的函数function dydt = myode(t, y)dydt = -y;调用ode45函数求解[t, y] = ode45(myode, [0, 5], 1);plot(t, y);```运行以上代码,即可得到微分方程的数值解,并通过绘图来展示解的变化。
六、总结迭龙格-库塔法是一种常用的数值解常微分方程的方法,它在matlab中有较为方便的调用方式。
通过ode45函数,可以快速求解常微分方程的数值解,并通过绘图来展示结果。
希望本篇文章对读者有所帮助,谢谢阅读。
七、应用场景和优势在实际应用中,迭龙格-库塔法广泛应用于各种科学和工程领域,如物理学、化学、生物学、经济学等。
matlab解常微分方程组
matlab解常微分方程组(最新版)目录1.引言2.常微分方程组的概念3.MATLAB 解常微分方程组的方法4.示例:解二维常微分方程组5.结论正文一、引言常微分方程组在数学、物理、生物、化学等学科中有着广泛的应用。
随着计算机技术的发展,使用 MATLAB 求解常微分方程组已经成为了研究者们的常用方法。
本文将介绍如何使用 MATLAB 解常微分方程组。
二、常微分方程组的概念常微分方程组是指包含多个未知函数的微分方程组,其中每个方程的导数都是常数。
例如:x" + y" = 1x" - y" = 0三、MATLAB 解常微分方程组的方法MATLAB 提供了多种求解常微分方程组的函数,如 ode45、ode23 等。
下面以 ode45 为例,介绍如何使用 MATLAB 解常微分方程组。
1.创建 MATLAB 中的常微分方程组在 MATLAB 中,可以使用符号运算创建常微分方程组。
例如,上述二维常微分方程组可以表示为:eq = ["x" + "y" == 1;"x" - "y" == 0];2.使用 ode45 求解常微分方程组在 MATLAB 中,可以使用 ode45 函数求解常微分方程组。
该函数的用法如下:sol = ode45(@(t,x) eq, [0,10], x0);其中,eq 表示常微分方程组,[0,10] 表示时间区间,x0 表示初始条件。
3.显示解MATLAB 中的 plot3 函数可以显示三维图形,如下所示:plot3(sol(:,1), sol(:,2), sol(:,3));四、示例:解二维常微分方程组考虑以下二维常微分方程组:x" + y" = exp(-t)x" - y" = sin(t)按照上述方法,我们可以使用 MATLAB 求解该方程组。
matlab解常微分方程
matlab解常微分方程
Matlab是一种非常强大的数学软件,可以用来解决各种数学问题。
在工程、物理、生物学和其他科学领域中,常微分方程是一种非常重要的数学工具,用于模拟和解决许多问题。
使用Matlab可以方便地求解常微分方程。
Matlab提供了几种解常微分方程的函数,包括ode45、ode23、ode15s等。
这些函数可以解决一般常微分方程、刚性常微分方程、偏微分方程等。
使用这些函数可以简单地解决一些复杂的数学问题,并且可以快速地得到结果。
除了内置函数,Matlab还提供了一些工具箱,如Symbolic Math Toolbox和Partial Differential Equation Toolbox等。
这些工具箱提供了更高级的功能,可以用来求解更复杂的问题。
在使用Matlab解常微分方程时,需要了解一些数学知识,如常微分方程的基本概念、初值问题、边值问题、刚性问题等。
此外,还需要了解一些Matlab编程知识,如函数定义、变量赋值、循环、条件语句等。
总之,Matlab是一个非常强大的工具,可以用来解决各种数学问题,特别是常微分方程。
使用Matlab可以简单地解决一些复杂的数学问题,并且可以快速地得到结果。
- 1 -。
matlab求解常微分方程的准确解
matlab求解常微分方程的准确解使用Matlab求解常微分方程的准确解一、引言常微分方程是研究自然界现象和工程实际问题中常见的数学工具之一。
求解常微分方程的准确解对于理解问题的本质和性质具有重要意义。
本文将介绍如何使用Matlab来求解常微分方程的准确解,并通过具体的例子进行演示。
二、常微分方程的基本概念常微分方程是指包含未知函数及其导数的方程。
一般形式为:dy/dx = f(x,y)其中,y是未知函数,x是自变量,f(x,y)是已知函数。
常微分方程的解是指能够满足方程的函数y(x)。
三、Matlab的符号计算工具箱Matlab提供了符号计算工具箱,可以对方程进行符号计算。
通过符号计算工具箱,我们可以求解常微分方程的准确解。
四、使用Matlab求解常微分方程的步骤1. 定义未知函数和自变量。
在Matlab中,可以使用符号变量来定义未知函数和自变量。
2. 定义常微分方程。
使用符号变量来定义常微分方程。
3. 求解常微分方程。
使用dsolve函数来求解常微分方程的准确解。
4. 绘制准确解的图像。
使用ezplot函数来绘制准确解的图像。
五、具体例子假设我们要求解一阶线性常微分方程:dy/dx + y = x其中,y是未知函数,x是自变量。
1. 定义未知函数和自变量。
在Matlab中,可以使用符号变量来定义未知函数和自变量。
syms y(x)2. 定义常微分方程。
使用符号变量来定义常微分方程。
eqn = diff(y,x) + y == x3. 求解常微分方程。
使用dsolve函数来求解常微分方程的准确解。
sol = dsolve(eqn)4. 绘制准确解的图像。
使用ezplot函数来绘制准确解的图像。
ezplot(sol)六、总结本文介绍了如何使用Matlab求解常微分方程的准确解。
通过符号计算工具箱,我们可以方便地求解常微分方程,并得到准确解的图像。
使用Matlab求解常微分方程的准确解可以帮助我们更好地理解问题的本质和性质,并为进一步的分析和应用提供基础。
实验七用matlab求解常微分方程(最新整理)
实验七 用matlab 求解常微分方程一、实验目的:1、熟悉常微分方程的求解方法,了解状态方程的概念;2、能熟练使用dsolve 函数求常微分方程(组)的解析解;3、能熟练应用ode45\ode15s 函数分别求常微分方程的非刚性、刚性的数值解;4、掌握绘制相图的方法二、预备知识:1.微分方程的概念未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。
如果未知函数是一元函数,称为常微分方程。
常微分方程的一般形式为),,",',,()(=n y y y y t F 如果未知函数是多元函数,成为偏微分方程。
联系一些未知函数的一组微分方程组称为微分方程组。
微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。
若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为)()(')()(1)1(1)(t b y t a y t a y t a y n n n n =++++-- 若上式中的系数ni t a i ,,2,1),( =均与t 无关,称之为常系数。
2.常微分方程的解析解有些微分方程可直接通过积分求解.例如,一解常系数常微分方程1+=y dt dy可化为dt y dy=+1,两边积分可得通解为1-=tce y .其中c 为任意常数.有些常微分方程可用一些技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解.线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。
高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。
一阶常微分方程与高阶微分方程可以互化,已给一个n 阶方程),,",',()1()(-=n n y y y t f y 设)1(21,,',-===n n y y y y y y ,可将上式化为一阶方程组⎪⎪⎪⎩⎪⎪⎪⎨⎧====-),,,,(''''2113221n n nn y y y t f y yy y y y y反过来,在许多情况下,一阶微分方程组也可化为高阶方程。
matlab求解常微分方程
2*t)','x(0)=2,y(0)=0','t')
以上这些都是常微分方程的精确解法,也称为常微分方程的符号解。但是,我们知 道,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析 解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB 具有丰 富的函数,我们将其统称为 solver,其一般格式为:
例
4:求常微分方程组
⎧ ⎪⎪ ⎨ ⎪ ⎪⎩
dx dt dx dt
+ +
2x
dy dt
− +
dy dt
2y
= 10 cos = 4e−2t ,
t,
x =2 t=0
y =0
t=0 通解的MATLAB程序为:
[X,Y]=dsolve('Dx+2*x-Dy=10*cos(t),Dx+Dy+2*y=4*exp(-
用 matlab 求解常微分方程
在 MATLAB 中,由函数 dsolve()解决常微分方程(组)的求解问题,其具体格式如 下:
r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v') 'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,'v'是 独立变量,默认的独立变量是't'。 函数 dsolve 用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如 果有初始条件,则求出特解。
[T,Y]=solver(odefun,tspan,y0)
matlab求解二阶常微分方程
matlab求解二阶常微分方程一、引言常微分方程,即Ordinary Differential Equations(ODE),是一类重要的数学问题,它可以描述各种物理、化学等领域的问题。
特别是,对于二阶常微分方程,其本质上表示的是一种流体动力学的演变。
了解二阶常微分方程的解法是任何一个有关力学的仿真应用的基础,因此,选择合适的求解工具,以及详细的求解步骤,是获得完美求解结果的必要关键。
MATLAB(Matrix Laboratory)是一门强大的高级编程语言,既可以完成数值计算、程序设计、算法开发,科学可视化和数据分析实验,也可以解决复杂的数学问题,像是二阶常微分方程等。
遗憾的是,很多学习者由于缺乏计算机程序设计经验,目前并不能将MATLAB作为一种精确和强大的解决方案来处理二阶常微分方程问题。
考虑到二阶常微分方程在许多学习地方都有所应用,本文主要用于介绍用MATLAB求解二阶常微分方程的方法,帮助研究者更好地理解MATLAB,以及如何正确利用它来解决类似问题。
本文通过实例讨论,展示了利用MATLAB来求解二阶常微分方程的具体方法。
二、MATLAB的基础介绍MATLAB,即Matrix Laboratory,是一种高级编程语言,是由MathWorks Computer Company开发的一种独特的应用工具包。
它不仅可以用来完成数值计算,也可以作为一种编程语言来用于编写程序,而且它还拥有一些完善的工具,可以用来编译、执行和调试程序。
MATLAB是一个性能强大的计算和可视化软件,可以快速分析数据并创建显示效果非常好的图表。
它拥有一个丰富的函数库,具有很高的遍历和查找速度,可以很容易地实现复杂的数学操作和其他高级功能。
三、MATLAB求解二阶常微分方程在MATLAB面板中输入以下命令:syms x yD2y=diff(y,2);ode=D2y+9*y==x;dsolve(ode,y(0)==1,Dy(0)==2);此命令用来求出二阶常微分方程y”+9y=x的解(y(0)=1,y’(0)=2),其结果如下:-3*cos(3*x) + 5*sin(3*x) -3*exp(-3*x) + 2*x + 1以上计算过程中,syms 命令表示定义符号x,y,并通过diff 函数将其变成二阶常微分方程。
matlab解常微分方程
matlab解常微分⽅程1. ODE常微分⽅程ordinary differential equation的缩写,此种表述⽅式常见于编程,如MATLAB中Simulink求解器solver已能提供了7种微分⽅程求解⽅法:ode45(Dormand-Prince),ode23(Bogacki-Shampine),ode113(Adams),ode15s(stiff/NDF),ode23s(stiff/Mod. Rosenbrock),ode23t(mod.stiff/Trapezoidal),ode23tb(stiff/TR-BDF2)。
微分⽅程、微分⽅程组⾃标量 因变量 ⼀元 多元 函数 映射⼀元:只有⼀个因变量多元:有多个因变量导数 偏导:谁对谁的导数,因变量对⾃变量的导数,默认或缺省⾃变量为t 、x ?⼀元⽅程 多元⽅程 多元⽅程组 n个⽅程解n个未知量微分⽅程 ⼀阶 ⾼阶微分⽅程 ⼀阶微分⽅程组⼀阶常微分⽅程:Dx/dt + x = e^t⾼阶常微分⽅程:d^2x/dt^2+dx/dt+x=e^2t⼀阶微分⽅程组(多元):dy/dt+x=e^2tdx/dt+2y-x=e^t初始条件:dy/dt0=... dx/dt0=... y0=... x0=...可以解出:y=f(t)=.... x=f(t)=.... 两个⽅程解两个未知数(因变量)⼀个N阶(多元)微分⽅程可以写成(分解成)N个⼀阶微分⽅程(即微分⽅程组)如:x.. + 2x. -x = u令x.=x2; x=x1 则...微分⽅程的精确解: r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').数值解: [t,y]=solver('odefun',tspan,y0,options)1. 求精确解1.微分⽅程r=dsolve('eqn1','eqn2',...,'cond1','cond2',...,'var').该命令中可以⽤D表⽰微分符号,其中D2表⽰⼆阶微分,D3表⽰三阶微分,以此类推。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 求微分方程的解一、问题背景与实验目的实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)的数值解法(近似解).对微分方程(组)的解析解法(精确解),Matlab 有专门的函数可以用,本实验将作一定的介绍.本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍 Euler 折线法.二、相关函数(命令)及简介1.dsolve ('equ1','equ2',…):Matlab 求微分方程的解析解.equ1、equ2、…为方程(或条件).写方程(或条件)时用 Dy 表示y 关于自变量的一阶导数,用用 D2y 表示 y 关于自变量的二阶导数,依此类推.2.simplify(s ):对表达式 s 使用 maple 的化简规则进行化简. 例如: syms xsimplify(sin(x)^2 + cos(x)^2) ans=13.[r,how]=simple(s):由于 Matlab 提供了多种化简规则,simple 命令就是对表达式 s 用各种规则进行化简,然后用 r 返回最简形式,how 返回形成这种形式所用的规则.例如: syms x[r,how]=simple(cos(x)^2-sin(x)^2) r = cos(2*x) how = combine4.[T,Y] = solver(odefun,tspan,y 0) 求微分方程的数值解. 说明:(1) 其中的 solver 为命令 ode45、ode23、ode113、ode15s 、ode23s 、ode23t 、ode23tb 之一.(2) odefun 是显式常微分方程:⎪⎩⎪⎨⎧==00)(),(y t y y t f dt dy(3) 在积分区间 tspan =],[0f t t 上,从0t 到f t ,用初始条件0y 求解.(4) 要获得问题在其他指定时间点 ,210,,t t t 上的解,则令 tspan =],,,[,210f t t t t (要求是单调的).(5) 因为没有一种算法可以有效地解决所有的 ODE 问题,为此,Matlab 提供了多种求解器 Solver ,对于不同的ODE 问题,采用不同的Solver .(6) 要特别的是:ode23、ode45 是极其常用的用来求解非刚性的标准形式的一阶常微分方程(组)的初值问题的解的 Matlab 的常用程序,其中:ode23 采用龙格-库塔2 阶算法,用3 阶公式作误差估计来调节步长,具有低等的精度.ode45 则采用龙格-库塔4 阶算法,用5 阶公式作误差估计来调节步长,具有中等的精度.5.ezplot (x,y,[tmin,tmax]):符号函数的作图命令.x,y 为关于参数t 的符号函数,[tmin,tmax] 为 t 的取值范围.6.inline():建立一个内联函数.格式:inline('expr', 'var1', 'var2',…) ,注意括号里的表达式要加引号.例:Q = dblquad(inline('y*sin(x)'), pi, 2*pi, 0, pi)三、实验内容1. 几个可以直接用 Matlab 求微分方程精确解的例子:例1:求解微分方程22x xe xy dxdy-=+,并加以验证.求解本问题的Matlab 程序为:syms x y %line1 y=dsolve('Dy+2*x*y=x*exp(-x^2)','x') %line2 diff(y,x)+2*x*y-x*exp(-x^2) %line3 simplify(diff(y,x)+2*x*y-x*exp(-x^2)) %line4 说明:(1) 行line1是用命令定义x,y 为符号变量.这里可以不写,但为确保正确性,建议写上;(2) 行line2是用命令求出的微分方程的解:1/2*exp(-x^2)*x^2+exp(-x^2)*C1(3) 行line3使用所求得的解.这里是将解代入原微分方程,结果应该为0,但这里给出:-x^3*exp(-x^2)-2*x*exp(-x^2)*C1+2*x*(1/2*exp(-x^2)*x^2+exp(-x^2)*C1)(4) 行line4 用 simplify() 函数对上式进行化简,结果为 0, 表明)(x y y =的确是微分方程的解.例2:求微分方程0'=-+x e y xy 在初始条件e y 2)1(=下的特解,并画出解函数的图形.求解本问题的 Matlab 程序为: syms x yy=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x')ezplot(y)微分方程的特解为:y=1/x*exp(x)+1/x* exp (1) (Matlab 格式),即xe e y x+=,解函数的图形如图 1:图1例3:求微分方程组⎪⎪⎩⎪⎪⎨⎧=--=++035y x dt dy e y x dt dx t在初始条件0|,1|00====t t y x 下的特解,并画出解函数的图形.求解本问题的 Matlab 程序为: syms x y t[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=0','t') simple(x); simple(y);ezplot(x,y,[0,1.3]);axis auto微分方程的特解(式子特别长)以及解函数的图形均略. 2. 用ode23、ode45等求解非刚性的标准形式的一阶常微分方程(组)的初值问题的数值解(近似解).例4:求解微分方程初值问题⎪⎩⎪⎨⎧=++-=1)0(2222y xx y dx dy 的数值解,求解范围为区间[0, 0.5].fun=inline('-2*y+2*x^2+2*x','x','y'); [x,y]=ode23(fun,[0,0.5],1); x'; y';plot(x,y,'o-') >> x' ans =0.0000 0.0400 0.0900 0.1400 0.1900 0.2400 0.2900 0.3400 0.3900 0.4400 0.4900 0.5000 >> y'ans =1.0000 0.9247 0.8434 0.7754 0.7199 0.6764 0.6440 0.6222 0.6105 0.6084 0.6154 0.6179 图形结果为图 2.图2例 5:求解描述振荡器的经典的 Ver der Pol 微分方程.7,0)0(',1)0(,0)1(222====+--μμy y y dt dy y dty d 分析:令,,121dt dx x y x ==则.)1(,1221221x x x dtdx x dt dx --==μ 先编写函数文件verderpol.m :function xprime = verderpol(t,x) global mu;xprime = [x(2);mu*(1-x(1)^2)*x(2)-x(1)]; 再编写命令文件vdp1.m : global mu; mu = 7; y0=[1;0][t,x] = ode45('verderpol',[0,40],y0); x1=x(:,1);x2=x(:,2); plot(t,x1)图形结果为图3.图33. 用 Euler 折线法求解前面讲到过,能够求解的微分方程也是十分有限的.下面介绍用 Euler 折线法求微分方程的数值解(近似解)的方法.Euler 折线法求解的基本思想是将微分方程初值问题⎪⎩⎪⎨⎧==00)(),,(y x y y x f dxdy化成一个代数方程,即差分方程,主要步骤是用差商hx y h x y )()(-+替代微商dx dy,于是:⎪⎩⎪⎨⎧==-+)()),(,()()(00x y y x y x f h x y h x y k k k k 记)(,1k k k k x y y h x x =+=+,从而)(1h x y y k k +=+,则有1,,2,1,0).,(,),(1100-=⎪⎩⎪⎨⎧+=+==++n k y x hf y y h x x x y y k k k k k k 例 6:用 Euler 折线法求解微分方程初值问题⎪⎩⎪⎨⎧=+=1)0(,22y y x y dxdy 的数值解(步长h 取0.4),求解范围为区间[0,2].解:本问题的差分方程为1,,2,1,0).2),( ),(,,4.0,1,021100-=⎪⎪⎪⎩⎪⎪⎪⎨⎧+=+=+====++n k y x y y x f y x hf y y h x x h y x k k k k k k (其中: 相应的Matlab 程序见附录 1.数据结果为:0 1.0000 0.4000 1.4000 0.8000 2.1233 1.2000 3.1145 1.6000 4.4593 2.0000 6.3074图形结果见图4:图4特别说明:本问题可进一步利用四阶 Runge-Kutta 法求解,读者可将两个结果在一个图中显示,并和精确值比较,看看哪个更“精确”?(相应的 Matlab 程序参见附录 2).四、自己动手1. 求微分方程0sin 2')1(2=-+-x xy y x 的通解.2. 求微分方程x e y y y x sin 5'2''=+-的通解.3. 求微分方程组⎪⎪⎩⎪⎪⎨⎧=-+=++00y x dtdy y x dtdx在初始条件0|,1|00====t t y x 下的特解,并画出解函数()y f x =的图形. 4. 分别用 ode23、ode45 求上述第 3 题中的微分方程初值问题的数值解(近似解),求解区间为[0,2]t ∈.利用画图来比较两种求解器之间的差异.5. 用 Euler 折线法求解微分方程初值问题⎪⎩⎪⎨⎧=-=1)0(,12'32y y x y y 的数值解(步长h 取0.1),求解范围为区间[0,2].6. 用四阶 Runge-Kutta 法求解微分方程初值问题⎩⎨⎧=-=1)0(,cos 'y x e y y x 的数值解(步长h 取0.1),求解范围为区间[0,3].四阶 Runge-Kutta 法的迭代公式为(Euler 折线法实为一阶 Runge-Kutta 法):1,,2,1,0),()2,2()2,2(),()22(6,),(342312143211100-=⎪⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎪⎨⎧++=++=++==++++=+==++n k hL y h x f L L h y h x f L L h y h x f L y x f L L L L L hy y h x x x y y k k k k k k k k k k k k 相应的 Matlab 程序参见附录 2.试用该方法求解第5题中的初值问题. 7. 用 ode45 方法求上述第 6 题的常微分方程初值问题的数值解(近似解),从而利用画图来比较两者间的差异.五、附录附录 1:(fulu1.m)clearf=sym('y+2*x/y^2'); a=0; b=2; h=0.4;n=(b-a)/h+1; x=0; y=1;szj=[x,y];for i=1:n-1y=y+h*subs(f,{'x','y'},{x,y});x=x+h;szj=[szj;x,y];endszjplot(szj(:,1),szj(:,2))附录2:(fulu2.m)clearf=sym('y-exp(x)*cos(x)');a=0;b=3;h=0.1;n=(b-a)/h+1;x=0;y=1;szj=[x,y];for i=1:n-1l1=subs(f,{'x','y'},{x,y});l2=subs(f,{'x','y'},{x+h/2,y+l1*h/2});l3=subs(f,{'x','y'},{x+h/2,y+l2*h/2});l4=subs(f,{'x','y'},{x+h,y+l3*h});y=y+h*(l1+2*l2+2*l3+l4)/6;x=x+h;szj=[szj;x,y];endszjplot(szj(:,1),szj(:,2))。