matlab解微分方程:方向场

在微分方程中,常见的形式是:

x ′ = f ( x , t ) x'=f(x,t) x=f(x,t)
方向场的每一个矢量可以形象地刻画一阶微分方程的解。在方向场中的每个点处,都会出现一条其斜率等于通过该点的微分方程解的矢量。给定一个初值,微分方程对应一条curve曲线,点上的方向矢量和相切。

例子:解析解

d x d t = x − t 2 \frac{d x}{d t}=x-t^{2} dtdx=xt2

我们可以求得解析解:

x ( t ) = C e t + t 2 + 2 t + 2 x(t)=C e^{t}+t^{2}+2 t+2 x(t)=Cet+t2+2t+2

编写matlab代码:

clc 
clear
% 创建一个区域
[t,x] = meshgrid(-2:0.2:3,-1:0.2:2);
% 计算方向向量的斜率
slope = x - t.*t;
% find the length of the vector (1,slope)
length = sqrt(1 + slope .* slope);
% 绘制方向矢量
quiver(t,x,1./length,slope./length,0.5,'Color',	'#0072BD')
axis equal equal
hold on
% 给定不同的初值求解析解
tt = [-2:0.2:3];
for cval = -10:1:10
x_exact = cval * exp(tt) + tt.*tt + 2*tt + 2;
plot(tt,x_exact,'Color','#D95319')
end
xlim([-2,3]);
ylim([-1,2]);
xlabel('t','Fontsize',20)
ylabel('x','Fontsize',20)

在这里插入图片描述

例子:数值解

还是上面的这个方程,如果我们解不出解析解,那么我们就用数值解来算一下。

d x d t = f ( x , t ) = x − t 2 \frac{d x}{d t}=f(x,t)=x-t^{2} dtdx=f(x,t)=xt2

使用前向欧拉法的迭代方法:
x k + 1 = x k + h f ( x k , t k ) x_{k+1}=x_{k}+hf(x_k,t_k) xk+1=xk+hf(xk,tk)

clc 
clear
% 创建一个区域
[t,x] = meshgrid(-2:0.2:3,-1:0.2:2);
% 计算方向向量的斜率
slope = x - t.*t;
% find the length of the vector (1,slope)
length = sqrt(1 + slope .* slope);
% 绘制方向矢量
quiver(t,x,1./length,slope./length,0.5,'Color',	'#0072BD')
axis equal equal
hold on
% 给定不同的初值求数值解
tt = [-2:0.2:3];
t_step = 0.2;
k=1;
for x0 = linspace(0.5,2,15)
    x_numer(1) = x0;
    for t_numer = tt(1:end-1)
        k = k + 1;
        slope_numer = x_numer(k-1) - t_numer.*t_numer;
        x_numer(k) = x_numer(k-1) + slope_numer * t_step;
    end
    plot(tt,x_numer,'Color','#D95319');
    k=1;
end
xlim([-2,3]);
ylim([-1,2]);
xlabel('t','Fontsize',20)
ylabel('x','Fontsize',20)

在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用Matlab绘制微分方程方向,需要使用odefun函数定义微分方程的形式,并使用quiver函数绘制方向。 首先,我们需要在Matlab命令窗口中创建一个本地函数。本地函数的格式如下: function dxdt = odefun(t,x) dxdt = zeros(2,1); dxdt(1) = ...; % 第一个方程的微分项 dxdt(2) = ...; % 第二个方程的微分项 end 在函数的dxdt = ...;的地方,根据具体的微分方程形式定义两个方程的微分项。例如,若方程为 dx/dt = x + y,dy/dt = x - y,则可以写成: function dxdt = odefun(t,x) dxdt = zeros(2,1); dxdt(1) = x + x(2); dxdt(2) = x(1) - x(2); end 定义好微分方程形式后,可以使用quiver函数绘制方向。在Matlab命令窗口中输入以下代码: [t,x] = meshgrid(0:0.2:10, -2:0.2:2); % t范围为0到10,x范围为-2到2,间隔为0.2 dxdt = odefun(t,x); quiver(t,x,dxdt(1,:),dxdt(2,:)); % 绘制方向 以上代码会绘制出微分方程方向方向上的箭头表示在每个点的微分方程向量的方向。 注意,以上代码只是一个示例,具体的微分方程形式需要根据问题来确定。同时,要注意选择合适的t和x范围以及间隔,以便绘制出较为准确的方向。 ### 回答2: 要用Matlab绘制微分方程方向,可以按照以下步骤进行操作: 1. 定义微分方程:首先要定义待绘制的微分方程。例如,我们考虑一个一阶微分方程dy/dx = x^2 - y。 2. 创建网格点:利用meshgrid函数创建一个二维网格点的坐标矩阵(X, Y)。可以通过指定X和Y的范围,以及所需的网格密度来定义网格点。 3. 计算微分方程的斜率:利用已定义的微分方程,计算在每个网格点(X, Y)处的微分方程斜率。可以使用向量化的方法,将X和Y作为向量输入到微分方程中,然后得到所有网格点处的斜率。 4. 绘制方向:利用quiver函数,在X-Y平面上绘制方向。quiver函数可根据每个网格点处的坐标和斜率,绘制相应的箭头来表示方向。 5. 添加标题和坐标轴:添加标题和坐标轴说明,使图像更具可读性和可理性。 6. 显示方向:调用plot函数显示生成的方向图。 在Matlab中,可以按照以下代码实现上述步骤: ```matlab % 步骤1:定义微分方程 dydx = @(x, y) x.^2 - y; % 步骤2:创建网格点 [X, Y] = meshgrid(-5:0.5:5, -5:0.5:5); % 步骤3:计算微分方程的斜率 slope = dydx(X, Y); % 步骤4:绘制方向 quiver(X, Y, ones(size(slope)), slope); % 步骤5:添加标题和坐标轴 title('微分方程方向示例'); xlabel('X轴'); ylabel('Y轴'); % 步骤6:显示方向 axis tight; ``` 执行以上代码后,将会生成一个带有箭头的方向图,表示微分方程方向。箭头的方向显示了微分方程在每个点处的斜率方向。通过更改微分方程的定义和网格点的设置,可以绘制不同微分方程方向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值