数学建模基础:非线性模型

目录

前言

一、非线性方程组

二、非线性规划

三、微分方程模型

四、非线性模型的应用

五、实例示范:传染病传播模型

实例总结

五、总结


前言

非线性模型用于描述变量之间的非线性关系,相比线性模型,其数学形式更为复杂,但可以更准确地描述实际问题。非线性模型在工程、经济、科学研究等领域有广泛应用。本文将详细介绍非线性方程组、非线性规划、微分方程模型及其应用。

一、非线性方程组

非线性方程组是多个变量的非线性方程组合,其求解通常比较复杂,需要使用数值方法。Matlab 提供了 fsolve 函数用于求解非线性方程组。

  1. 求解非线性方程组
    • 假设我们有以下非线性方程组:
Matlab 复制代码
    % 定义非线性方程组
    fun = @(x) [x(1)^2 + x(2)^2 - 1; exp(x(1)) + x(2) - 2];
    
    % 初始猜测值
    x0 = [0, 0];
    
    % 求解非线性方程组
    [x, fval] = fsolve(fun, x0);

以下表格总结了求解非线性方程组的常用方法:

方法 示例 说明
fsolve [x, fval] = fsolve(fun, x0); 使用 fsolve 函数求解
二、非线性规划

非线性规划用于求解目标函数或约束条件为非线性的问题。常见求解方法包括梯度下降法、信赖域方法等。Matlab 提供了 fminuncfmincon 等函数用于求解非线性规划问题。

  1. 求解非线性规划(无约束)
    • 假设我们需要最小化以下目标函数:
Matlab 复制代码
    % 定义目标函数
    fun = @(x) x(1)^2 + x(2)^2 - cos(2*pi*x(1)) - cos(2*pi*x(2));
    
    % 初始猜测值
    x0 = [0, 0];
    
    % 求解无约束非线性规划问题
    [x, fval] = fminunc(fun, x0);
  1. 求解非线性规划(有约束)
    • 假设我们需要最小化以上目标函数,同时约束条件为 。
Matlab 复制代码
    % 定义目标函数
    fun = @(x) x(1)^2 + x(2)^2 - cos(2*pi*x(1)) - cos(2*pi*x(2));
    
    % 定义非线性约束
    nonlcon = @(x) deal([], x(1)^2 + x(2)^2 - 1);
    
    % 初始猜测值
    x0 = [0, 0];
    
    % 求解有约束非线性规划问题
    options = optimoptions('fmincon', 'Display', 'iter');
    [x, fval] = fmincon(fun, x0, [], [], [], [], [], [], nonlcon, options);

以下表格总结了求解非线性规划的常用方法:

方法 示例 说明
fminunc [x, fval] = fminunc(fun, x0); 求解无约束非线性规划问题
fmincon [x, fval] = fmincon(fun, x0, [], [], [], [], [], [], nonlcon); 求解有约束非线性规划问题
三、微分方程模型

微分方程用于描述系统的动态行为,广泛应用于物理、化学、生物等领域。常见的微分方程模型包括常微分方程(ODE)和偏微分方程(PDE)等。

  1. 常微分方程
    • 常微分方程描述一个或多个自变量的函数及其导数之间的关系。Matlab 提供了 ode45ode23 等函数用于求解常微分方程。
Matlab 复制代码
    % 定义常微分方程
    dydt = @(t, y) t * y;
    
    % 求解常微分方程
    [t, y] = ode45(dydt, [0, 2], 1);
    
    % 绘制结果
    plot(t, y);
    title('Solution of ODE');
    xlabel('t');
    ylabel('y');
    grid on;
  1. 偏微分方程
    • 偏微分方程描述多个自变量的函数及其偏导数之间的关系。Matlab 提供了 pdepe 函数用于求解偏微分方程。
Matlab 复制代码
    % 定义偏微分方程
    m = 0;
    pdefun = @(x, t, u, DuDx) DuDx;   % PDE
    icfun = @(x) sin(pi * x);         % Initial conditions
    bcfun = @(xl, ul, xr, ur, t) [ul; ur]; % Boundary conditions
    
    % 求解偏微分方程
    x = linspace(0, 1, 20);
    t = linspace(0, 2, 20);
    sol = pdepe(m, pdefun, icfun, bcfun, x, t);
    
    % 绘制结果
    surf(x, t, sol);
    title('Solution of PDE');
    xlabel('x');
    ylabel('t');
    zlabel('u');

以下表格总结了求解微分方程的常用方法:

方法 示例 说明
ode45 [t, y] = ode45(dydt, [0, 2], 1); 求解常微分方程
pdepe sol = pdepe(m, pdefun, icfun, bcfun, x, t); 求解偏微分方程
四、非线性模型的应用

非线性模型在实际应用中发挥了重要作用,以下是几个典型应用示例:

  1. 人口增长模型
    • 使用 Logistic 增长模型描述人口增长。
