高教杯数学建模竞赛A题文章写作要点与示范

news2024/11/18 21:44:51
  • 数学建模竞赛写作最重要的一点
    • LaTeX 很重要 非常重要 非常重要
    • 一定要规范 美观

写作注意事项

  • 标准的附录
  • 详实的支撑材料和清晰的支撑材料说明
    • 文章中所有的图片都应该包含在支撑材料中
  • 正确得引用参考文献
  • 模型的评价部分应当包含
    • 模型优点
    • 模型缺点
    • 改进方案
  • 图像绘制应当标准
  • 假设说明
    • 简洁
    • 只列出必要的假设而不是堆砌
    • 应当包含合理性证明

不应当做的事情

  • 不懂装懂
  • 抄袭

微分方程的数值求解

IRK6解释


模型求解

        我们选择使用截断误差更小的三级六阶隐式Runge-Kutta方法对模型进行试求解。

模型的刚性分析

        刚性方程组对于数值解法的稳定性要求非常苛刻

        方程组的刚性:

常微分方程初值问题的三级六阶隐式Runge-Kutta解法

        递推公式:

        初值条件:

模型求解结果

        时间图:

        相空间:

模型求解结果的稳定性检验

        虽然在理论上,隐式方法多是无条件稳定的。但是,该方法的每一步递推都需要求解一非线性方程组。非线性方程组求解方法的选择将会显著影响模型求解的稳定性。我们选择使用scipy.optimize.solve 这一内置方法求解非线性方程组,其稳定域是未知的,因此仍然需要对模型求解结果进行稳定性检验。

        我们采用调整求解步长的方法验证三级六阶隐式Runge-Kutta方法在该初值问题上的稳定性。

模型求解结果分析

        求解结果分析


RK4解释


模型求解

        我们选择使用截断误差为O(h^5)的四阶Runge-Kutta方法对模型进行试求解。

常微分方程初值问题的四阶龙格库塔解法:

        递推公式:

        初值条件:

模型求解结果

        时间图:

        相空间:

模型求解结果的稳定性检验

        我们遗憾得指出,求解四阶Runge-Kutta在该初值问题上的稳定域的过程较为复杂,我们采用调整求解步长的方法验证四阶Runge-Kutta方法在该初值问题上的稳定性。

        时间图:

        相空间:

        误差图:

模型试求解结果分析

        求解结果分析


优化模型的求解

随机数问题

        我们提到,遗传算法与模拟退火算法的优异表现依赖于随机数生成器的表现。我们使用的一直是Python内置的random 模块。其均匀性与收敛速度可能并不足够理想,可以使用Sobol序列或者Halton序列制作性质更加良好的随机数生成器,我们将相关的随机数生成器放在附录中供参考。图为Halton生成器的Hist检验与minimal statistical检验。

  • 这是我写的一个随机数生成器,尽管参考,因为没有啥高难度的东西,都最简单的
import matplotlib.pyplot as plt
import time
import copy
import math

