小工具知识网

当前位置: 首页 > 行业知识 > 万物皆数学——用matlab求解二阶微分方程

行业知识

万物皆数学——用matlab求解二阶微分方程

2026-11-09 05:29:43 来源:互联网转载

一、背景

毕达哥拉斯的“万物皆数”哲学观点表达了一个理念,即宇宙万物都index.php/tags-653.html" >可以通过数学语言来描述,数是万物的本原。

勾股定理就是毕达哥拉斯提出,因此在西方勾股定理也被叫做毕达哥拉斯定理。

工科类的专业,越到后面越感觉到数学的重要性,无论是控制,计算机还是机器人专业,都需要很好的数学功底。

最近在做DMP相关的内容时,需要求解二阶微分方程,无奈早已把学的还给老师,可惜当时高数白考九十多分。但很感谢当时的高数老师于朝霞教授,讲课讲的真好,所以重新翻看同济大学编著的高等数学第六版教材的微分方程章节时,很快捡起来之前学过的内容。

现在有了matlab,不需要自己手算了,下面记录一下使用matlab求解二阶微分方程的过程。

Matlab版本:2023a

二、Matlab求解二阶常系数微分方程

1、问题描述

二阶常系数微分方程:

y ¨ + 10 y ˙ + 25 y = 250 (1) \begin{aligned} \ddot y+10\dot y+25y=250 \\ \end{aligned}\tag{1} y¨​+10y˙​+25y=250​(1)

二阶微分方程如果没有初始条件,其通解会含有两个任意常数,所以不能完全反应某一客观实物的规律。

这里设置初始条件为:

y ( 0 ) = 0 , y ˙ ( 0 ) = 0 (2) \begin{aligned} y(0)=0, &&\dot y(0)=0 \\ \end{aligned}\tag{2} y(0)=0,​​y˙​(0)=0​(2)

2、matlab求解微分方程,并绘制解的曲线
clear; close all; clc;% 定义符号变量syms x y(x);% 定义二阶微分方程eqn = diff(y, x, 2) + 10*diff(y, x) + 25*y == 250;% 设置初始条件initial_condition1 = y(0) == 0; % 初始值 y(0) = 0initial_condition2 = subs(diff(y), 0) == 0; % 初始导数值 y'(0) = 0% 求解微分方程sol = dsolve(eqn, [initial_condition1, initial_condition2]);% 显示解disp('解:');disp(sol);% 将解转换为函数句柄ySol = matlabFunction(sol);% 定义 x 范围x = linspace(0, 5, 100); % 这里的范围可以根据需要调整% 计算对应的 y 值y = ySol(x);% 绘制曲线图figure;a1 = subplot( 1, 1, 1 );hold( a1, 'on' );plot(a1, x, y, 'linewidth', 3, 'color', [0.0000, 0.4470, 0.7410] );xlabel('x');ylabel('y');title('二阶微分方程的解曲线');scatter( 0, ySol(0), 'filled', 'linewidth', 3, 'markerfacecolor', 'y', 'markeredgecolor', 'k'  );grid on;
3、matlab求解加速度函数,并绘制解的曲线

经过步骤2,其实我们得到的是位置和速度的关系,即解为:

y = − 10 e − 5 x − 50 x e − 5 x + 10 (2) \begin{aligned} y=-10e^{-5x}-50xe^{-5x}+10 \\ \end{aligned}\tag{2} y=−10e−5x−50xe−5x+10​(2)

有时我们还需要观察加速度和时间的关系。

因此对公式(2)求二阶导,得到加速度:

y ¨ = 250 e − 5 x − 1250 x e − 5 x (2) \begin{aligned} \ddot y=250e^{-5x}-1250xe^{-5x} \\ \end{aligned}\tag{2} y¨​=250e−5x−1250xe−5x​(2)

matlab里求解加速度与时间的关系,及画出曲线图:

clear; close all; clc;% 定义符号变量syms x;% 定义函数y = 10 - 50*x*exp(-5*x) - 10*exp(-5*x);% 计算二阶导数second_derivative = diff(y, x, 2);% 显示解disp('二阶导:');disp(second_derivative);% 将二阶导数转换为函数句柄second_derivative_func = matlabFunction(second_derivative);% 定义 x 范围x_values = linspace(0, 5, 100); % 这里的范围可以根据需要调整% 计算对应的二阶导数值y_second_derivative = second_derivative_func(x_values);% 绘制二阶导数曲线图figure;plot(x_values, y_second_derivative);xlabel('x');ylabel('y的二阶导数');title('y=5*exp(-5*x) + 25*x*exp(-5*x) + 10 的二阶导数曲线');grid on;

上一篇:服务器挑战码怎么用?

下一篇:云服务器怎么打开端口?