Matlab 复制代码
    % Logistic 增长模型
    r = 0.1;  % 增长率
    K = 1000; % 环境承载力
    P0 = 100; % 初始人口
    t = 0:0.1:20; % 时间
    P = K ./ (1 + (K/P0 - 1) * exp(-r * t)); % Logistic 公式
    
    % 绘制结果
    plot(t, P);
    title('Logistic Growth Model');
    xlabel('Time');
    ylabel('Population');
    grid on;
  1. 传染病模型
    • 使用 SIR 模型描述传染病传播。
Matlab 复制代码
    % SIR 模型
    beta = 0.3;  % 传染率
    gamma = 0.1; % 治愈率
    S0 = 999;    % 初始易感者人口
    I0 = 1;      % 初始感染者人口
    R0 = 0;      % 初始治愈者人口
    N = S0 + I0 + R0; % 总人口
    
    % 定义 SIR 模型
    sir_model = @(t, y) [-beta * y(1) * y(2) / N; beta * y(1) * y(2) / N - gamma * y(2); gamma * y(2)];
    
    % 求解 SIR 模型
    [t, y] = ode45(sir_model, [0, 100], [S0, I0, R0]);
    
    % 绘制结果
    plot(t, y);
    title('SIR Model');
    xlabel('Time');
    ylabel('Population');
    legend('Susceptible', 'Infected', 'Recovered');
    grid on;
  1. 物理系统模拟
    • 使用单摆模型模拟物体运动。
Matlab 复制代码
    % 单摆模型
    g = 9.81;  % 重力加速度 (m/s^2)
    L = 1.0;   % 摆长 (m)
    theta0 = pi / 6;  % 初始角度 (弧度)
    omega0 = 0;  % 初始角速度 (rad/s)
    
    % 定义单摆微分方程
    pendulum_ode = @(t, y) [y(2); - (g / L) * sin(y(1))];
    
    % 求解单摆模型
    [t, y] = ode45(pendulum_ode, [0, 10], [theta0, omega0]);
    
    % 绘制结果
    plot(t, y(:,1));
    title('Pendulum Simulation');
    xlabel('Time (s)');
    ylabel('Angle (rad)');
    grid on;

单摆模型结果如下所示:

  1. 金融模型
    • 使用非线性模型描述期权定价问题,例如著名的 Black-Scholes 模型。
Matlab 复制代码
    % Black-Scholes 模型
    S = 100;  % 当前股票价格
    K = 100;  % 期权执行价格
    r = 0.05; % 无风险利率
    T = 1;    % 到期期限 (年)
    sigma = 0.2;  % 波动率

    % 定义期权定价公式
    d1 = (log(S / K) + (r + sigma^2 / 2) * T) / (sigma * sqrt(T));
    d2 = d1 - sigma * sqrt(T);

    % 计算欧式看涨期权价格
    C = S * normcdf(d1) - K * exp(-r * T) * normcdf(d2);
    
    disp(['European Call Option Price: ', num2str(C)]);

Black-Scholes 模型的结果将显示期权的价格:

Matlab 复制代码
    European Call Option Price: 10.45
  1. 环境科学
    • 使用非线性模型预测环境污染物的浓度变化。例如,使用 Michaelis-Menten 方程描述酶促反应速率。