class randomgenerator():
    def __init__(self,seed=0):
        self.state = seed

    def help_doc(self):
        print("not finished!")
        #Linear Congruential Generator

    #linear congruential generator   
    def LGC(self,a=1103515245,c=12345,m=2**31):
        #best self,a=1103515245,c=12345,m=2**31
        self.state = (a * self.state + c) % m 
        return self.state / m

    def LGCrand(self,a=1103515245,c=12345,m=2**31,Len=1000,Dim=1):
        state = self.state
        R = [[0 for j in range(Dim)] for i in range(Len)]
        for j in range(Len):
            for i in range(Dim):
                state = (a * state + c) % m
                R[j][i] = state / m
        return R

    #lagged fibonnaci generators
    def LFG(self,seed=[time.time(),time.time()+1,time.time()+2]):
        lag1 = seed[0]
        lag2 = seed[1]
        current_seed = copy.deepcopy(seed)
        current_seed = [current_seed[j] for j in range(1,len(seed))]+[sum(current_seed)%1]
        #return [current_seed[-1],["seed1:",seed[0],"seed2:",seed[1]]]
        return current_seed[-1]
    
    def LFGrand(self,seed=[time.time(),time.time()+1,time.time()+2],Len=10,Dim=2):
        R = [[0 for j in range(Dim)] for i in range(Len)]
        lag1 = seed[0]
        lag2 = seed[1]
        current_seed = copy.deepcopy(seed)
        def fun_in_LFGrand():
            nonlocal lag1
            nonlocal lag2
            nonlocal current_seed
            current_seed = [current_seed[j] for j in range(1,len(seed))]+[sum(current_seed)%1]
            lag1 = lag2
            lag2 = current_seed[-1]
            return lag2
        for j in range(Len):
            for i in range(Dim):
                R[j][i] = fun_in_LFGrand()
        return R

    #multiple recursive generators
    def MRG(self,seed=1000,r1=123456789,r2=987654321,a=428773,m=2**32):
        #f = lambda y1,y2:(a*r1+r2)%m
        M = []
        for i in range(seed):
            r1,r2 = (a*r1+r2)%m,r1
            M.append((a*r1+r2)%m/m)
        return M

    #Inverse-Transform Method
    def ITM(self,Len=1000):
        #print("Warning!using sin(x)^2 [0,pi/2]as cdf")
        cdf = lambda x:math.sin(x)**2
        pdf = lambda x:math.sin(x)*math.cos(x)*2
        n_samples=1000
        def Inverse_Transform(Y):
            nonlocal n_samples
            nonlocal cdf
            x = [i*math.pi/2/n_samples for i in range(n_samples)]
            y = [cdf(i) for i in x]
            ABS = [abs(Y-i) for i in y]
            return x[ABS.index(min(ABS))]
        M = []
        for i in range(Len):
            M.append(Inverse_Transform(self.LGC()) )
        return M
    
    #Accept-Reject method
    def ARM(self):
        f = lambda x:1
        M = math.sqrt(2*math.exp(1)/math.pi)
        while True:
            x = self.LGC()
            y = self.LGC()
            if y <= f(x)/M:
                return x


    #halton
    def halton(self,Len=1000,base=3):
        def halton_f():
            nonlocal Len
            nonlocal base
            n,d = 0,1
            for L in range(2*Len):
                x = d-n
                if x == 1:
                    n = 1
                    d *= base
                else:
                    y = d//base
                    while x <= y:
                        y//=base
                    n = (base+1)*y-x
                yield n/d
        f = halton_f()
        return [next(f) for i in f]



    def chi_square_test(self,observed_values):
        from scipy.stats import chisquare
        import numpy as np
        expected_values = \
                    np.ones(shape=len(observed_values)) * (sum(observed_values) / len(observed_values))
        chi_squared_statistic,p_value = \
                    chisquare(observed_values, expected_values)
        return chi_squared_statistic, p_value
        
    def minimal_statistical_test(self,List):
        num = len(List)
        ave = [0 for i in range(num)]
        for i in range(1,num):
            ave[i] = sum(List[:i])/i
        plt.plot(range(num),ave)
        plt.title("$minimal\,statistical\,test$")
        plt.pause(0.01)

    def Hist(self,List,Bins=50,Density=True):
        plt.title("$Hist\,photo$")
        plt.hist(List,bins=Bins,density=Density)
        plt.pause(0.01)
        
        
####testing####
if __name__ == "__main__":
    r = randomgenerator()
    s = r.MRG
    M = s()
    r.Hist(M)

    r.minimal_statistical_test(M)
    c,p = r.chi_square_test(M)
    print("c=",c)
    print("p=",p)
    


遗传算法解释

        遗传算法虽然会在随机性上消耗和浪费大量的算力与时间,但其在全局搜索与小空间搜索上往往有突出表现。我们最终选择增强精英保留遗传算法求解这个优化问题,程序实现基于Python geatpy模块。

        遗传算法通过模拟生物界自然选择过程以实现最优化问题的求解。依据适应度函数(目标函数)的大小确定自然界中的个体(当前解)竞争力。每个个体(当前解)都将以一串二进制数表示。竞争力高的个体将获得更多的生存机会,这一点通常在新生代的占比中体现出来。

        在自然界中,当老一代走向新一代时,必然会发生基因重组,这会加大物种的多样性。与之对应的,在遗传算法的迭代过程中,个体交换其对应的部分二进制码,以求找到全局最优解。为增大找到全局最优解的可能,遗传算法会在迭代中考虑变异(对当前解做随机扰动)等情况。