Matlab 复制代码
    % Michaelis-Menten 方程参数
    Vmax = 1.5;  % 最大反应速率
    Km = 0.5;    % 米氏常数
    
    % 底物浓度 (μM)
    S = 0:0.1:10;
    
    % 计算反应速率
    v = (Vmax * S) ./ (Km + S);
    
    % 绘制结果
    plot(S, v);
    title('Michaelis-Menten Kinetics');
    xlabel('Substrate Concentration (μM)');
    ylabel('Reaction Rate (μM/min)';
    grid on;

下表总结了非线性模型的典型应用领域及相应的 Matlab 操作:

应用领域 说明 示例函数
人口增长模型 使用 Logistic 增长模型描述人口增长 exp, plot
传染病模型 使用 SIR 模型描述传染病传播 ode45, plot
物理系统模拟 使用单摆模型模拟物体运动 ode45, plot
金融模型 使用 Black-Scholes 模型定价期权 normcdf, disp
环境科学 使用 Michaelis-Menten 方程描述酶促反应速率 plot
五、实例示范:传染病传播模型

为了更好地理解非线性模型,我们通过一个实例展示 SIR 模型在传染病传播中的应用。

假设我们需要模拟某传染病在一个1000人的社区内的传播情况,初始状态下有1个感染者,999个易感者。我们假设传染率()为0.3,治愈率()为0.1。
7. 定义模型参数
8.

Matlab 复制代码
    beta = 0.3;   % 传染率
    gamma = 0.1;  % 治愈率
    S0 = 999;     % 初始易感者人口
    I0 = 1;       % 初始感染者人口
    R0 = 0;       % 初始治愈者人口
    N = S0 + I0 + R0;  % 社区总人口数
  1. 定义 SIR 模型
复制代码
```Matlab
    sir_model = @(t, y) [
        -beta * y(1) * y(2) / N;  % 易感者变化率
        beta * y(1) * y(2) / N - gamma * y(2);  % 感染者变化率
        gamma * y(2)  % 治愈者变化率
    ];
```
  1. 求解微分方程
复制代码
```Matlab
    % 定义求解时间范围
    tspan = [0, 100];
    % 初始条件
    y0 = [S0, I0, R0];
    % 求解 SIR 模型
    [t, y] = ode45(sir_model, tspan, y0);
```
  1. 可视化结果
复制代码
```Matlab
    % 绘制结果
    plot(t, y);
    title('SIR Model of Infectious Disease Spread');
    xlabel('Time');
    ylabel('Population');
    legend({'Susceptible', 'Infected', 'Recovered'}, 'Location', 'Best');
    grid on;
```

###### 实例总结

通过上述实例,我们展示了非线性模型在传染病传播中的应用,并通过 Matlab 进行了建模、求解和仿真。以下是该模型应用的总结:

|   步骤   |           说明            |                      示例                      |
|--------|-------------------------|----------------------------------------------|
| 定义模型参数 | 定义传染率、治愈率和初始状态          | `beta = 0.3; gamma = 0.1; S0 = 999; I0 = 1;` |
| 定义模型   | 定义 SIR 模型               | `sir_model = @(t, y) [...];`                 |
| 求解微分方程 | 使用 `ode45` 求解微分方程       | `[t, y] = ode45(sir_model, tspan, y0);`      |
| 可视化结果  | 绘制易感者、感染者和治愈者人口随时间变化的曲线 | `plot(t, y); title(...); xlabel(...);`       |

#### 五、总结

本文详细介绍了非线性模型及其在实际中的应用,包括非线性方程组、非线性规划、微分方程模型及其应用领域。通过实际案例,我们演示了如何使用 Matlab 建立和求解非线性模型,如人口增长模型、传染病模型、物理系统模拟和金融模型等。

使用非线性模型可以更准确地描述和预测复杂系统的行为,掌握这些工具和方法将大大提高我们在科学研究和工程实践中的建模能力和决策水平。

下表总结了非线性模型的基础知识和应用领域:

|    模型类型    |             说明              |                         示例函数                         |
|------------|-----------------------------|------------------------------------------------------|
| 非线性方程组     | 用于求解多个变量的非线性方程              | `fsolve(fun, x0);`                                   |
| 非线性规划(无约束) | 用于求解无约束非线性优化问题              | `fminunc(fun, x0);`                                  |
| 非线性规划(有约束) | 用于求解有约束非线性优化问题              | `fmincon(fun, x0, [], [], [], [], [], [], nonlcon);` |
| 常微分方程      | 用于描述系统的动态行为,通过ODE求解         | `ode45(dydt, tspan, y0);`                            |
| 偏微分方程      | 用于描述多个变量的动态行为,通过PDE求解       | `pdepe(m, pdefun, icfun, bcfun, x, t);`              |
| 人口增长模型     | Logistic增长模型描述人口增长          | `plot(t, P);`                                        |
| 传染病模型      | SIR 模型描述传染病传播               | `ode45(sir_model, tspan, y0);`                       |
| 物理系统模拟     | 单摆模型描述物体运动                  | `ode45(pendulum_ode, tspan, y0);`                    |
| 金融模型       | Black-Scholes 模型定价期权        | `normcdf(d1); normcdf(d2);`                          |
| 环境科学       | Michaelis-Menten 方程描述酶促反应速率 | `plot(S, v);`                                        |

![](https://img-blog.csdnimg.cn/direct/4b6f38de50454b96bd84e219aadc8038.png)
相关推荐
AI科技星14 小时前
灵魂商数(SQ) · 全域数学统一定义【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
张祥64228890415 小时前
导数与微分有啥区别
算法·数学建模
AC赳赳老秦20 小时前
OpenClaw与Notion联动:自动同步工作任务、整理笔记,实现高效管理
运维·人工智能·python·数学建模·自动化·deepseek·openclaw
一只小小的土拨鼠21 小时前
2026年第十八届“华中杯”数学建模全赛道技术推演与硬核备赛指南
数学建模·华中杯
烟锁池塘柳01 天前
【数学建模】(时间序列模型)动态线性模型 (DLM)
数学建模
做cv的小昊2 天前
【TJU】研究生应用统计学课程笔记(2)——第一章 数理统计的基本知识(1.3 统计中常用的分布族)
笔记·线性代数·数学建模·矩阵·概率论·学习方法·抽象代数
AI科技星2 天前
基于螺旋元逻辑的宇宙统一场论底层公理构建(乖乖数学)
算法·机器学习·数学建模·数据挖掘·量子计算
做cv的小昊2 天前
【TJU】研究生应用统计学课程笔记(3)——第一章 数理统计的基本知识(1.4 正态总体的样本均值和样本方差的分布、1.5 充分统计量和完备统计量)
笔记·学习·线性代数·机器学习·数学建模·概率论
AI科技星3 天前
精细结构常数α的几何本源:从第一性原理的求导证明、量纲分析与全域验证
算法·机器学习·数学建模·数据挖掘·量子计算
做cv的小昊3 天前
【TJU】应用统计学——第六周作业(3.3 两个正态总体参数的假设检验、3.4 非正态总体参数的假设检验、4.1 一元线性回归分析)
笔记·算法·数学建模·矩阵·回归·线性回归·学习方法