...

        与常用的遗传算法不同,在群体代际更迭时,增强精英保留遗传算法会更多得保留最优个体而避免群体中的优秀部分在更迭时中丢失。

        我们设置的最大进化代数为:

        我们设置的优化停滞退出阈值为:

        遗传算法求解结果:


模拟退火解释

        为了克服优化算法法初值依赖性和检验遗传算法的求解结果,我们以遗传算法的求解结果为算法初始点,进行数次模拟退火过程。

        模拟退火算法稳定得控制控制参数(金属温度)降低,通过对当前解的随机扰动获得新解,依据Metropolis准则判断是否接受新解,使目标函数(金属内能)降低,直至趋于最小值。

        我们设定的控制参数初始值(金属初始温度)为:

        我们设定的迭代退出标准为:

        这是模拟退火算法的求解结果

        我们可以看到模型求解是较为准确的


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过uni.chooseImage返回的临时路径转为base64

uniapp官方API文档&#xff1a;https://uniapp.dcloud.net.cn/api/media/image.html#chooseimage 代码在后面 chooseimage的succes函数中的res.tempFilePaths&#xff0c;是图片的一个临时路径&#xff0c;没法直接传给后端接口使用&#xff0c;且接口需要的是base64格式的 ge…

使用dokcer部署分布式任务调度平台XXL-JOB

XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 部署docker略有需要看下面文档即可 ​​​​​​yum安装docker以及安装指定版本docker_yum安装指定版本dock…

迅为RK3588开发板修改编译工具路径

1 因为此章节以 rknn_yolov5_demo 在 RK3588 Linux 64 位平台上运行为例&#xff0c;所以修改 examples/rknn_yolov5_demo/build-XXX.sh 的编译工具路径&#xff0c;如下图所示&#xff1a; 2 修改 build-linux_RK3588.sh 文件&#xff0c;将 TOOL_CHAIN 修改为 gcc-arm-10.3…

set和map通过一颗红黑树进行封装

T是什么我不知道&#xff0c;但是我知道set 那么T一定得是key &#xff0c; map一定得是pair的数据类型 得用一颗模板是红黑树&#xff0c;实例化出map和set ---------------------------------------------------------------------------------------------------------…

如何与QVC 建立EDI连接?

QVC&#xff0c;全称为Quality, Value, Convenience&#xff08;品质、价值、便利&#xff09;&#xff0c;成立于1986年&#xff0c;是一家全球领先的零售电视和在线零售商。作为一家多渠道零售商&#xff0c;QVC致力于为客户提供高品质、独特的商品&#xff0c;通过电视、互联…

山石网科国产化防火墙,打造全方位边界安全解决方案

互联网的快速发展促进了各行各业的信息化建设&#xff0c;但也随之带来了诸多网络安全风险。大部分组织机构采用统一互联网接入方案&#xff0c;互联网出口承担着内部用户访问互联网的统一出口和对外信息服务的入口&#xff0c;因此在该区域部署相匹配的安全防护手段必不可少。…

Spring WebFlux使用未加前缀的双通配符模式绕过安全性CVE-2023-34034

文章目录 0.前言漏洞漏洞介绍描述 1.参考文档2.基础介绍3.解决方案3.1. 升级版本 4.漏洞修复源码分析5. 漏洞利用示例 0.前言 背景&#xff1a;公司项目扫描到 WebFlux中使用"**"作为模式会导致Spring Security和Spring WebFlux之间 CVE-2023-34034漏洞 漏洞 高 | 2…

junit.Test误踩坑,识别不到@Test注解,无法运行测试方法

问题的出现源自于下面的一段代码&#xff1a; 在这一段代码中&#xff0c;只看到可以运行的main方法&#xff0c;无法看到test方法可以运行的标志。 只能运行main()方法。 开始排查&#xff0c;对junit包的导入进行检查&#xff0c;发现是没有问题的。 怀疑是否是IntelliJ IDE…

lazada跨境电商商品数据采集

Lazada跨境电商商品数据采集可以使用以下两种方法&#xff1a; 手动采集&#xff1a;可以在Lazada网站上手动搜索商品信息&#xff0c;然后复制粘贴到Excel表格中。这种方法比较麻烦&#xff0c;需要逐个搜索和记录商品信息&#xff0c;适合采集数量较少的商品数据。使用采集软…

无涯教程-JavaScript - PI函数

描述 PI函数返回数字3.14159265358979,数学常数pi,精确到15位数字。 语法 PI ()争论 PI函数语法没有参数。 适用性 Excel 2007,Excel 2010,Excel 2013,Excel 2016 Example JavaScript 中的 PI函数 - 无涯教程网无涯教程网提供描述PI函数返回数字3.14159265358979,数学常…

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建1&#xff09;定义模型结构2&#xff09;优化损失函数 相关其它博客工程源代码下载其它资料下载 前言 本项目依赖于Keras深度学习模型&#xff0c;旨在对手语进行分类和实时识…

Vue.js入门模板语法[上] 及Vue.js实现购物车---详细讲解

前言 前面我们学习了Vue的基础入门&#xff0c;接下来我们学习有关Vue的模板语法&#xff0c;学习Vue语法能提高我们的前端开发效率 Vue.js 使用了基于 HTML 的模板语法&#xff0c;允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML &a…

肖sir__mysql之存储练习题__013

实验 一、 实验要求&#xff1a; 理解存储过程的概念掌握存储过程的语法格式、使用方法掌握存 储过程的创建、执行 二、实验前提&#xff1a; – drop table if exists student; – Create table student – (Id varchar(255), #学号 – Name varchar(255), #姓名 – Roomid…

4、wireshark使用教程

文章目录 一、wireshark简介二、环境三、wireshark抓包三、wireshark过滤器使用 一、wireshark简介 Wireshark是使用最广泛的一款「开源抓包软件」&#xff0c;常用来检测网络问题、攻击溯源、或者分析底层通信机制。 Wireshark抓包原理&#xff1a; 单机情况&#xff1a;电脑…

Java中常见的线程池

一、Java中常见的线程池 1.为什么使用线程池 重用线程池的线程&#xff0c;避免因为线程的创造和销毁所带来的性能开销。有效控制线程池的最大并发数&#xff0c;避免大量的线程之间因抢占系统资源而阻塞。能够对线程进行简单的管理&#xff0c;并提供一些特定的操作&#xf…

PY32F003F18之DMA串口

PY32F003F18使用DMA串口&#xff0c;官方程序省FLASH&#xff0c;但不省内存。单片机内存够大&#xff0c;节省没意义&#xff0c;故做了修改&#xff0c;少用HAL库中的发送和接收&#xff0c;从里面抠出有用的部分&#xff0c;修修改改就可以了。 一、DMA串口初始化流程&…

未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

1.第一步&#xff1a;下载 Microsoft Access Database Engine Microsoft Access Database Engine 2010 Redistributable Download 2.第二步: 安装下载的引擎软件 3.第三步&#xff1a;重新连接&#xff1b; 代码如下: private void button1_Click(object sender, EventArgs …

【M malloc送书第二期】朋友圈大佬都去读研了,这份备考书单我码住了!

文章目录 01 《**数据结构与算法分析**》02 《计算机网络&#xff1a;自顶向下方法》03 《现代操作系统》04 《深入理解计算机系统》01 《概率论基础教程&#xff08;原书第10版》03 《线性代数及其应用》 八九月的朋友圈刮起了一股晒通知书潮&#xff0c;频频有大佬晒出“研究…

从统计语言模型到预训练语言模型---统计语言模型

语言模型 从历史上来看&#xff0c; 自然语言处理的研究范式变化是从规则到统计&#xff0c; 从统计机器学习到基于神经网络的深度学习&#xff0c;这同时也是语言模型发展的历史。要了解语言模型的发展历史&#xff0c;首先我们需要认识什么是语言模型。语言模型的目标是建模…

RT-Thread I/O设备模型框架

I/O 设备模型框架 RT-Thread提供了一套简单的I/O设备模型框架&#xff0c;如图所示&#xff0c;它位于硬件和应用程序之间&#xff0c;共分成三层&#xff0c;从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。 应用程序通过I/O设备管理接口获得正确的设备驱动&…