├── LICENSE ├── Python数学建模讨论班总结文档 ├── .keep ├── 2022 寒假 │ ├── MCM2020 A │ │ ├── 209王德民美赛专题讨论记录.md │ │ └── 209王德民美赛专题讨论记录.pdf │ ├── 讨论班-寒假01 │ │ └── 综合评价方法.md │ └── 讨论班-寒假02 │ │ └── 第八章 微分方程模型.md ├── 2022暑假 │ ├── 0718 讨论班 │ │ ├── 0716-陈萃岚-Python基础.ipynb │ │ ├── Pdata2_42.txt │ │ └── readme.md │ ├── 0723讨论班 │ │ ├── 0723-陈天权_朱小志_朱坦晟-优化类常用模型与算法实现.ipynb │ │ ├── Pdata10_6.txt │ │ ├── Pdata17_1.txt │ │ ├── Pdata5_6.xlsx │ │ └── readme.md │ ├── 0730讨论班 │ │ ├── 0730-邵卓诚_张旭航_沈思远_王静颖-评价类模型与真题分析(一).ipynb │ │ ├── image-20220806112113462.png │ │ ├── image-20220806113940595.png │ │ ├── image-20220806114244891.png │ │ ├── image-20220806124830613.png │ │ ├── image-20220806130035203.png │ │ ├── image-20220806130824712.png │ │ ├── image-20220806131559715.png │ │ ├── image-20220806131601405.png │ │ ├── image-20220806131707937.png │ │ ├── image-20220806131758814.png │ │ └── readme.md │ ├── 0806讨论班 │ │ ├── 0806-王宗瑞_宋奕辰_贺思齐-预测类模型与真题分析(一).ipynb │ │ ├── 1.md │ │ ├── Pdata17_5.txt │ │ ├── Pdata18_2.xlsx │ │ ├── Pdata18_3.txt │ │ ├── Pdata18_3.xlsx │ │ ├── austa.csv │ │ ├── figure8_5.png │ │ └── sunspots.csv │ ├── 0820讨论班 │ │ ├── 0820-冯超_帅栩莹_刘梓艺-2017CD真题实现.ipynb │ │ └── 1.md │ ├── 0827讨论班 │ │ ├── 0827-庄树格-侯力广-评价类模型真题分享讨论.ipynb │ │ ├── 1.md │ │ ├── 原始数据.xlsx │ │ ├── 处理后数据.xlsx │ │ └── 附件1 近5年402家供应商的相关数据.xlsx │ ├── 0903讨论班 │ │ ├── 0903-初夏_王元旭_刘嘉明-2016年A题解析.ipynb │ │ └── 1.md │ └── readme.md ├── 22-23上 │ ├── 1119 │ │ ├── 0911-总结文档.ipynb │ │ ├── 0911-总结文档.pdf │ │ ├── winequality.csv │ │ └── winequality.txt │ └── 1126 │ │ ├── adult.csv │ │ ├── adult_info.txt │ │ ├── iris_info.txt │ │ ├── mushroom.csv │ │ ├── mushroom_info.txt │ │ ├── 朴素贝叶斯原理.md │ │ ├── 朴素贝叶斯原理.pdf │ │ ├── 离散化.ipynb │ │ └── 贝叶斯.ipynb ├── Demo │ ├── .keep │ ├── Python 在高数和线代中的应用——总结文档.md │ ├── 会议numpy 总结_1010.md │ └── 综合评价模型——总结文档.md ├── 讨论班01 │ ├── .keep │ └── 数据处理与可视化(一)——Numpy基础.md ├── 讨论班02 │ └── 数据处理与可视化(二)__numpy__Matplotlib__pandas.md ├── 讨论班03 │ ├── Example.py │ ├── Figure_1.png │ ├── Figure_2.png │ ├── Figure_3.png │ ├── Figure_4.png │ ├── Figure_5.png │ ├── Figure_6.png │ ├── Figure_7.png │ ├── Figure_8.png │ ├── Python在高等数学中的应用.md │ ├── Trade.xlsx │ ├── figure2_45.png │ └── 上堂课(第二章)的 实战应用.md ├── 讨论班04 │ ├── 线性代数问题的符号解和数值解(更正).md │ └── 高数问题的符号解和数值解.md ├── 讨论班05 │ └── 第八周记录.md ├── 讨论班06 │ └── 第五章 线性规划.md ├── 讨论班07 │ └── 第七次讨论班.md ├── 讨论班08 │ ├── .keep │ ├── 整数规划.md │ ├── 整数规划.pdf │ └── 非线性规划0.md └── 讨论班09 │ └── 非线性规划.md ├── Python数学建模讨论班资料 ├── .keep ├── 2022 寒假 │ ├── 寒假 2020MCM A │ │ └── 2020美赛A题.zip │ ├── 寒假 2021MCM B │ │ └── 2.8晚资料.zip │ └── 寒假 讨论班01 │ │ └── 第九章--综合评价方法.zip ├── 2022 暑假 │ └── readme.md ├── 讨论班01 │ ├── .keep │ ├── GreedSnake.py │ ├── funs.py │ ├── matplotlibShow.py │ └── numpyShow.py ├── 讨论班02 │ ├── .keep │ ├── data1.csv │ └── trypandas.py ├── 讨论班03 │ ├── .keep │ └── 第三次讨论班__python在高等数学中的应用(1).zip ├── 讨论班04 │ └── 04.rar ├── 讨论班06 │ └── 线性规划 │ │ ├── .ipynb_checkpoints │ │ └── Linear programming-checkpoint.ipynb │ │ ├── 05第5章 线性规划.pptx │ │ ├── Linear programming.ipynb │ │ ├── Pdata.xlsx │ │ ├── 线性规划.md │ │ └── 线性规划.pdf ├── 讨论班07 │ └── 07 │ │ ├── test.py │ │ ├── 第七次讨论班.ipynb │ │ └── 第七次讨论班.md ├── 讨论班08 │ └── 07-2.rar └── 讨论班09 │ └── 非线性规划代码.rar ├── README.en.md ├── README.md ├── index.html ├── 协会-LaTeX 学习资料 ├── LaTeX 学习资料.md ├── LaTeX入门刘海洋.md └── readme.md ├── 协会-MATLAB 学习资料 ├── MATLAB_Intro.html ├── MATLAB学习资料.md └── readme.md ├── 协会-模型学习材料 ├── readme.md └── 数学建模教材.md ├── 协会宣传 ├── .keep └── 数学建模协会制作推送不完全统计.pdf ├── 协会活动照片 ├── .DS_Store ├── .keep ├── 20-21下 │ ├── .keep │ ├── 分享会1.jpg │ └── 宣传单1.jpg ├── 21-22上 │ ├── .keep │ ├── 20210925部长团.jpg │ ├── 讨论班10.10 │ │ ├── .keep │ │ ├── 听讲.jpg │ │ └── 大合照.jpg │ ├── 讨论班10.16 │ │ ├── .keep │ │ ├── 33efdf3d8cda9f4b1aff9fa9b6dcf80.jpg │ │ ├── 3ecc1e9d70d7815cafd95b80ea82815.jpg │ │ ├── 4156111e55010869d980ab2d3671575.jpg │ │ ├── 7bf74a2c7a151c3a415adf5d51b7d0f.jpg │ │ ├── 81502ffe7526e5a6bd26fc271913856.jpg │ │ ├── b054720604e3a7d2b3f0fc19b7d6569.jpg │ │ ├── d8e0c8f980e9d269b99726fcebd795a.jpg │ │ └── dad62357efa8d169a58877666459af2.jpg │ ├── 讨论班10.23 │ │ ├── .keep │ │ ├── 38e173d3e9962247fd402621258bee1.jpg │ │ └── d4584ca1c1117e5ddeb2e457d97a728.jpg │ ├── 讨论班10.30 │ │ ├── .keep │ │ ├── 0fdcfa54273f761cdc664404e216658.jpg │ │ ├── 187e1d4fc0631a823985411d455932a.jpg │ │ ├── 24a59be1089dfd9c2dbfe7e0767402a.jpg │ │ ├── 320f2ce79127a28e7156c2c29d0b436.jpg │ │ ├── 3718100e528fffd83465ebe7d7505bc.jpg │ │ ├── 6f9f060ceb8e64e9e88f2d15eb47a98.jpg │ │ ├── df405f6415275fc8b59c893dc2700df.jpg │ │ └── f1cc2bcb3cfcf27021cc44668efac79.jpg │ ├── 讨论班11.14 │ │ ├── .keep │ │ ├── 0675f1cfa71621d87691067baf89e83.jpg │ │ ├── 1449e9f2687586d6ddab6ffade97aba.jpg │ │ ├── 8a01618a051a0739ad71ea0cfd72984.jpg │ │ ├── 93b48af91fbf293d6809422831d6edc.jpg │ │ ├── a48374f999d526c34cc079efd51c6ae.jpg │ │ └── c4c0382501a6a55191f7421aa1f02d4.jpg │ ├── 讨论班11.20 │ │ ├── .keep │ │ ├── 15bd3806875f8d7ebafef624fe3f0c0.jpg │ │ ├── af824c8784c5b70839b4603425261b7.jpg │ │ └── c9e6a982d9f2c33f9a31860c449a633.jpg │ ├── 讨论班11.6 │ │ ├── .keep │ │ ├── 438bb0be27e9a91a8b4592913023e96.jpg │ │ ├── 67cbb16797b44dfe8dfe6780bc2ef24.jpg │ │ └── 77a9b0cb967fe5cb71bf7cdf3c0079f.jpg │ └── 讨论班12.5 │ │ ├── .keep │ │ └── 58a463161ab920d705bab3e233242d3.jpg ├── 21-22下 │ └── .keep ├── 22 暑假 │ ├── 0723 讨论班 │ │ ├── readme.md │ │ ├── 微信图片_20220727221907.png │ │ ├── 微信图片_20220727221910.png │ │ ├── 微信图片_20220727221914.jpg │ │ ├── 微信图片_20220727221920.jpg │ │ └── 截屏2022-07-23 21.05.31.png │ ├── 0730 讨论班 │ │ ├── 1b8897df26ec6d091b7599c12ce7829.jpg │ │ └── readme.md │ ├── 0806讨论班 │ │ ├── 0806讨论班.jpg │ │ └── readme.md │ ├── 0820 讨论班 │ │ └── readme.md │ ├── 0827讨论班 │ │ ├── 0827讨论班.png │ │ └── readme.md │ ├── 0903 │ │ ├── 0903讨论班.jpg │ │ └── readme.md │ └── readme.md ├── 22-23上 │ ├── .DS_Store │ ├── 1113会议 │ │ ├── .DS_Store │ │ ├── 374241C6F8D0E4749B6B11785762C7E3.jpg │ │ ├── 4F1BF9D255D2076236221F793E8C1DD1.jpg │ │ ├── 9FA0FA2D68B40E58F32B7A526C1B1A8F.jpg │ │ ├── 9FDD20A7B8995E1F552435963FAACB52.jpg │ │ ├── C31B6A986E058766376C989CD9922EEF.jpg │ │ ├── QQ20221113-0.jpg │ │ ├── WechatIMG450.jpeg │ │ └── WechatIMG451.jpeg │ └── 1203会议 │ │ ├── 1.jpg │ │ └── 2.jpg └── 协会内建 │ ├── readme.md │ └── 宣传部 │ ├── 220714-破冰大会 │ ├── readme.md │ ├── 微信图片_20220725150935.png │ └── 微信图片_20220725150940.png │ └── readme.md ├── 数模国赛 ├── readme.md └── 国赛近十年赛题与优秀论文.md ├── 数模校内赛 ├── .keep └── 上海交通大学第一届数学建模校内赛优秀论文展.md ├── 数模研赛 ├── .keep ├── readme.md └── 研赛资料.md └── 数模美赛 ├── readme.md └── 历年优秀论文.md /LICENSE: -------------------------------------------------------------------------------- 1 | 木兰宽松许可证, 第2版 2 | 3 | 木兰宽松许可证, 第2版 4 | 2020年1月 http://license.coscl.org.cn/MulanPSL2 5 | 6 | 7 | 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 8 | 9 | 0. 定义 10 | 11 | “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 12 | 13 | “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 14 | 15 | “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 16 | 17 | “法人实体”是指提交贡献的机构及其“关联实体”。 18 | 19 | “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 20 | 21 | 1. 授予版权许可 22 | 23 | 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 24 | 25 | 2. 授予专利许可 26 | 27 | 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 28 | 29 | 3. 无商标许可 30 | 31 | “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 32 | 33 | 4. 分发限制 34 | 35 | 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 36 | 37 | 5. 免责声明与责任限制 38 | 39 | “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 40 | 41 | 6. 语言 42 | “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 43 | 44 | 条款结束 45 | 46 | 如何将木兰宽松许可证,第2版,应用到您的软件 47 | 48 | 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 49 | 50 | 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 51 | 52 | 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 53 | 54 | 3, 请将如下声明文本放入每个源文件的头部注释中。 55 | 56 | Copyright (c) [Year] [name of copyright holder] 57 | [Software Name] is licensed under Mulan PSL v2. 58 | You can use this software according to the terms and conditions of the Mulan PSL v2. 59 | You may obtain a copy of Mulan PSL v2 at: 60 | http://license.coscl.org.cn/MulanPSL2 61 | THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 62 | See the Mulan PSL v2 for more details. 63 | 64 | 65 | Mulan Permissive Software License,Version 2 66 | 67 | Mulan Permissive Software License,Version 2 (Mulan PSL v2) 68 | January 2020 http://license.coscl.org.cn/MulanPSL2 69 | 70 | Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 71 | 72 | 0. Definition 73 | 74 | Software means the program and related documents which are licensed under this License and comprise all Contribution(s). 75 | 76 | Contribution means the copyrightable work licensed by a particular Contributor under this License. 77 | 78 | Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. 79 | 80 | Legal Entity means the entity making a Contribution and all its Affiliates. 81 | 82 | Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 83 | 84 | 1. Grant of Copyright License 85 | 86 | Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 87 | 88 | 2. Grant of Patent License 89 | 90 | Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 91 | 92 | 3. No Trademark License 93 | 94 | No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 95 | 96 | 4. Distribution Restriction 97 | 98 | You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 99 | 100 | 5. Disclaimer of Warranty and Limitation of Liability 101 | 102 | THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 103 | 104 | 6. Language 105 | 106 | THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. 107 | 108 | END OF THE TERMS AND CONDITIONS 109 | 110 | How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software 111 | 112 | To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: 113 | 114 | i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; 115 | 116 | ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; 117 | 118 | iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. 119 | 120 | 121 | Copyright (c) [Year] [name of copyright holder] 122 | [Software Name] is licensed under Mulan PSL v2. 123 | You can use this software according to the terms and conditions of the Mulan PSL v2. 124 | You may obtain a copy of Mulan PSL v2 at: 125 | http://license.coscl.org.cn/MulanPSL2 126 | THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 127 | See the Mulan PSL v2 for more details. 128 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022 寒假/MCM2020 A/209王德民美赛专题讨论记录.md: -------------------------------------------------------------------------------- 1 | # 2020美赛A题解析 2 | 3 | ---- 4 | 5 | 负责人:刘俊涵 6 | 7 | 分享人:王德民小组 8 | 9 | --- 10 | 11 | ### 一.题目 12 | 13 | 建立模型预测海洋温度变化:移动自回归,灰色预测,插值,拟合 14 | 15 | 建立鱼类迁徙模型:梯度相关、适宜温区正态分布 16 | 17 | 建立捕鱼盈利判定方式:自己定义一个利润模型、查找资料获得捕捞半径 18 | 19 | ### 二.O奖论文精读 20 | 21 | #### **摘要** 22 | 23 | 讲了三大模型得到了什么结果,摘要最后稳定性分析和敏感性分析 24 | 25 | #### 目录 26 | 27 | 结果不是用数字表示,是用图表比较清晰 28 | 29 | #### 1.背景 30 | 31 | 稍微改一下题目,给出了两种鱼的图片,比较美观一点。 32 | 33 | 之后进行问题重述。 34 | 35 | 然后介绍了三大模型。 36 | 37 | ps:引用参考文献,cite,写background时查一些文献,需要进行及时记录,进行扩写的时候加上自己看的文献 38 | 39 | #### 2.假设和模型准备 40 | 41 | 1. 温度对鱼类迁徙有很大影响 42 | 2. 鱼群游的深度是一样的(相同条件下比较 43 | 3. 保持宏观条件统一 44 | 4. 数据要求数据都是准确的 45 | 46 | **建模思路** 47 | 48 | 流程图比较清晰,把核心表达的东西展现出来 49 | 50 | Q:流程图必须要有吗? 51 | 52 | A:最好要有,有会更加fancy,给人第一印象比较好,虽然这篇文章的这个图很一般(doge) 53 | 54 | #### 3.模型准备 55 | 56 | 把文章中出现的符号列出来 57 | 58 | 数据如何收集(可以不单开一章,可以在其他部分开头提一下) 59 | 60 | 这篇文章的资料来源非常详细 61 | 62 | 数据清理,只考虑4-7月的数据,其他数据不进行考虑,有的时候不是所有数据都需要用到来进行平均 63 | 64 | ps:不是自己画的图最好加一个引用 65 | 66 | #### 4.ARIMA-海温 67 | 68 | ARIMA,思想很简单,实现比较简单 69 | 70 | Fig5 不同经纬度 海温变化趋势图 71 | 72 | 每一个方格(地点)都进行一个时序的预测 73 | 74 | Q:什么叫平稳? 75 | 76 | A:序列的特征不随时间变化,均值和协方差不随时间的平移而变化首先确定复制 77 | 78 | 线性、一阶差分,非平稳->平稳,(白噪声,数学分布为0) 79 | 80 | 将样本分成6份,6-cross机器学习的训练、预测划分 81 | 82 | 默认q=0(这并不是一般的做法) 83 | 84 | d:差分的阶数,差分几次可以得到一个平稳的数据,本身是平稳的,不需要做差分,先确定d 85 | 86 | 之后利用asa准则判断p和q为多少,比这个方法快 87 | 88 | #### 5.迁徙模型 89 | 90 | 由海温梯度而定,假设沿梯度下降最大的方向迁徙 91 | 92 | 构建速度和温度梯度的关系式(线性) 93 | 94 | 查资料得到最大速度,得到相应参数 95 | 96 | 之后通过模拟可以得到鱼群分布情况 97 | 98 | #### 6.利润模型 99 | 100 | 自己定义收入、支出和盈利(建一个模型,找一些数据,进行拟合) 101 | 102 | ps:其实可以自己找数据,其他O奖论文直接查捕捞范围,盈利的捕捞范围(比较合理) 103 | 104 | 最好的情况、最坏的情况、最有可能的情况:利用随机抽样的方法,抽样+插值,对多种可能(10000中情况)进行计算,3$\sigma$原则来判断最大最小, 105 | 106 | #### 7.总结 107 | 108 | 文字+图片的形式表达结果 109 | 110 | ### 三.小结 111 | 112 | 本次讨论课介绍了2020MCMA题,介绍了8篇O奖论文的相关模型,并就其中一篇进行较细致的讲解,可以发现这些O奖论文也是存在一些问题的,对于相关的模型,调用现有的api即可进行实现,技术难度上也还比较容易。 -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022 寒假/MCM2020 A/209王德民美赛专题讨论记录.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022 寒假/MCM2020 A/209王德民美赛专题讨论记录.pdf -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0718 讨论班/Pdata2_42.txt: -------------------------------------------------------------------------------- 1 | 1350 1370 1390 1400 1410 960 940 880 800 690 570 430 290 210 150 2 | 1370 1390 1410 1430 1440 1140 1110 1050 950 820 690 540 380 300 210 3 | 1380 1410 1430 1450 1470 1320 1280 1200 1080 940 780 620 460 370 350 4 | 1420 1430 1450 1480 1500 1550 1510 1430 1300 1200 980 850 750 550 500 5 | 1430 1450 1460 1500 1550 1600 1550 1600 1600 1600 1550 1500 1500 1550 1550 6 | 950 1190 1370 1500 1200 1100 1550 1600 1550 1380 1070 900 1050 1150 1200 7 | 910 1090 1270 1500 1200 1100 1350 1450 1200 1150 1010 880 1000 1050 1100 8 | 880 1060 1230 1390 1500 1500 1400 900 1100 1060 950 870 900 936 950 9 | 830 980 1180 1320 1450 1420 400 1300 700 900 850 810 380 780 750 10 | 740 880 1080 1130 1250 1280 1230 1040 900 500 700 780 750 650 550 11 | 650 760 880 970 1020 1050 1020 830 800 700 300 500 550 480 350 12 | 510 620 730 800 850 870 850 780 720 650 500 200 300 350 320 13 | 370 470 550 600 670 690 670 620 580 450 400 300 100 150 250 14 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0718 讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0723讨论班/Pdata10_6.txt: -------------------------------------------------------------------------------- 1 | 0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 0.000000000000000000e+00 7.000000000000000000e+00 0.000000000000000000e+00 4.000000000000000000e+00 8.000000000000000000e+00 2 | 1.000000000000000000e+00 0.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 7.000000000000000000e+00 3 | 2.000000000000000000e+00 2.000000000000000000e+00 0.000000000000000000e+00 1.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 4 | 0.000000000000000000e+00 3.000000000000000000e+00 1.000000000000000000e+00 0.000000000000000000e+00 3.000000000000000000e+00 6.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 5 | 7.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 3.000000000000000000e+00 0.000000000000000000e+00 4.000000000000000000e+00 3.000000000000000000e+00 0.000000000000000000e+00 6 | 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 6.000000000000000000e+00 4.000000000000000000e+00 0.000000000000000000e+00 6.000000000000000000e+00 4.000000000000000000e+00 7 | 4.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 3.000000000000000000e+00 6.000000000000000000e+00 0.000000000000000000e+00 2.000000000000000000e+00 8 | 8.000000000000000000e+00 7.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 4.000000000000000000e+00 2.000000000000000000e+00 0.000000000000000000e+00 9 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0723讨论班/Pdata17_1.txt: -------------------------------------------------------------------------------- 1 | 53.7121 15.3046 51.1758 0.0322 46.3253 28.2753 30.3313 6.9348 2 | 56.5432 21.4188 10.8198 16.2529 22.7891 23.1045 10.1584 12.4819 3 | 20.1050 15.4562 1.9451 0.2057 26.4951 22.1221 31.4847 8.9640 4 | 26.2418 18.1760 44.0356 13.5401 28.9836 25.9879 38.4722 20.1731 5 | 28.2694 29.0011 32.1910 5.8699 36.4863 29.7284 0.9718 28.1477 6 | 8.9586 24.6635 16.5618 23.6143 10.5597 15.1178 50.2111 10.2944 7 | 8.1519 9.5325 22.1075 18.5569 0.1215 18.8726 48.2077 16.8889 8 | 31.9499 17.6309 0.7732 0.4656 47.4134 23.7783 41.8671 3.5667 9 | 43.5474 3.9061 53.3524 26.7256 30.8165 13.4595 27.7133 5.0706 10 | 23.9222 7.6306 51.9612 22.8511 12.7938 15.7307 4.9568 8.3669 11 | 21.5051 24.0909 15.2548 27.2111 6.2070 5.1442 49.2430 16.7044 12 | 17.1168 20.0354 34.1688 22.7571 9.4402 3.9200 11.5812 14.5677 13 | 52.1181 0.4088 9.5559 11.4219 24.4509 6.5634 26.7213 28.5667 14 | 37.5848 16.8474 35.6619 9.9333 24.4654 3.1644 0.7775 6.9576 15 | 14.4703 13.6368 19.8660 15.1224 3.1616 4.2428 18.5245 14.3598 16 | 58.6849 27.1485 39.5168 16.9371 56.5089 13.7090 52.5211 15.7957 17 | 38.4300 8.4648 51.8181 23.0159 8.9983 23.6440 50.1156 23.7816 18 | 13.7909 1.9510 34.0574 23.3960 23.0624 8.4319 19.9857 5.7902 19 | 40.8801 14.2978 58.8289 14.5229 18.6635 6.7436 52.8423 27.2880 20 | 39.9494 29.5114 47.5099 24.0664 10.1121 27.2662 28.7812 27.6659 21 | 8.0831 27.6705 9.1556 14.1304 53.7989 0.2199 33.6490 0.3980 22 | 1.3496 16.8359 49.9816 6.0828 19.3635 17.6622 36.9545 23.0265 23 | 15.7320 19.5697 11.5118 17.3884 44.0398 16.2635 39.7139 28.4203 24 | 6.9909 23.1804 38.3392 19.9950 24.6543 19.6057 36.9980 24.3992 25 | 4.1591 3.1853 40.1400 20.3030 23.9876 9.4030 41.1084 27.7149 26 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0723讨论班/Pdata5_6.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0723讨论班/Pdata5_6.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0723讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 1 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806112113462.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806112113462.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806113940595.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806113940595.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806114244891.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806114244891.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806124830613.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806124830613.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806130035203.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806130035203.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806130824712.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806130824712.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131559715.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131559715.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131601405.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131601405.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131707937.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131707937.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131758814.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0730讨论班/image-20220806131758814.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0730讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 1 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/1.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/Pdata17_5.txt: -------------------------------------------------------------------------------- 1 | 20.55 0.6 0.09 5126 1237 2 | 22.44 0.75 0.11 6217 1379 3 | 25.37 0.85 0.11 7730 1385 4 | 27.13 0.9 0.14 9145 1399 5 | 29.45 1.05 0.2 10460 1663 6 | 30.1 1.35 0.23 11387 1714 7 | 30.96 1.45 0.23 12353 1834 8 | 34.06 1.6 0.32 15750 4322 9 | 36.42 1.7 0.32 18304 8132 10 | 38.09 1.85 0.34 19836 8936 11 | 39.13 2.15 0.36 21024 11099 12 | 39.99 2.2 0.36 19490 11203 13 | 41.93 2.25 0.38 20433 10524 14 | 44.59 2.35 0.49 22598 11115 15 | 47.3 2.5 0.56 25107 13320 16 | 52.89 2.6 0.59 33442 16762 17 | 55.73 2.7 0.59 36836 18673 18 | 56.76 2.85 0.67 40548 20724 19 | 59.17 2.95 0.69 42927 20803 20 | 60.63 3.1 0.79 43462 21804 21 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/Pdata18_2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0806讨论班/Pdata18_2.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/Pdata18_3.txt: -------------------------------------------------------------------------------- 1 | 2031 2 | 2234 3 | 2566 4 | 2820 5 | 3006 6 | 3093 7 | 3277 8 | 3514 9 | 3770 10 | 4107 11 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/Pdata18_3.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0806讨论班/Pdata18_3.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/austa.csv: -------------------------------------------------------------------------------- 1 | "date","value" 2 | 1980-01-01,0.82989428 3 | 1981-01-01,0.85951092 4 | 1982-01-01,0.87668916 5 | 1983-01-01,0.86670716 6 | 1984-01-01,0.932052 7 | 1985-01-01,1.04826364 8 | 1986-01-01,1.3111932 9 | 1987-01-01,1.63756228 10 | 1988-01-01,2.0641074 11 | 1989-01-01,1.91268276 12 | 1990-01-01,2.03544572 13 | 1991-01-01,2.17721128 14 | 1992-01-01,2.38968344 15 | 1993-01-01,2.75059208 16 | 1994-01-01,3.0906664 17 | 1995-01-01,3.42664028 18 | 1996-01-01,3.83064908 19 | 1997-01-01,3.97190864 20 | 1998-01-01,3.83160036 21 | 1999-01-01,4.143101 22 | 2000-01-01,4.566551 23 | 2001-01-01,4.47541 24 | 2002-01-01,4.462796 25 | 2003-01-01,4.384829 26 | 2004-01-01,4.796861 27 | 2005-01-01,5.046211 28 | 2006-01-01,5.098759 29 | 2007-01-01,5.196519 30 | 2008-01-01,5.166843 31 | 2009-01-01,5.174744 32 | 2010-01-01,5.440894 -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/figure8_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0806讨论班/figure8_5.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0806讨论班/sunspots.csv: -------------------------------------------------------------------------------- 1 | year,counts 2 | 1700,5 3 | 1701,11 4 | 1702,16 5 | 1703,23 6 | 1704,36 7 | 1705,58 8 | 1706,29 9 | 1707,20 10 | 1708,10 11 | 1709,8 12 | 1710,3 13 | 1711,0 14 | 1712,0 15 | 1713,2 16 | 1714,11 17 | 1715,27 18 | 1716,47 19 | 1717,63 20 | 1718,60 21 | 1719,39 22 | 1720,28 23 | 1721,26 24 | 1722,22 25 | 1723,11 26 | 1724,21 27 | 1725,40 28 | 1726,78 29 | 1727,122 30 | 1728,103 31 | 1729,73 32 | 1730,47 33 | 1731,35 34 | 1732,11 35 | 1733,5 36 | 1734,16 37 | 1735,34 38 | 1736,70 39 | 1737,81 40 | 1738,111 41 | 1739,101 42 | 1740,73 43 | 1741,40 44 | 1742,20 45 | 1743,16 46 | 1744,5 47 | 1745,11 48 | 1746,22 49 | 1747,40 50 | 1748,60 51 | 1749,80.9 52 | 1750,83.4 53 | 1751,47.7 54 | 1752,47.8 55 | 1753,30.7 56 | 1754,12.2 57 | 1755,9.6 58 | 1756,10.2 59 | 1757,32.4 60 | 1758,47.6 61 | 1759,54 62 | 1760,62.9 63 | 1761,85.9 64 | 1762,61.2 65 | 1763,45.1 66 | 1764,36.4 67 | 1765,20.9 68 | 1766,11.4 69 | 1767,37.8 70 | 1768,69.8 71 | 1769,106.1 72 | 1770,100.8 73 | 1771,81.6 74 | 1772,66.5 75 | 1773,34.8 76 | 1774,30.6 77 | 1775,7 78 | 1776,19.8 79 | 1777,92.5 80 | 1778,154.4 81 | 1779,125.9 82 | 1780,84.8 83 | 1781,68.1 84 | 1782,38.5 85 | 1783,22.8 86 | 1784,10.2 87 | 1785,24.1 88 | 1786,82.9 89 | 1787,132 90 | 1788,130.9 91 | 1789,118.1 92 | 1790,89.9 93 | 1791,66.6 94 | 1792,60 95 | 1793,46.9 96 | 1794,41 97 | 1795,21.3 98 | 1796,16 99 | 1797,6.4 100 | 1798,4.1 101 | 1799,6.8 102 | 1800,14.5 103 | 1801,34 104 | 1802,45 105 | 1803,43.1 106 | 1804,47.5 107 | 1805,42.2 108 | 1806,28.1 109 | 1807,10.1 110 | 1808,8.1 111 | 1809,2.5 112 | 1810,0 113 | 1811,1.4 114 | 1812,5 115 | 1813,12.2 116 | 1814,13.9 117 | 1815,35.4 118 | 1816,45.8 119 | 1817,41.1 120 | 1818,30.1 121 | 1819,23.9 122 | 1820,15.6 123 | 1821,6.6 124 | 1822,4 125 | 1823,1.8 126 | 1824,8.5 127 | 1825,16.6 128 | 1826,36.3 129 | 1827,49.6 130 | 1828,64.2 131 | 1829,67 132 | 1830,70.9 133 | 1831,47.8 134 | 1832,27.5 135 | 1833,8.5 136 | 1834,13.2 137 | 1835,56.9 138 | 1836,121.5 139 | 1837,138.3 140 | 1838,103.2 141 | 1839,85.7 142 | 1840,64.6 143 | 1841,36.7 144 | 1842,24.2 145 | 1843,10.7 146 | 1844,15 147 | 1845,40.1 148 | 1846,61.5 149 | 1847,98.5 150 | 1848,124.7 151 | 1849,96.3 152 | 1850,66.6 153 | 1851,64.5 154 | 1852,54.1 155 | 1853,39 156 | 1854,20.6 157 | 1855,6.7 158 | 1856,4.3 159 | 1857,22.7 160 | 1858,54.8 161 | 1859,93.8 162 | 1860,95.8 163 | 1861,77.2 164 | 1862,59.1 165 | 1863,44 166 | 1864,47 167 | 1865,30.5 168 | 1866,16.3 169 | 1867,7.3 170 | 1868,37.6 171 | 1869,74 172 | 1870,139 173 | 1871,111.2 174 | 1872,101.6 175 | 1873,66.2 176 | 1874,44.7 177 | 1875,17 178 | 1876,11.3 179 | 1877,12.4 180 | 1878,3.4 181 | 1879,6 182 | 1880,32.3 183 | 1881,54.3 184 | 1882,59.7 185 | 1883,63.7 186 | 1884,63.5 187 | 1885,52.2 188 | 1886,25.4 189 | 1887,13.1 190 | 1888,6.8 191 | 1889,6.3 192 | 1890,7.1 193 | 1891,35.6 194 | 1892,73 195 | 1893,85.1 196 | 1894,78 197 | 1895,64 198 | 1896,41.8 199 | 1897,26.2 200 | 1898,26.7 201 | 1899,12.1 202 | 1900,9.5 203 | 1901,2.7 204 | 1902,5 205 | 1903,24.4 206 | 1904,42 207 | 1905,63.5 208 | 1906,53.8 209 | 1907,62 210 | 1908,48.5 211 | 1909,43.9 212 | 1910,18.6 213 | 1911,5.7 214 | 1912,3.6 215 | 1913,1.4 216 | 1914,9.6 217 | 1915,47.4 218 | 1916,57.1 219 | 1917,103.9 220 | 1918,80.6 221 | 1919,63.6 222 | 1920,37.6 223 | 1921,26.1 224 | 1922,14.2 225 | 1923,5.8 226 | 1924,16.7 227 | 1925,44.3 228 | 1926,63.9 229 | 1927,69 230 | 1928,77.8 231 | 1929,64.9 232 | 1930,35.7 233 | 1931,21.2 234 | 1932,11.1 235 | 1933,5.7 236 | 1934,8.7 237 | 1935,36.1 238 | 1936,79.7 239 | 1937,114.4 240 | 1938,109.6 241 | 1939,88.8 242 | 1940,67.8 243 | 1941,47.5 244 | 1942,30.6 245 | 1943,16.3 246 | 1944,9.6 247 | 1945,33.2 248 | 1946,92.6 249 | 1947,151.6 250 | 1948,136.3 251 | 1949,134.7 252 | 1950,83.9 253 | 1951,69.4 254 | 1952,31.5 255 | 1953,13.9 256 | 1954,4.4 257 | 1955,38 258 | 1956,141.7 259 | 1957,190.2 260 | 1958,184.8 261 | 1959,159 262 | 1960,112.3 263 | 1961,53.9 264 | 1962,37.5 265 | 1963,27.9 266 | 1964,10.2 267 | 1965,15.1 268 | 1966,47 269 | 1967,93.8 270 | 1968,105.9 271 | 1969,105.5 272 | 1970,104.5 273 | 1971,66.6 274 | 1972,68.9 275 | 1973,38 276 | 1974,34.5 277 | 1975,15.5 278 | 1976,12.6 279 | 1977,27.5 280 | 1978,92.5 281 | 1979,155.4 282 | 1980,154.7 283 | 1981,140.5 284 | 1982,115.9 285 | 1983,66.6 286 | 1984,45.9 287 | 1985,17.9 288 | 1986,13.4 289 | 1987,29.2 290 | 1988,100.2 291 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0820讨论班/1.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0827讨论班/1.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0827讨论班/原始数据.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0827讨论班/原始数据.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0827讨论班/处理后数据.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0827讨论班/处理后数据.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0827讨论班/附件1 近5年402家供应商的相关数据.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/2022暑假/0827讨论班/附件1 近5年402家供应商的相关数据.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/0903讨论班/1.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/2022暑假/readme.md: -------------------------------------------------------------------------------- 1 | . 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/22-23上/1119/0911-总结文档.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 机器学习综述\n", 8 | "主讲人:王云申 技术部\n", 9 | "\n", 10 | "总结人:刘梓艺 宣传部" 11 | ] 12 | }, 13 | { 14 | "cell_type": "markdown", 15 | "metadata": {}, 16 | "source": [ 17 | "## 1 什么是机器学习\n", 18 | "\n", 19 | "### 1.1 对机器学习的一些解释\n", 20 | "\n", 21 | "1、机器学习是这样的一个研究领域,它能让计算机不依赖确定的编码指令来自主的学习工作。 ——Arthur Samuel(亚瑟·塞缪尔),1959\n", 22 | "\n", 23 | "\n", 24 | "\n", 25 | "2、对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序在从经验E学习。——Tom M. Mitchell,1998\n", 26 | "\n", 27 | "(很多情况下,我们用准确度、正确率来作为P,衡量性能)\n", 28 | "\n", 29 | "3、机器学习可以说是计算机使用输入给它的数据,利用人类赋予它的算法得到某种模型的过程,其最终的目的则是使用该模型,预测未来未知数据的信息。——《python与机器学习实战》\n", 30 | "\n", 31 | "\n", 32 | "### 1.2 人工智能、机器学习、深度学习的关系\n", 33 | "\n", 34 | "1、人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。\n", 35 | "\n", 36 | "\n", 37 | "2、机器学习研究如何使计算机系统利用经验改善性能。它是人工智能领域的分支,也是实现人工智能的⼀种手段。在机器学习的众多研究方向中,表征学习关注如何自动找出表示数据的合适方式,以便更好地将输入变换为正确的输出。\n", 38 | "\n", 39 | "\n", 40 | "3、而深度学习是具有多级表示的表征学习方法(实现方式为改良的神经网络例如:卷积神经网络(Convolutional neural networks,CNN)、深度置信网络(Deep Belief Nets,DBN)等)。在每⼀级(从原始数据开始),深度学习通过简单的函数将该级的表示变换为更高级的表示。因此,深度学习模型也可以看作是由许多简单函数复合而成的函数。当这些复合的函数足够多时,深度学习模型就可以表达非常复杂的变换,即深度学习可以逐级表示越来越抽象的概念或模式。\n", 41 | "\n", 42 | "\n", 43 | "### 1.3 机器学习术语\n", 44 | "\n", 45 | "1、“数据集”( Data Set):其中,每一条单独的数据被称为“样本”( Sample )。数据集”也常被分为以下三类:训练集( Training Set)、测试集( Test Set)、验证集( Validation set):用来调整模型具体参数\n", 46 | "\n", 47 | "\n", 48 | "2、每个样本,它通常具有一些“属性”( Attribute)或者说“特征” ( Feature ) ,特征所具体取的值就被称为“特征值” (Feature Value ) \n", 49 | "\n", 50 | "3、特征和样本所张成的空间被称为“特征空间” (Feature Space)和“样本空间”( Sample Space ),可以把它们简单地理解为特征和样本“可能存在的空间”\n", 51 | "\n", 52 | "4、“标签空间”( Label Space),它描述了模型的输出“可能存在的空间”:当模型是分类器时,我们通常会称之为“类别空间” 。\n" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "## 2 机器学习的常用模型\n", 60 | "### 2.1 模型分类\n", 61 | "1、监督学习:训练样本数据有对应的目标值,通过对数据样本因子和已知的结果建立联系,提取特征值和映射关系,通过已知的结果,已知数据样本不断的学习和训练,对新的数据进行结果的预测。\n", 62 | "常见应用:K近邻算法、线性回归、logistic回归、支持向量机(SVM)、决策树和随机森林、神经网络等\n", 63 | "\n", 64 | "\n", 65 | "2、无监督学习:利用无标签的数据学习数据的分布或者数据之间的关系\n", 66 | "常见应用:聚类算法、主成分分析、关联规则学习\n", 67 | "(对于聚类的解释:聚类就是将一堆零散的数据根据某些标准分为几个类别,一般来说最常使用的标准是距离,距离也分为好几类,比如欧式距离(空间中两点的直线距离)、曼哈顿距离(城市街区距离)、马氏距离(数据的协方差距离)和夹角余弦)\n", 68 | "\n", 69 | "\n", 70 | "3、半监督学习:监督学习和无监督学习相互结合的一种学习方法\n", 71 | "常见应用:照片识别(少量标志与大量无标志训练集)\n", 72 | "\n", 73 | "### 2.2 常见模型\n", 74 | "1、贝叶斯分类器\n", 75 | "贝叶斯分类器是一类分类算法的总称,这类算法均以**贝叶斯定理**为基础,故统称为贝叶斯分类器。在许多场合,朴素贝叶斯(NaïveBayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据中,而且方法简单、分类准确率高、速度快。但由于其假设**每个属性独立地对分类结果发生影响**,当影响因素之间存在强关系时可能结果不好。\n", 76 | "\n", 77 | "\n", 78 | "基本原理:\n", 79 | "(1)贝叶斯定理:\n", 80 | "$$p(\\theta \\mid X)=\\frac{p(\\theta) p(X \\mid \\theta)}{p(X)}$$\n", 81 | "\n", 82 | "\n", 83 | "(2)极大似然概率:已知属性$x_1, x_2, ...x_n$,从先验概率的角度,去分析最有可能的类型$\\theta$\n", 84 | "利用每个属性独立地对分类结果发生影响:\n", 85 | "$$p(X ; \\theta) \\equiv p\\left(x_{1}, x_{2}, \\ldots, x_{N} ; \\theta\\right)=\\prod_{k=1}^{N} p\\left(x_{k} ; \\theta\\right)$$\n", 86 | "\n", 87 | "\n", 88 | "求$\\theta$变化时,概率最大时的$\\theta$:\n", 89 | "$$\\hat{\\theta}_{M L}=\\arg \\max _{\\theta} \\prod_{k=1}^{N} p\\left(x_{k} ; \\theta\\right)$$\n", 90 | "\n", 91 | "\n", 92 | "(3)最大后验估计:\n", 93 | "利用贝叶斯定理:\n", 94 | "$$p(\\theta \\mid D)=\\frac{p(D \\mid \\theta) p(\\theta)}{p(D)}=\\frac{p(D \\mid \\theta) p(\\theta)}{\\int p(D \\mid \\theta) p(\\theta) d \\theta}$$\n", 95 | "$$p(D \\mid \\theta)=\\prod_{k=1}^{N} p\\left(x_{k} \\mid \\theta\\right)$$\n", 96 | "\n", 97 | "求$\\theta$变化时,概率最大时的$\\theta$:\n", 98 | "$$\\hat{\\theta}_{M A P}=\\arg \\max _{\\theta} p(\\theta \\mid X)=\\arg \\max _{\\theta} p(\\theta) p(X \\mid \\theta)$$\n", 99 | "\n", 100 | "\n", 101 | "\n", 102 | "2、贝叶斯线性回归\n", 103 | "线性回归中由于极大似然估计总是会使得模型过于的复杂以至于产生过拟合的现象,所以单纯的适用极大似然估计并不是特别的有效。贝叶斯线性回归不仅可以解决极大似然估计中存在的过拟合的问题,而且,它对数据样本的利用率是100%,仅仅使用训练样本就可以有效而准确的确定模型的复杂度。\n", 104 | "\n", 105 | "贝叶斯线性回归:\n", 106 | "$$\\ln p(\\theta \\mid D)=\\ln p(w \\mid T)=-\\frac{\\beta}{2} \\sum_{n=1}^{N}\\left\\{y\\left(x_{n}, w\\right)-t_{n}\\right\\}^{2}+\\frac{\\alpha}{2} w^{T} w+const$$\n", 107 | "β^-1、α^-1分别为样本集合和参数w的高斯分布方差。\n", 108 | "\n", 109 | "\n", 110 | "\n", 111 | "3、决策树\n", 112 | "决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。\n", 113 | "目前常用的决策树生成算法有:\n", 114 | "1. ID3 算法可说是“最朴素”的决策树算法,它给出了\t对离散型数据分类的解决方案。\n", 115 | "2. C4.5 算法在其基础上进一步发展,给出了对混合型数 \n", 116 | "据分类的解决方案。\n", 117 | "3. CART 算法则更进一步,给出了对数据回归的解决方案。\n", 118 | "\n", 119 | "其核心思想一致:通过不断划分数据集来生成决策树,其中每一步的划分能够使当前的信息增益达到最大,即划分后系统信息熵降最大。\n", 120 | "\n", 121 | "\n", 122 | "4、支持向量机\n", 123 | "支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,SVM还包括核技巧,这使它成为实质上的非线性分类器。\n", 124 | "\n", 125 | "\n", 126 | "SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示, w*x+b=0 即为分离了超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。\n", 127 | "\n", 128 | "\n", 129 | "\n", 130 | "\n", 131 | "\n" 132 | ] 133 | }, 134 | { 135 | "cell_type": "markdown", 136 | "metadata": {}, 137 | "source": [ 138 | "## 3 实例应用\n", 139 | "现有去年工厂生产的一批白葡萄酒和红葡萄酒的十二项相关数据。而今年的白葡萄酒和红葡萄酒被实习工搞混在了一起,需要你根据每瓶酒的参数判断它是白葡萄酒还是红葡萄酒。" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 4, 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "(5847, 12)\n", 152 | "(650, 12)\n", 153 | "(5847,)\n", 154 | "(650,)\n", 155 | "[0 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1\n", 156 | " 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1\n", 157 | " 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 0\n", 158 | " 1 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0\n", 159 | " 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 1 0 1\n", 160 | " 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0\n", 161 | " 1 0 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 0 1\n", 162 | " 1 1 1 0 1 1 1 0 1 1 1 1 0 1 0 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1\n", 163 | " 1 0 1 1 1 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 1 1 1 0 1 1\n", 164 | " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1\n", 165 | " 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 0\n", 166 | " 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 0\n", 167 | " 1 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0\n", 168 | " 0 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 1 1\n", 169 | " 1 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1\n", 170 | " 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1\n", 171 | " 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 0 1 1 1 1 0 0 0 1 1 1 1 1\n", 172 | " 1 0 1 1 0 0 1 0 1 0 1 1 1 0 0 1 1 1 0 0 0]\n", 173 | "0.9830769230769231\n", 174 | "[0.00378593 0.05131628 0. 0.00096482 0.20885934 0.\n", 175 | " 0.70503636 0.01618079 0.00292311 0.01093336 0. 0. ]\n" 176 | ] 177 | } 178 | ], 179 | "source": [ 180 | "# 葡萄酒问题\n", 181 | "import pandas as pd\n", 182 | "from sklearn import model_selection\n", 183 | "from sklearn.tree import DecisionTreeClassifier\n", 184 | "from sklearn import tree\n", 185 | "import graphviz\n", 186 | "\n", 187 | "# 读入数据\n", 188 | "t = pd.read_csv(\"./winequality.csv\")\n", 189 | "t.describe()\n", 190 | "# 选择自变量、因变量\n", 191 | "xs = t[['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10','x11','y']]\n", 192 | "y = t['class']\n", 193 | "\n", 194 | "# 划分数据集\n", 195 | "xs_train, xs_test, y_train, y_test = model_selection.train_test_split(xs, y, random_state=0, test_size=0.1,shuffle=True)\n", 196 | "print(xs_train.shape)\n", 197 | "print(xs_test.shape)\n", 198 | "print(y_train.shape)\n", 199 | "print(y_test.shape)\n", 200 | "# train_data:待划分的样本数据\n", 201 | "# train_target:待划分的对应样本数据的样本标签\n", 202 | "# test_size:1)浮点数,在0 ~ 1之间,表示样本占比(test_size = 0.3,则样本数据中有30%的数据作为测试数据,记入X_test,其余70%数据记入X_train,同时适用于样本标签);2)整数,表示样本数据中有多少数据记入X_test中,其余数据记入X_train\n", 203 | "# random_state:随机数种子,种子不同,每次采的样本不一样;种子相同,采的样本不变(random_state不取,采样数据不同,但random_state等于某个值,采样数据相同,取0的时候也相同,这可以自己编程尝试下,不过想改变数值也可以设置random_state = int(time.time()))\n", 204 | "# shuffle:洗牌模式,1)shuffle = False,不打乱样本数据顺序;2)shuffle = True,打乱样本数据顺序\n", 205 | "\n", 206 | "#构建决策树\n", 207 | "est = DecisionTreeClassifier(max_depth = 5)\n", 208 | "est.fit(xs_train, y_train)\n", 209 | "yhat = est.predict(xs_test)\n", 210 | "# 预测类型\n", 211 | "print(yhat)\n", 212 | "# 模型正确率得分\n", 213 | "print(est.score(xs_test, y_test))\n", 214 | "#特征重要性\n", 215 | "print(est.feature_importances_)\n", 216 | "# DecisionTreeClassifier参数解释\n", 217 | "# https://blog.csdn.net/qq_16000815/article/details/80954039\n" 218 | ] 219 | } 220 | ], 221 | "metadata": { 222 | "kernelspec": { 223 | "display_name": "Python 3 (ipykernel)", 224 | "language": "python", 225 | "name": "python3" 226 | }, 227 | "language_info": { 228 | "codemirror_mode": { 229 | "name": "ipython", 230 | "version": 3 231 | }, 232 | "file_extension": ".py", 233 | "mimetype": "text/x-python", 234 | "name": "python", 235 | "nbconvert_exporter": "python", 236 | "pygments_lexer": "ipython3", 237 | "version": "3.9.12" 238 | }, 239 | "vscode": { 240 | "interpreter": { 241 | "hash": "3b6c1224657c578b9d3e2b49ca831d7f85bea0417468944a724420177cb04cf0" 242 | } 243 | } 244 | }, 245 | "nbformat": 4, 246 | "nbformat_minor": 2 247 | } 248 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/22-23上/1119/0911-总结文档.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/22-23上/1119/0911-总结文档.pdf -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/22-23上/1119/winequality.txt: -------------------------------------------------------------------------------- 1 | Citation Request: 2 | This dataset is public available for research. The details are described in [Cortez et al., 2009]. 3 | Please include this citation if you plan to use this database: 4 | 5 | P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. 6 | Modeling wine preferences by data mining from physicochemical properties. 7 | In Decision Support Systems, Elsevier, 47(4):547-553. ISSN: 0167-9236. 8 | 9 | Available at: [@Elsevier] http://dx.doi.org/10.1016/j.dss.2009.05.016 10 | [Pre-press (pdf)] http://www3.dsi.uminho.pt/pcortez/winequality09.pdf 11 | [bib] http://www3.dsi.uminho.pt/pcortez/dss09.bib 12 | 13 | 1. Title: Wine Quality 14 | 15 | 2. Sources 16 | Created by: Paulo Cortez (Univ. Minho), Antonio Cerdeira, Fernando Almeida, Telmo Matos and Jose Reis (CVRVV) @ 2009 17 | 18 | 3. Past Usage: 19 | 20 | P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. 21 | Modeling wine preferences by data mining from physicochemical properties. 22 | In Decision Support Systems, Elsevier, 47(4):547-553. ISSN: 0167-9236. 23 | 24 | In the above reference, two datasets were created, using red and white wine samples. 25 | The inputs include objective tests (e.g. PH values) and the output is based on sensory data 26 | (median of at least 3 evaluations made by wine experts). Each expert graded the wine quality 27 | between 0 (very bad) and 10 (very excellent). Several data mining methods were applied to model 28 | these datasets under a regression approach. The support vector machine model achieved the 29 | best results. Several metrics were computed: MAD, confusion matrix for a fixed error tolerance (T), 30 | etc. Also, we plot the relative importances of the input variables (as measured by a sensitivity 31 | analysis procedure). 32 | 33 | 4. Relevant Information: 34 | 35 | The two datasets are related to red and white variants of the Portuguese "Vinho Verde" wine. 36 | For more details, consult: http://www.vinhoverde.pt/en/ or the reference [Cortez et al., 2009]. 37 | Due to privacy and logistic issues, only physicochemical (inputs) and sensory (the output) variables 38 | are available (e.g. there is no data about grape types, wine brand, wine selling price, etc.). 39 | 40 | These datasets can be viewed as classification or regression tasks. 41 | The classes are ordered and not balanced (e.g. there are munch more normal wines than 42 | excellent or poor ones). Outlier detection algorithms could be used to detect the few excellent 43 | or poor wines. Also, we are not sure if all input variables are relevant. So 44 | it could be interesting to test feature selection methods. 45 | 46 | 5. Number of Instances: red wine - 1599; white wine - 4898. 47 | 48 | 6. Number of Attributes: 11 + output attribute 49 | 50 | Note: several of the attributes may be correlated, thus it makes sense to apply some sort of 51 | feature selection. 52 | 53 | 7. Attribute information: 54 | 55 | For more information, read [Cortez et al., 2009]. 56 | 57 | Input variables (based on physicochemical tests): 58 | 1 - fixed acidity 59 | 2 - volatile acidity 60 | 3 - citric acid 61 | 4 - residual sugar 62 | 5 - chlorides 63 | 6 - free sulfur dioxide 64 | 7 - total sulfur dioxide 65 | 8 - density 66 | 9 - pH 67 | 10 - sulphates 68 | 11 - alcohol 69 | 12 - quality (score between 0 and 10) 70 | Output variable (based on sensory data): 71 | 13 - class (0:red wine, 1: white wine) 72 | 73 | 8. Missing Attribute Values: None 74 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/22-23上/1126/adult_info.txt: -------------------------------------------------------------------------------- 1 | | This data was extracted from the census bureau database found at 2 | | http://www.census.gov/ftp/pub/DES/www/welcome.html 3 | | Donor: Ronny Kohavi and Barry Becker, 4 | | Data Mining and Visualization 5 | | Silicon Graphics. 6 | | e-mail: ronnyk@sgi.com for questions. 7 | | Split into train-test using MLC++ GenCVFiles (2/3, 1/3 random). 8 | | 48842 instances, mix of continuous and discrete (train=32561, test=16281) 9 | | 45222 if instances with unknown values are removed (train=30162, test=15060) 10 | | Duplicate or conflicting instances : 6 11 | | Class probabilities for adult.all file 12 | | Probability for the label '>50K' : 23.93% / 24.78% (without unknowns) 13 | | Probability for the label '<=50K' : 76.07% / 75.22% (without unknowns) 14 | | 15 | | Extraction was done by Barry Becker from the 1994 Census database. A set of 16 | | reasonably clean records was extracted using the following conditions: 17 | | ((AAGE>16) && (AGI>100) && (AFNLWGT>1)&& (HRSWK>0)) 18 | | 19 | | Prediction task is to determine whether a person makes over 50K 20 | | a year. 21 | | 22 | | First cited in: 23 | | @inproceedings{kohavi-nbtree, 24 | | author={Ron Kohavi}, 25 | | title={Scaling Up the Accuracy of Naive-Bayes Classifiers: a 26 | | Decision-Tree Hybrid}, 27 | | booktitle={Proceedings of the Second International Conference on 28 | | Knowledge Discovery and Data Mining}, 29 | | year = 1996, 30 | | pages={to appear}} 31 | | 32 | | Error Accuracy reported as follows, after removal of unknowns from 33 | | train/test sets): 34 | | C4.5 : 84.46+-0.30 35 | | Naive-Bayes: 83.88+-0.30 36 | | NBTree : 85.90+-0.28 37 | | 38 | | 39 | | Following algorithms were later run with the following error rates, 40 | | all after removal of unknowns and using the original train/test split. 41 | | All these numbers are straight runs using MLC++ with default values. 42 | | 43 | | Algorithm Error 44 | | -- ---------------- ----- 45 | | 1 C4.5 15.54 46 | | 2 C4.5-auto 14.46 47 | | 3 C4.5 rules 14.94 48 | | 4 Voted ID3 (0.6) 15.64 49 | | 5 Voted ID3 (0.8) 16.47 50 | | 6 T2 16.84 51 | | 7 1R 19.54 52 | | 8 NBTree 14.10 53 | | 9 CN2 16.00 54 | | 10 HOODG 14.82 55 | | 11 FSS Naive Bayes 14.05 56 | | 12 IDTM (Decision table) 14.46 57 | | 13 Naive-Bayes 16.12 58 | | 14 Nearest-neighbor (1) 21.42 59 | | 15 Nearest-neighbor (3) 20.35 60 | | 16 OC1 15.04 61 | | 17 Pebls Crashed. Unknown why (bounds WERE increased) 62 | | 63 | | Conversion of original data as follows: 64 | | 1. Discretized agrossincome into two ranges with threshold 50,000. 65 | | 2. Convert U.S. to US to avoid periods. 66 | | 3. Convert Unknown to "?" 67 | | 4. Run MLC++ GenCVFiles to generate data,test. 68 | | 69 | | Description of fnlwgt (final weight) 70 | | 71 | | The weights on the CPS files are controlled to independent estimates of the 72 | | civilian noninstitutional population of the US. These are prepared monthly 73 | | for us by Population Division here at the Census Bureau. We use 3 sets of 74 | | controls. 75 | | These are: 76 | | 1. A single cell estimate of the population 16+ for each state. 77 | | 2. Controls for Hispanic Origin by age and sex. 78 | | 3. Controls by Race, age and sex. 79 | | 80 | | We use all three sets of controls in our weighting program and "rake" through 81 | | them 6 times so that by the end we come back to all the controls we used. 82 | | 83 | | The term estimate refers to population totals derived from CPS by creating 84 | | "weighted tallies" of any specified socio-economic characteristics of the 85 | | population. 86 | | 87 | | People with similar demographic characteristics should have 88 | | similar weights. There is one important caveat to remember 89 | | about this statement. That is that since the CPS sample is 90 | | actually a collection of 51 state samples, each with its own 91 | | probability of selection, the statement only applies within 92 | | state. 93 | 94 | 95 | >50K, <=50K. 96 | 97 | age: continuous. 98 | workclass: Private, Self-emp-not-inc, Self-emp-inc, Federal-gov, Local-gov, State-gov, Without-pay, Never-worked. 99 | fnlwgt: continuous. 100 | education: Bachelors, Some-college, 11th, HS-grad, Prof-school, Assoc-acdm, Assoc-voc, 9th, 7th-8th, 12th, Masters, 1st-4th, 10th, Doctorate, 5th-6th, Preschool. 101 | education-num: continuous. 102 | marital-status: Married-civ-spouse, Divorced, Never-married, Separated, Widowed, Married-spouse-absent, Married-AF-spouse. 103 | occupation: Tech-support, Craft-repair, Other-service, Sales, Exec-managerial, Prof-specialty, Handlers-cleaners, Machine-op-inspct, Adm-clerical, Farming-fishing, Transport-moving, Priv-house-serv, Protective-serv, Armed-Forces. 104 | relationship: Wife, Own-child, Husband, Not-in-family, Other-relative, Unmarried. 105 | race: White, Asian-Pac-Islander, Amer-Indian-Eskimo, Other, Black. 106 | sex: Female, Male. 107 | capital-gain: continuous. 108 | capital-loss: continuous. 109 | hours-per-week: continuous. 110 | native-country: United-States, Cambodia, England, Puerto-Rico, Canada, Germany, Outlying-US(Guam-USVI-etc), India, Japan, Greece, South, China, Cuba, Iran, Honduras, Philippines, Italy, Poland, Jamaica, Vietnam, Mexico, Portugal, Ireland, France, Dominican-Republic, Laos, Ecuador, Taiwan, Haiti, Columbia, Hungary, Guatemala, Nicaragua, Scotland, Thailand, Yugoslavia, El-Salvador, Trinadad&Tobago, Peru, Hong, Holand-Netherlands. 111 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/22-23上/1126/iris_info.txt: -------------------------------------------------------------------------------- 1 | 1. Title: Iris Plants Database 2 | Updated Sept 21 by C.Blake - Added discrepency information 3 | 4 | 2. Sources: 5 | (a) Creator: R.A. Fisher 6 | (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov) 7 | (c) Date: July, 1988 8 | 9 | 3. Past Usage: 10 | - Publications: too many to mention!!! Here are a few. 11 | 1. Fisher,R.A. "The use of multiple measurements in taxonomic problems" 12 | Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions 13 | to Mathematical Statistics" (John Wiley, NY, 1950). 14 | 2. Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis. 15 | (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218. 16 | 3. Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System 17 | Structure and Classification Rule for Recognition in Partially Exposed 18 | Environments". IEEE Transactions on Pattern Analysis and Machine 19 | Intelligence, Vol. PAMI-2, No. 1, 67-71. 20 | -- Results: 21 | -- very low misclassification rates (0% for the setosa class) 22 | 4. Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE 23 | Transactions on Information Theory, May 1972, 431-433. 24 | -- Results: 25 | -- very low misclassification rates again 26 | 5. See also: 1988 MLC Proceedings, 54-64. Cheeseman et al's AUTOCLASS II 27 | conceptual clustering system finds 3 classes in the data. 28 | 29 | 4. Relevant Information: 30 | --- This is perhaps the best known database to be found in the pattern 31 | recognition literature. Fisher's paper is a classic in the field 32 | and is referenced frequently to this day. (See Duda & Hart, for 33 | example.) The data set contains 3 classes of 50 instances each, 34 | where each class refers to a type of iris plant. One class is 35 | linearly separable from the other 2; the latter are NOT linearly 36 | separable from each other. 37 | --- Predicted attribute: class of iris plant. 38 | --- This is an exceedingly simple domain. 39 | --- This data differs from the data presented in Fishers article 40 | (identified by Steve Chadwick, spchadwick@espeedaz.net ) 41 | The 35th sample should be: 4.9,3.1,1.5,0.2,"Iris-setosa" 42 | where the error is in the fourth feature. 43 | The 38th sample: 4.9,3.6,1.4,0.1,"Iris-setosa" 44 | where the errors are in the second and third features. 45 | 46 | 5. Number of Instances: 150 (50 in each of three classes) 47 | 48 | 6. Number of Attributes: 4 numeric, predictive attributes and the class 49 | 50 | 7. Attribute Information: 51 | 1. sepal length in cm 52 | 2. sepal width in cm 53 | 3. petal length in cm 54 | 4. petal width in cm 55 | 5. class: 56 | -- Iris Setosa 57 | -- Iris Versicolour 58 | -- Iris Virginica 59 | 60 | 8. Missing Attribute Values: None 61 | 62 | Summary Statistics: 63 | Min Max Mean SD Class Correlation 64 | sepal length: 4.3 7.9 5.84 0.83 0.7826 65 | sepal width: 2.0 4.4 3.05 0.43 -0.4194 66 | petal length: 1.0 6.9 3.76 1.76 0.9490 (high!) 67 | petal width: 0.1 2.5 1.20 0.76 0.9565 (high!) 68 | 69 | 9. Class Distribution: 33.3% for each of 3 classes. 70 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/22-23上/1126/mushroom_info.txt: -------------------------------------------------------------------------------- 1 | 1. Title: Mushroom Database 2 | 3 | 2. Sources: 4 | (a) Mushroom records drawn from The Audubon Society Field Guide to North 5 | American Mushrooms (1981). G. H. Lincoff (Pres.), New York: Alfred 6 | A. Knopf 7 | (b) Donor: Jeff Schlimmer (Jeffrey.Schlimmer@a.gp.cs.cmu.edu) 8 | (c) Date: 27 April 1987 9 | 10 | 3. Past Usage: 11 | 1. Schlimmer,J.S. (1987). Concept Acquisition Through Representational 12 | Adjustment (Technical Report 87-19). Doctoral disseration, Department 13 | of Information and Computer Science, University of California, Irvine. 14 | --- STAGGER: asymptoted to 95% classification accuracy after reviewing 15 | 1000 instances. 16 | 2. Iba,W., Wogulis,J., & Langley,P. (1988). Trading off Simplicity 17 | and Coverage in Incremental Concept Learning. In Proceedings of 18 | the 5th International Conference on Machine Learning, 73-79. 19 | Ann Arbor, Michigan: Morgan Kaufmann. 20 | -- approximately the same results with their HILLARY algorithm 21 | 3. In the following references a set of rules (given below) were 22 | learned for this data set which may serve as a point of 23 | comparison for other researchers. 24 | 25 | Duch W, Adamczak R, Grabczewski K (1996) Extraction of logical rules 26 | from training data using backpropagation networks, in: Proc. of the 27 | The 1st Online Workshop on Soft Computing, 19-30.Aug.1996, pp. 25-30, 28 | available on-line at: http://www.bioele.nuee.nagoya-u.ac.jp/wsc1/ 29 | 30 | Duch W, Adamczak R, Grabczewski K, Ishikawa M, Ueda H, Extraction of 31 | crisp logical rules using constrained backpropagation networks - 32 | comparison of two new approaches, in: Proc. of the European Symposium 33 | on Artificial Neural Networks (ESANN'97), Bruge, Belgium 16-18.4.1997, 34 | pp. xx-xx 35 | 36 | Wlodzislaw Duch, Department of Computer Methods, Nicholas Copernicus 37 | University, 87-100 Torun, Grudziadzka 5, Poland 38 | e-mail: duch@phys.uni.torun.pl 39 | WWW http://www.phys.uni.torun.pl/kmk/ 40 | 41 | Date: Mon, 17 Feb 1997 13:47:40 +0100 42 | From: Wlodzislaw Duch 43 | Organization: Dept. of Computer Methods, UMK 44 | 45 | I have attached a file containing logical rules for mushrooms. 46 | It should be helpful for other people since only in the last year I 47 | have seen about 10 papers analyzing this dataset and obtaining quite 48 | complex rules. We will try to contribute other results later. 49 | 50 | With best regards, Wlodek Duch 51 | ________________________________________________________________ 52 | 53 | Logical rules for the mushroom data sets. 54 | 55 | Logical rules given below seem to be the simplest possible for the 56 | mushroom dataset and therefore should be treated as benchmark results. 57 | 58 | Disjunctive rules for poisonous mushrooms, from most general 59 | to most specific: 60 | 61 | P_1) odor=NOT(almond.OR.anise.OR.none) 62 | 120 poisonous cases missed, 98.52% accuracy 63 | 64 | P_2) spore-print-color=green 65 | 48 cases missed, 99.41% accuracy 66 | 67 | P_3) odor=none.AND.stalk-surface-below-ring=scaly.AND. 68 | (stalk-color-above-ring=NOT.brown) 69 | 8 cases missed, 99.90% accuracy 70 | 71 | P_4) habitat=leaves.AND.cap-color=white 72 | 100% accuracy 73 | 74 | Rule P_4) may also be 75 | 76 | P_4') population=clustered.AND.cap_color=white 77 | 78 | These rule involve 6 attributes (out of 22). Rules for edible 79 | mushrooms are obtained as negation of the rules given above, for 80 | example the rule: 81 | 82 | odor=(almond.OR.anise.OR.none).AND.spore-print-color=NOT.green 83 | 84 | gives 48 errors, or 99.41% accuracy on the whole dataset. 85 | 86 | Several slightly more complex variations on these rules exist, 87 | involving other attributes, such as gill_size, gill_spacing, 88 | stalk_surface_above_ring, but the rules given above are the simplest 89 | we have found. 90 | 91 | 92 | 4. Relevant Information: 93 | This data set includes descriptions of hypothetical samples 94 | corresponding to 23 species of gilled mushrooms in the Agaricus and 95 | Lepiota Family (pp. 500-525). Each species is identified as 96 | definitely edible, definitely poisonous, or of unknown edibility and 97 | not recommended. This latter class was combined with the poisonous 98 | one. The Guide clearly states that there is no simple rule for 99 | determining the edibility of a mushroom; no rule like ``leaflets 100 | three, let it be'' for Poisonous Oak and Ivy. 101 | 102 | 5. Number of Instances: 8124 103 | 104 | 6. Number of Attributes: 22 (all nominally valued) 105 | 106 | 7. Attribute Information: (classes: edible=e, poisonous=p) 107 | 1. cap-shape: bell=b,conical=c,convex=x,flat=f, 108 | knobbed=k,sunken=s 109 | 2. cap-surface: fibrous=f,grooves=g,scaly=y,smooth=s 110 | 3. cap-color: brown=n,buff=b,cinnamon=c,gray=g,green=r, 111 | pink=p,purple=u,red=e,white=w,yellow=y 112 | 4. bruises?: bruises=t,no=f 113 | 5. odor: almond=a,anise=l,creosote=c,fishy=y,foul=f, 114 | musty=m,none=n,pungent=p,spicy=s 115 | 6. gill-attachment: attached=a,descending=d,free=f,notched=n 116 | 7. gill-spacing: close=c,crowded=w,distant=d 117 | 8. gill-size: broad=b,narrow=n 118 | 9. gill-color: black=k,brown=n,buff=b,chocolate=h,gray=g, 119 | green=r,orange=o,pink=p,purple=u,red=e, 120 | white=w,yellow=y 121 | 10. stalk-shape: enlarging=e,tapering=t 122 | 11. stalk-root: bulbous=b,club=c,cup=u,equal=e, 123 | rhizomorphs=z,rooted=r,missing=? 124 | 12. stalk-surface-above-ring: fibrous=f,scaly=y,silky=k,smooth=s 125 | 13. stalk-surface-below-ring: fibrous=f,scaly=y,silky=k,smooth=s 126 | 14. stalk-color-above-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, 127 | pink=p,red=e,white=w,yellow=y 128 | 15. stalk-color-below-ring: brown=n,buff=b,cinnamon=c,gray=g,orange=o, 129 | pink=p,red=e,white=w,yellow=y 130 | 16. veil-type: partial=p,universal=u 131 | 17. veil-color: brown=n,orange=o,white=w,yellow=y 132 | 18. ring-number: none=n,one=o,two=t 133 | 19. ring-type: cobwebby=c,evanescent=e,flaring=f,large=l, 134 | none=n,pendant=p,sheathing=s,zone=z 135 | 20. spore-print-color: black=k,brown=n,buff=b,chocolate=h,green=r, 136 | orange=o,purple=u,white=w,yellow=y 137 | 21. population: abundant=a,clustered=c,numerous=n, 138 | scattered=s,several=v,solitary=y 139 | 22. habitat: grasses=g,leaves=l,meadows=m,paths=p, 140 | urban=u,waste=w,woods=d 141 | 142 | 8. Missing Attribute Values: 2480 of them (denoted by "?"), all for 143 | attribute #11. 144 | 145 | 9. Class Distribution: 146 | -- edible: 4208 (51.8%) 147 | -- poisonous: 3916 (48.2%) 148 | -- total: 8124 instances 149 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/22-23上/1126/朴素贝叶斯原理.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/22-23上/1126/朴素贝叶斯原理.pdf -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/Demo/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/Demo/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/Demo/Python 在高数和线代中的应用——总结文档.md: -------------------------------------------------------------------------------- 1 | # Python 在高数和线代中的应用——总结文档 2 | 3 | ## 1 背景 4 | 5 | SymPy 是 Python 版的开源计算机代数系统实现,通俗地讲 SymPy 是 用于符号运算的工具库。SymPy 包括许多功能,从基本的符号算术到多项式、微积分、求解方 程、离散数学和统计等。它主要处理三种类型的数据:整型数据、实数和有 理数。有理数包括两个部分:分子和分母,可以用 Ration 类定义有理数。 本节通过示例程序来理解 SymPy 的概念及应用。 6 | 7 | ## 2 实例 8 | 9 | ### 2.1 求极限 10 | 11 | 12 | $$ 13 | \lim_{x\rightarrow 0}\frac{\sin x}{x}, \lim_{x\rightarrow +\infty}(1+\frac{1}{x})^x 14 | $$ 15 | 16 | ```python 17 | from sympy import * 18 | x=symbols('x') 19 | print(limit(sin(x)/x,x,0)) 20 | print(limit(pow(1+1/x,x),x,oo)) #这里是两个小”o”,表示正无穷 21 | ``` 22 | 23 | ### 2.2 求导数 24 | 25 | $$ 26 | z=\sin x+x^{2} e^{y}, \text { 求 } \frac{\partial^{2} z}{\partial x^{2}}, \frac{\partial z}{\partial y} 27 | $$ 28 | 29 | ```python 30 | from sympy import * 31 | x,y=symbols('x y') # 定义两个符号变量 32 | z=sin(x)+x**2*exp(y) # 构造符号表达式 33 | print("关于 x 的二阶偏导数为:",diff(z,x,2)) 34 | print("关于 y 的一阶偏导数为:",diff(z,y)) 35 | ``` 36 | 37 | ### 2.3 级数求和 38 | 39 | $$ 40 | \text { 验证 } \sum_{k=1}^{n} k^{2}=\frac{n(n+1)(2 n+1)}{6}, \sum_{k=1}^{\infty} \frac{1}{k^{2}}=\frac{\pi^{2}}{6} \text { 。 } 41 | $$ 42 | 43 | ```python 44 | from sympy import * 45 | k,n=symbols('k n') 46 | print(summation(k**2,(k,1,n))) 47 | print(factor(summation(k**2,(k,1,n)))) # 把计算结果因式分解 48 | print(summation(1/k**2,(k,1,oo))) # 这里是两个小 o 表示正无穷 49 | ``` 50 | 51 | ### 2.4 泰勒展开 52 | 53 | 写出 $\sin x$ 在 0 点处的 $3,5,7$ 阶泰勒展开式, 并在同一图形界面 上画出 $\sin x$ 及它的上述各阶泰勒展开式在区间 $[0,2]$ 上的图形。 54 | 55 | ```python 56 | from pylab import rc 57 | from sympy import * 58 | rc('font',size=16); rc('text',usetex=True) 59 | x=symbols('x'); 60 | y=sin(x) 61 | for k in range(3,8,2): 62 | print(y.series(x,0,k)) # 等价于 print(series(y,x,0,k)) 63 | plot(y,series(y,x,0,3).removeO(),series(y,x,0,5).removeO(), 64 | series(y,x,0,7).removeO(),(x,0,2),xlabel='$x$',ylabel='$y$') 65 | ``` 66 | 67 | ``` 68 | x + O(x**3) 69 | x - x**3/6 + O(x**5) 70 | x - x**3/6 + x**5/120 + O(x**7) 71 | ``` 72 | 73 | ![image-20210920161018200](https://gitee.com/bai299/images/raw/master/image-20210920161018200.png) 74 | 75 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/Demo/会议numpy 总结_1010.md: -------------------------------------------------------------------------------- 1 | ```python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Created on Sun Oct 3 15:16:45 2021 5 | 6 | @author: UMR 7 | """ 8 | 9 | import numpy as np 10 | import time #休眠 11 | import matplotlib.pyplot as plt#plot()函数中的参数意思为:plot(x,y,形状) 12 | import keyboard #检测键盘事件,控制上下左右 13 | #pip install keyboard 14 | #应用实例:利用该代码可以实现录制 10 秒钟的键盘事件,并将其回放一遍 15 | """ 16 | import keyboard 17 | import time 18 | 19 | keyboard.start_recording() 20 | time.sleep(10) 21 | events = keyboard.stop_recording() 22 | keyboard.replay(events) 23 | """ 24 | 25 | #只介绍常用的,其他的随用随查 26 | #低频使用,不要追求全知全能 27 | #有些拼写并不是单词,注意 28 | #常用生成方式展示 29 | #此处的内容是方便大家理解整个逻辑,不太明白也不太会影响使用的。NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。 30 | #在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。 31 | #很多时候可以声明 axis。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。 32 | 33 | a=np.array(([1,2],[2,3])) #array:数组。 array() 函数可以将 Python 的任何序列类型转换为 ndarray 数组。 34 | b1=np.arange(1,10,1)#()内参数的含义为:【起始,终止(不含)),步长 35 | 36 | #range and np.range的区别 37 | #range()和np.arange()的返回类型不同,range()返回的是range;object,而np.arange()返回的是ndarray类型range()不支持步长为小数,而np.arange()支持步长(step)为小数range()和np.arange()都可用于迭代;range()和np.arange()都有三个参数,以第一个参数为起点,第三个参数为步长,截止到第二个参数之前的不包括第二个参数的数据序列。range()可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向量使用。 38 | 39 | 40 | b2=np.linspace(1,10,5)#创建形式为等差序列的一维数组的函数,参数意义分别是:起始,终止(含),总个数 41 | c=np.zeros((2,2))#0矩阵 42 | d=np.ones((3,2),dtype="int")#单位矩阵 43 | e=np.eye(3)#对角矩阵 44 | f=np.empty((2,4))#创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组 45 | g=np.random.rand(2,2)#生成一个服从【0,1)均匀分布的随机样本值 46 | #有时候传一个元组,有时候传多个参数 47 | #真随机,非正态分布,推荐 48 | #0~1分布不包括1 49 | #多个参数来表示维度时,参数只能是维度,而用元组表示维度时,可以有其他参数(ep:dtye) 50 | #还有np.random.seed 用于科研结果的复现 51 | 52 | g1=np.ceil(np.random.rand()*5)#向上取整 53 | #等可能生成1-5 54 | #不要用round,思考原因,随机数范围【0~1)#向上取整 55 | g2=np.floor(np.random.rand(2,2)*3)#向下取整 56 | g3=np.round(0.5)#该句语法为np.round(x,[,n])x 是数值表达式,n 是数值表达式,表示从小数点位数。作用是返回浮点数x的四舍五入值。当参数n不存在时,round()函数的输出为整数。当参数n存在时,即使为0,round()函数的输出也会是一个浮点数。此外,n的值可以是负数,表示在整数位部分四舍五入,但结果仍是浮点数。 57 | g4=np.round(1.5)#舍入遵循偶数原则,例如2.5会变成2,3,5会变成3 58 | 59 | 60 | 61 | #常用特性展示 理解 62 | h=np.array(([2,3],[1,3])) 63 | h1=h*3#对每一个数*3 64 | h2=h*h#对应位置的数相乘,因此要求形状相同,不是矩阵乘,而是点乘 65 | h3=np.dot(h,h)#内积 66 | h4=h.dot(h)#内积 67 | h5=np.sin(h)#对矩阵内每一个数都应用这个函数 68 | 69 | h6=np.array((1,2)) 70 | h7=h6#直接等于没有经过计算,就是浅拷贝,相当于起小名,指向同一对象,可以联系指针来理解 71 | h8=h6.copy()#也可表示为np.copy(h6) 72 | #深拷贝,互相独立 73 | h6+=1#在浅拷贝时h7也+1了,但在深拷贝则不会 74 | 75 | 76 | #常用属性读取展示 即用即查即可 77 | i=np.size(d)#大小,=所有元素个数 78 | it=d.size #另一种方式查看数组元素的总个数 79 | i1=np.size(d,0)#生成时第一个参数大小,即“行数” 80 | i2=np.size(d,1)#“列数” 81 | i3=np.shape(d)#数组的维度 82 | i4=d.dtype#class下既有属性也有函数,了解类的知识 83 | i5=np.ndim(d)#dim是英文dimension维度的缩写,因此对于一个数组,其shape属性的长度(length)也既是它的ndim. 84 | 85 | 86 | #常用操作展示 87 | #变形 88 | j=np.linspace(1,10,10)#生成等差数列 89 | j1=j.reshape(2,5)#不改变原数组,返回变形后数组,-1的用法,但必须要能够整除 90 | j2=np.linspace(1,6,6) 91 | j_empty=j2.resize(3,2)#改变原数组,返回空 92 | j3=np.resize(j,(5,2))#another写法 93 | 94 | 95 | #增删改查 96 | k= 97 | k=np.array([[1,3,2,4,5],[1,1,1,1,1]])#之后的操作都不会改变k 98 | k1=np.append(k,99) #append会把数据拉成1维 99 | 100 | k2=np.insert(k,3,99) 101 | #用法是将向量插入某一行或列,语法为:numpy.insert(arr, obj, values, axis=None) 102 | #不指定第四个参数(axis)就先拉平,再插入,如果是多维只插入一个数,那就会先拉平再插 103 | #如果是三维变二维呢?一个数就利用广播机制拉平,但如果是3需要2则不可以,会报错 104 | 105 | k3=np.insert(k,0,99,axis=0)#按行插入,若只有一个插入值,则改行全部等于此值,广播机制 106 | k4=np.insert(k,4,[99,66],axis=1)#按列插入,也可以直接指定插入的所有值,以元组或列表的形式 107 | 108 | k5=np.delete(k,3)#一样,不指定axis就先拉平,k是原来的,返回了一个不同的东西 109 | k6=np.delete(k,1,0)#指定后,删掉一整行/一整列 110 | 111 | #ka是一维,kb是多维 112 | ka=np.arange(1,10,1) 113 | kb=np.linspace(-np.pi,np.pi,12).reshape(3,4) 114 | ka1=ka[1:3] 115 | ka2=ka[5:] 116 | ka3=ka[:-3] 117 | ka4=ka[1:10:2]#缺省第一,第二个参数,则默认选到一端结束,缺省第三个参数默认步长为1,步长可为负,左闭右开,后面是步长 118 | ka5=ka[::-1]#反向 119 | ka6=ka[[1,2,4,7]]#选出第2,3,5,8个数,注意:必须以列表的形式传参,否则会被理解成多维取数而报错 120 | 121 | kb1=kb[1]#对多维数组,第一个参数是按行选取 122 | kb2=kb[:,2]#这是按列选取 123 | kb3=kb[1,2]#选出一个特定的数组 124 | kb4=kb[1:3,2:4]#选出一块区域内包含的数组,别忘了左闭右开 125 | 126 | kc=np.linspace(-10,10,20).reshape(4,5) 127 | kc1=kc[kc>3] 128 | kc2=kc[kc*2>5] 129 | kc3=kc/3<-1#直接给出bool矩阵,使用此矩阵可以直接取值,以及对其他形状相同的矩阵取值 130 | kc4=kc[kc3] 131 | kd=kc**2#**表示乘方 matlab是^ 132 | kd1=kd[kc3] 133 | 134 | #次常用操作演示 135 | la=np.arange(1,7,1).reshape(2,3) 136 | lb=-la 137 | l1=np.concatenate((la,lb),0)#函数在一个指定的轴上连接多个数组。它接受一个数组序列作为参数,并将它们连接成一数组。 138 | # axis=0:按行拼接,=1则按列拼接 139 | #其标准语法为:numpy.concatenate((a1, a2,...),axis= 0, out= None) 140 | l2=np.concatenate((la,lb),axis=1)#1:按列 141 | l3=np.concatenate((la,la,la,lb),1)#concatenate属实万能,可以同时拼接多个,只需记忆这一个即可 142 | 143 | l4=np.split(la,3,1)#其标准语法为:np.split(ary,indices_or_sections, axis=0) 144 | #作用是把一个数组从左到右按顺序切分 145 | print(l4) 146 | #不均等分割的语法 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | ``` 175 | 176 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/Demo/综合评价模型——总结文档.md: -------------------------------------------------------------------------------- 1 | # 综合评价模型——总结文档 2 | 3 | ## 1 背景 4 | 5 | 在实际应用中,经常遇到有关综合评价问题,如医疗质量和环境质量的综合评价等。所谓综合评价是指根据一个系统同时受到多种因素影响的特点,在综合考察多个有关因素,依据多个相关指标对系统进行总评价的方法。目前,已经提出了很多综合评价的方法,如 TOPSIS 方法、层次分析法、模糊综合评价法、灰色系统法等。这些方法各具特色也各有利弊,由于受到多方面因素的影响,如何使评价更准确和更科学,一直是人们不断研究的课题。 6 | 7 | ## 2 实例 8 | 9 | ### 2.1 问题 10 | 11 | 下面我们考虑一个战斗机性能的综合评价问题。 12 | 13 | 战斗机的性能指标主要包括最大速度、飞行半径、最大负载、 隐身性能、垂直起降性能、可靠性、灵敏度等指标和相关费用。综合各方面 因素与条件,忽略了隐身性能和垂直起降性能,只考虑余下的 6 项指标, 请就 $A_1 ,A_2, A_3$ , 和 $A_4$ 四种类型战斗机的性能进行评价分析,其 6 项指标值如 表 9.3 所示。 14 | 15 | ![image-20210920101431316](https://gitee.com/bai299/images/raw/master/image-20210920101431316.png) 16 | 17 | 假设将 6 项指标依次记为 $x_1, x_2, \cdots, x_6$ ,首先将 $x_5$ 和 $x_6$ 两项定性指标进行量化处理,量化后的数据如表 9.4 所示。 18 | 19 | ![image-20210920101557364](https://gitee.com/bai299/images/raw/master/image-20210920101557364.png) 20 | 21 | 数值型指标中 $x_1, x_2, x_3$ 为极大型指标,费用 $x_4$ 为极小型指标。下面给出几种处理方式的结果。采用向量归一化法对各指标进行标准化处理,可得评 价矩阵 $R_1$ 为 22 | 23 | ![image-20210920101726561](https://gitee.com/bai299/images/raw/master/image-20210920101726561.png) 24 | 25 | 采用比例变换法对各数值型指标进行标准化处理,可得评价矩阵 $R_2$ 为 26 | 27 | ![image-20210920155033641](https://gitee.com/bai299/images/raw/master/image-20210920155033641.png) 28 | 29 | 采用极差变换法对各数值型指标进行标准化处理,可得评价矩阵 $R_3$ 为 30 | 31 | ![image-20210920155109514](https://gitee.com/bai299/images/raw/master/image-20210920155109514.png) 32 | 33 | ### 2.2 代码 34 | 35 | ```c++ 36 | ``` 37 | 38 | 39 | 40 | ```python 41 | import numpy as np 42 | import pandas as pd 43 | a=np.loadtxt("Pdata9_1_1.txt",) 44 | R1=a.copy(); R2=a.copy(); R3=a.copy() # 初始化 #注意 R1=a,它们的内存地址一样,R1 改变时,a 也改变 45 | for j in [0,1,2,4,5]: 46 | R1[:,j]=R1[:,j]/np.linalg.norm(R1[:,j]) #向量归一化 47 | R2[:,j]=R1[:,j]/max(R1[:,j]) # 比例变换 48 | R3[:,j]=(R3[:,j]-min(R3[:,j]))/(max(R3[:,j])-min(R3[:,j])) 49 | 50 | R1[:,3]=1-R1[:,3]/np.linalg.norm(R1[:,3]) 51 | R2[:,3]=min(R2[:,3])/R2[:,3] 52 | R3[:,3]=(max(R3[:,3])-R3[:,3])/(max(R3[:,3])-min(R3[:,3])) 53 | 54 | np.savetxt("Pdata9_1_2.txt", R1) #把数据写入文本文件,供下面使用 55 | np.savetxt("Pdata9_1_3.txt", R2) 56 | np.savetxt("Pdata9_1_4.txt", R3) 57 | 58 | DR1=pd.DataFrame(R1) # 生成 DataFrame 类型数据 59 | DR2=pd.DataFrame(R2) 60 | DR3=pd.DataFrame(R3) 61 | 62 | f=pd.ExcelWriter('Pdata9_1_5.xlsx') # 创建文件对象 63 | DR1.to_excel(f,"sheet1") # 把 DR1 写入 Excel 文件 1 号表单中,方便做表 64 | DR2.to_excel(f,"sheet2") 65 | DR3.to_excel(f, "Sheet3") 66 | f.save( 67 | ``` 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班01/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班01/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班01/数据处理与可视化(一)——Numpy基础.md: -------------------------------------------------------------------------------- 1 | # 数据处理与可视化(一)——Numpy基础 2 | 3 | ## 1 背景 4 | 5 | 虽然列表 list 可以完成数组操作,但不是真正意义上的数组,当数据量很大时,其速度很慢,故提供了 NumPy 扩展库完成数组操作。很多高级扩展库也依赖于它,比如 Scipy、Pandas 和 Matplotlib 等。 NumPy 提供了两种基本的对象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray(称为 array 数 组,下文统一称为数组)是存储单一数据类型的多维数组,而 ufunc 则是能够对数组进行处理的通用函数。 6 | 7 | ## 2 实例 8 | 9 | NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。 10 | 11 | 在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。 12 | 13 | 很多时候可以声明 axis. axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。 14 | 15 | ### 2.1 创建数组 16 | 17 | 首先要导入numpy模块,如果没有报错,需要通过`pip install numpy`安装numpy库。下面我们通过几个例子来说明如何创建数组 18 | 19 | ```python 20 | import numpy as np 21 | a=np.array(([1,2],[2,3])) #array:数组。 array() 函数可以将 Python 的任何序列类型转换为 ndarray 数组。 22 | b1=np.arange(1,10,1)#()内参数的含义为:【起始,终止(不含)),步长 23 | b2=np.linspace(1,10,5)#创建形式为等差序列的一维数组的函数,参数意义分别是:起始,终止(含),总个数 24 | c=np.zeros((2,2))#0矩阵 25 | d=np.ones((3,2),dtype="int")#全1矩阵 26 | e=np.eye(3)#单位矩阵 27 | f=np.empty((2,4))#创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组 28 | g=np.random.rand(2,2)#生成一个服从[0,1)均匀分布的随机样本值 29 | #有时候传一个元组,有时候传多个参数 30 | #真随机,非正态分布,推荐 31 | #0~1分布不包括1 32 | #多个参数来表示维度时,参数只能是维度,而用元组表示维度时,可以有其他参数(ep:dtye) 33 | ``` 34 | 35 | > **range and np.arange的区别** 36 | > 37 | > range()和np.arange()的返回类型不同,range()返回的是range;object,而np.arange()返回的是ndarray类型range()不支持步长为小数,而np.arange()支持步长(step)为小数range()和np.arange()都可用于迭代;range()和np.arange()都有三个参数,以第一个参数为起点,第三个参数为步长,截止到第二个参数之前的不包括第二个参数的数据序列。range()可用于迭代,而np.arange作用远不止于此,它是一个序列,可被当做向量使用。 38 | 39 | ### 2.2 设置随机种子 40 | 41 | `np.random.seed()` 可以设置随机种子,在实际中也非常有用,可以用于实验结果的复现等。 42 | 43 | ```python 44 | np.random.seed(0) #设置随机种子为0 45 | np.random.rand() #这样每次生成的随机数是固定的 46 | ``` 47 | 48 | ### 2.3 取整操作 49 | 50 | 下面介绍三种常用的取整操作,`np.ceil, np.floor, np.round` 51 | 52 | ```python 53 | g1=np.ceil(np.random.rand()*5)#向上取整 54 | #等可能生成1-5 55 | #不要用round,思考原因,随机数范围[0~1)#向上取整 56 | g2=np.floor(np.random.rand(2,2)*3)#向下取整 57 | g3=np.round(0.5)#该句语法为np.round(x,[,n])x 是数值表达式,n 是数值表达式,表示从小数点位数。作用是返回浮点数x的四舍五入值。当参数n不存在时,round()函数的输出为整数。当参数n存在时,即使为0,round()函数的输出也会是一个浮点数。此外,n的值可以是负数,表示在整数位部分四舍五入,但结果仍是浮点数。 58 | g4=np.round(1.5)#舍入遵循偶数原则,如果整数部分是偶数,遇到.5会舍掉,如果整数部分是奇数,遇到.5会进一位,例如2.5会变成2,3.5会变成3 59 | ``` 60 | 61 | ### 2.4 数组运算 62 | 63 | python 里面默认运算是逐元素操作的(elementwise),通过下面几个例子说明 64 | 65 | ```python 66 | #常用特性展示 理解 67 | h=np.array(([2,3],[1,3])) 68 | h1=h*3#对每一个数*3 69 | h2=h*h#对应位置的数相乘,因此要求形状相同,不是矩阵乘,而是点乘 70 | h3=np.dot(h,h)#内积 71 | h4=h.dot(h)#内积 72 | h5=np.sin(h)#对矩阵内每一个数都应用这个函数 73 | ``` 74 | 75 | ### 2.5 浅拷贝与深拷贝 76 | 77 | ```python 78 | h6=np.array((1,2)) 79 | h7=h6#直接等于没有经过计算,就是浅拷贝,相当于起小名,指向同一对象,可以联系指针来理解 80 | h8=h6.copy()#也可表示为np.copy(h6) 81 | #深拷贝,互相独立 82 | h6+=1#在浅拷贝时h7也+1了,但在深拷贝h8则不会变 83 | ``` 84 | 85 | ### 2.6 常用属性 86 | 87 | 下面介绍数组常见属性的读取 88 | 89 | ```python 90 | #常用属性读取展示 即用即查即可 91 | i=np.size(d)#大小,=所有元素个数 92 | it=d.size #另一种方式查看数组元素的总个数 93 | i1=np.size(d,0)#生成时第一个参数大小,即“行数” 94 | i2=np.size(d,1)#“列数” 95 | i3=np.shape(d)#数组的维度 96 | i4=d.dtype#class下既有属性也有函数,了解类的知识 97 | i5=np.ndim(d)#dim是英文dimension维度的缩写,因此对于一个数组,其shape属性的长度(length)也既是它的ndim. 98 | ``` 99 | 100 | ### 2.7 数组变形 101 | 102 | 数组变形常见的有 `np.reshape`和`np.resize`操作,两者的效果不同,通过下面示例说明: 103 | 104 | ```python 105 | #常用操作展示 106 | #变形 107 | j=np.linspace(1,10,10)#生成等差数列 108 | j1=j.reshape(2,5)#不改变原数组,返回变形后数组,-1的用法,但必须要能够整除 109 | j2=np.linspace(1,6,6) 110 | j_empty=j2.resize(3,2)#改变原数组,返回空 111 | j3=np.resize(j,(5,2))#another写法 112 | ``` 113 | 114 | ### 2.8 增删改查 115 | 116 | 下面介绍数组的增删改查操作。 117 | 118 | ```python 119 | #增删改查 120 | k=np.array([[1,3,2,4,5],[1,1,1,1,1]])#之后的操作都不会改变k 121 | k1=np.append(k,99) #append会把数据拉成1维 122 | 123 | k2=np.insert(k,3,99) 124 | #用法是将向量插入某一行或列,语法为:numpy.insert(arr, obj, values, axis=None) 125 | #不指定第四个参数(axis)就先拉平,再插入,如果是多维只插入一个数,那就会先拉平再插 126 | #如果是三维变二维呢?一个数就利用广播机制拉平,但如果是3需要2则不可以,会报错 127 | 128 | k3=np.insert(k,0,99,axis=0)#按行插入,若只有一个插入值,则改行全部等于此值,广播机制 129 | k4=np.insert(k,4,[99,66],axis=1)#按列插入,也可以直接指定插入的所有值,以元组或列表的形式 130 | 131 | k5=np.delete(k,3)#一样,不指定axis就先拉平,k是原来的,返回了一个不同的东西 132 | k6=np.delete(k,1,0)#指定后,删掉一整行/一整列 133 | ``` 134 | 135 | ### 2.9 数组的索引 136 | 137 | 下面通过几个例子来说明数组的索引 138 | 139 | ```python 140 | #ka是一维,kb是多维 141 | ka=np.arange(1,10,1) 142 | kb=np.linspace(-np.pi,np.pi,12).reshape(3,4) 143 | ka1=ka[1:3]# 包含1不包含3 144 | ka2=ka[5:] # 索引从5直到最后 145 | ka3=ka[:-3] # -3代表倒数第3个 146 | ka4=ka[1:10:2]#缺省第一,第二个参数,则默认选到一端结束,缺省第三个参数默认步长为1,步长可为负,左闭右开,后面是步长 147 | ka5=ka[::-1]#反向 148 | ka6=ka[[1,2,4,7]]#选出第2,3,5,8个数,注意:必须以列表的形式传参,否则会被理解成多维取数而报错 149 | kb1=kb[1]#对多维数组,第一个参数是按行选取 150 | kb2=kb[:,2]#这是按列选取 151 | kb3=kb[1,2]#选出一个特定的数组 152 | kb4=kb[1:3,2:4]#选出一块区域内包含的数组,别忘了左闭右开 153 | ``` 154 | 155 | ### 2.10 数据筛选 156 | 157 | 在实际的数据处理中,对数据进行筛选是非常重要的,比如选出一列数据中大于某一阈值的数,一种做法是对所有数据遍历一遍,跑一个循环,但python提供了更便捷的写法,一行代码搞定。我们通过下面的例子说明。 158 | 159 | ```python 160 | kc=np.linspace(-10,10,10).reshape(2,5) 161 | print(f'kc={kc}') 162 | kc1=kc[kc>3] # 筛选出大于3的数据 163 | kc2=kc[kc*2>5] # 等价于筛选出大于2.5的数据 164 | print(f'kc1 = {kc1}') 165 | print(f'kc2 = {kc2}') 166 | ``` 167 | 168 | ```python 169 | kc=[[-10. -7.77777778 -5.55555556 -3.33333333 -1.11111111] 170 | [ 1.11111111 3.33333333 5.55555556 7.77777778 10. ]] 171 | kc1 = [ 3.33333333 5.55555556 7.77777778 10. ] 172 | kc2 = [ 3.33333333 5.55555556 7.77777778 10. ] 173 | ``` 174 | 175 | 下面我们来理解一下python是怎么来完成这一操作的。 176 | 177 | ```python 178 | kc3=kc/3<-1 #直接给出bool矩阵,使用此矩阵可以直接取值,以及对其他形状相同的矩阵取值 179 | print(f'kc3 = {kc3}') # kc3大小和kc一样,元素全部是 True或者False 180 | kc4=kc[kc3] #取出 True的部分 181 | 182 | kd=kc**2 #**表示乘方 matlab是^ 183 | kd1=kd[kc3] 184 | ``` 185 | 186 | ``` 187 | kc3 = [[ True True True True True] 188 | [ True True False False False] 189 | [False False False False False] 190 | [False False False False False]] 191 | ``` 192 | 193 | ### 2.11 拼接和拆分 194 | 195 | 将数组进行拼接和拆分也是非常重要的,python有很多多函数可以完成这一功能,我们下面简单介绍两个:`np.concatenate`和`np.split` 196 | 197 | ```python 198 | la=np.arange(1,7,1).reshape(2,3) 199 | lb=-la 200 | l1=np.concatenate((la,lb),0)#函数在一个指定的轴上连接多个数组。它接受一个数组序列作为参数,并将它们连接成一数组。 201 | # axis=0:按行拼接,=1则按列拼接 202 | #其标准语法为:numpy.concatenate((a1, a2,...),axis= 0, out= None) 203 | l2=np.concatenate((la,lb),axis=1)#1:按列 204 | l3=np.concatenate((la,la,la,lb),axis=1)#concatenate属实万能,可以同时拼接多个,只需记忆这一个即可 205 | 206 | l4=np.split(la,3,axis=1)#将la按列拆成3份,其标准语法为:np.split(ary,indices_or_sections, axis=0) 207 | #作用是把一个数组从左到右按顺序切分 208 | print(f'la = {la}') 209 | print(f'l4[0] = {l4[0]}') 210 | print(f'l4[1] = {l4[1]}') 211 | print(f'l4[2] = {l4[2]}') 212 | ``` 213 | 214 | ``` 215 | la = [[1 2 3] 216 | [4 5 6]] 217 | l4[0] = [[1] 218 | [4]] 219 | l4[1] = [[2] 220 | [5]] 221 | l4[2] = [[3] 222 | [6]] 223 | ``` 224 | 225 | ## 3 总结 226 | 227 | 本节只是介绍了numpy的一些基本数据处理操作,实际上numpy库非常强大,能够完成的操作非常多,更重要的是需要的时候随用随查。 228 | 229 | 如果你想要了解更多关于numpy库的信息,可以查看[官方文档](https://numpy.org/), 以及[中文版教程](https://www.runoob.com/numpy/numpy-tutorial.html)。 -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班02/数据处理与可视化(二)__numpy__Matplotlib__pandas.md: -------------------------------------------------------------------------------- 1 | ### 2.数据处理与可视化 2 | 3 | #### 2.1数值计算工具NumPy 4 | 5 | ##### 2.1.1数组的创建,属性和操作 6 | 7 | ​ 通过NumPy库的array函数实现数组的创建,如果向array函数中传入了一个列表或元组,将构造简单的一维数组;如果传入多个嵌套的列表或元组,则可以构造一个二维数组。构成数组的元素都具有相同的数据类型。下面分别构造一维数组和二维数组。 8 | 9 | ```python 10 | 利用array函数创建数组示例。 11 | #程序文件Pex2_1.py 12 | import numpy as np #导入模块并命名为np 13 | a = np.array([2,4,8,20,16,30]) #单个列表创建一维数组 14 | #嵌套元组创建二维数组 15 | b = np.array(((1,2,3,4,5),(6,7,8,9,10), 16 | (10,9,1,2,3),(4,5,6,8,9.0))) 17 | print("一维数组:",a) 18 | print("二维数组:\n",b) 19 | 20 | 执行结果: 21 | 一维数组: [ 2 4 8 20 16 30] 22 | 二维数组: 23 | [[ 1. 2. 3. 4. 5.] 24 | [ 6. 7. 8. 9. 10.] 25 | [10. 9. 1. 2. 3.] 26 | [ 4. 5. 6. 8. 9.]] 27 | 28 | ``` 29 | 30 | ##### 2.1.2数组的属性查看 31 | 32 | ```python 33 | 34 | print("维数:",a.ndim); #维数:2 35 | print("维度:",a.shape) #维度:(3,5) 36 | print("元素总数:",a.size); #元素总数:15 37 | print("类型:",a.dtype) #类型:int32 38 | print("每个元素字节数:",a.itemsize) #字节数:4 39 | 40 | ``` 41 | 42 | ##### 2.1.3数组元素的索引 43 | 44 | ​ NumPy比一般的Python **序列提供更多的索引方式。除了用整数和切片的一般索引外,数组还可以布尔索引及花式索引。** 45 | 46 | ①对于一维数组来说,Python原生的列表和NumPy的数组的切片操作都是相同的,无非是记住一个规则:列表名(或数组名)[start: end: step]*,但不包括索引end对应的值。 47 | 48 | ②二维数据列表元素的引用方式为a[i][j];array数组元素的引用方式为a[i,j]。 49 | 50 | ```Python 51 | import numpy as np 52 | a = np.array([2,4,8,20,16,30]) 53 | b = np.array(((1,2,3,4,5),(6,7,8,9,10), 54 | (10,9,1,2,3),(4,5,6,8,9.0))) 55 | print(a[[2,3,5]]) #一维数组索引,输出:[ 8 20 30] 56 | print(a[[-1,-2,-3]]) #一维数组索引,输出:[30 16 20] 57 | print(b[1,2]) #输出第2行第3列元素:8.0 58 | print(b[2]) #输出第3行元素:[10. 9. 1. 2. 3.] 59 | print(b[2,:]) #输出第3行元素:[10. 9. 1. 2. 3.] 60 | print(b[:,1]) #输出第2列所有元素:[2. 7. 9. 5.] 61 | print(b[[2,3],1:4]) #输出第3、4行,第2、3、4列的元素 62 | print(b[1:3,1:3]) #输出第2、3行,第2、3列的元素 63 | 64 | ``` 65 | 66 | ##### 2.1.4数组的修改,变形 67 | 68 | ```Python 69 | #注意reshape和resize的区别 70 | #通常是使用resize改变数组的尺寸大小,使用reshape用来增加数组的维度。 71 | ``` 72 | 73 | ##### 2.1.5数组的运算,通用函数与广播运算 74 | 75 | NumPy 算术函数包含简单的加减乘除: **add()**,**subtract()**,**multiply()** 和 **divide()**。 76 | 77 | 需要注意的是数组必须具有相同的形状或符合数组广播规则。 78 | 79 | #### 2.2文件操作 80 | 81 | ```Python 82 | #read 83 | #关闭文件 84 | # if “ae" in line 正则表达式,如何找出,find,count函数 85 | #先w后r 86 | #绝对路径和相对路径 87 | 例2.26 向文本文件写入数据示例。 88 | #程序文件Pex2_26.py 89 | f1=open("Pdata2_26.txt","w") 90 | str1=['Hello',' ','World!']; str2=['Hello','World!'] 91 | f1.writelines(str1); f1.write('\n') 92 | f1.writelines(str2); f1.close() 93 | f2=open('Pdata2_26.txt') 94 | a=f2.read(); print(a) 95 | 96 | 运行结果: 97 | Hello World! 98 | HelloWorld! 99 | 100 | 101 | 102 | import numpy as np 103 | a = []; b = []; c = []#引入了三个列表 104 | with open('Pdata2_21.txt') as file:#用with open不用担心关没关,用open如果下面报错影响到close 105 | for (i, line) in enumerate(file): 106 | elements = line.strip().split()#strip (),s为字符串,rm为要删除的字符序列。智能删除开头或是结尾的字符或是字符串,不能删除中间的字符或字符串。 107 | if i < 6: 108 | a.append(list(map(float, elements[:8])))#利用map函数将元素从0到7取浮点数, 109 | b.append(float(elements[-1].rstrip('kg'))) 110 | else: 111 | c = [float(x) for x in elements] 112 | a = np.array(a); b = np.array(b); c = np.array(c) 113 | print(a,'\n',b,'\n',c) 114 | 115 | #enumerate是枚举的意思,返回对象的每个元素都是一个元组,每个元组包括两个值,一个是计数,一个是sequence的值,计数是从start开始的,start默认为0。 116 | 117 | seasons = ['Spring', 'Summer', 'Fall', 'Winter'] 118 | list(enumerate(seasons)) 119 | [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] 120 | list(enumerate(seasons, start=1)) # 小标从 1 开始 121 | [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] 122 | #为什么用那么多迭代器 123 | #目的是为了在编写算法尽可能使用要求最低的迭代器,并让它适用于容器的最大区间。 124 | 125 | #列表推导式:它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。 126 | [x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3] 127 | #执行顺序: 128 | for x in range(1,5) 129 | if x > 2 130 | for y in range(1,4) 131 | if y < 3 132 | x*y 133 | #列表没有办法运算,列表和元组没有shape属性,它的大小是元素的个数,数组有形状shape,有shape属性,可以通过array.shape获取数组的形状大小shape。列表并不为数组产生。 134 | 135 | 136 | ``` 137 | 138 | ##### 2.2.3文件管理方法 139 | 140 | ​ Python的os模块提供了类似于操作系统级的文件管理功能,如显示当前目录下的文件和目录列表、文件重命名、文件删除、目录管理等。要使用这个模块,需要先导入它,然后调用相关的方法。 141 | 142 | ```python 143 | import os 144 | a=os.listdir("c:\\") 145 | print(a) #显示C根目录下的文件和目录列表 146 | print("-------------------------------------") 147 | b=os.listdir(".") 148 | print(b) #显示当前工作目录下的文件和目录列表 149 | #excel读取所以用pandas 150 | #np.sin和math.sin 151 | #数据框可以直接做点乘吗,可以把values取出来做 152 | ``` 153 | 154 | ```python 155 | #程序文件Pex2_36.py 156 | import numpy as np, pandas as pd 157 | from matplotlib.pyplot import * 158 | a=pd.read_excel("Pdata2_33.xlsx",usecols=range(1,4)) #提取第2列到第4列的数据 159 | c=np.sum(a) #求每一列的和 160 | ind=np.array([1,2,3]); width=0.2 161 | rc('font',size=16); bar(ind,c,width); ylabel("消费数据") 162 | xticks(ind,['用户A','用户B','用户C'],rotation=20) #旋转20度 163 | rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 164 | savefig('figure2_36.png',dpi=500) #保存图片为文件figure2_36.png,像素为500 165 | 166 | #rc改变了所有,一般用来改变不能显示的中文或者符号 167 | 168 | ``` 169 | 170 | #### 2.3数据处理工具Pandas 171 | 172 | Pandas中必须要了解的内容有序列,数据帧,重索引等 173 | 174 | ```python 175 | #pandas封装在numpy之上,主要作为数据分析工具 176 | 177 | import pandas as pd 178 | import numpy as np 179 | import math 180 | 181 | 182 | ##文件读取与数据 183 | df2=pd.read_csv('./data1.csv') #读取csv数据 184 | # 也有read_excel等 185 | print(df2.head()) #可以读取默认前5条数据,括号内值可以指定读取数量 186 | Unnamed: 0 a b c d e f 187 | 0 A 1 1 2 3 4 5 188 | 1 B 2 2 3 4 5 6 189 | 2 C 3 3 4 5 6 dm 190 | 3 D 4 4 5 6 7 8 191 | 4 E 5 5 6 7 8 9 192 | 193 | RangeIndex: 5 entries, 0 to 4 194 | Data columns (total 7 columns): 195 | # Column Non-Null Count Dtype 196 | --- ------ -------------- ----- 197 | 0 Unnamed: 0 5 non-null object 198 | 1 a 5 non-null int64 199 | 2 b 5 non-null int64 200 | 3 c 5 non-null int64 201 | 4 d 5 non-null int64 202 | 5 e 5 non-null int64 203 | 6 f 5 non-null object 204 | dtypes: int64(5), object(2) 205 | memory usage: 408.0+ bytes 206 | df2.info() #可以返回当前的信息 207 | 208 | print(df2.index) #调取索引 209 | print(df2.columns) #调取列名 210 | RangeIndex(start=0, stop=5, step=1) 211 | Index(['Unnamed: 0', 'a', 'b', 'c', 'd', 'e', 'f'], dtype='object') 212 | 30 213 | print(df2.dtypes) #dtypes值 214 | print(df2.values) #调取数值 215 | Unnamed: 0 object 216 | a int64 217 | b int64 218 | c int64 219 | d int64 220 | e int64 221 | f object 222 | dtype: object 223 | [['A' 1 1 2 3 4 '5'] 224 | ['B' 2 2 3 4 5 '6'] 225 | ['C' 3 3 4 5 6 'dm'] 226 | ['D' 4 4 5 6 7 '8'] 227 | ['E' 5 5 6 7 8 '9']] 228 | 229 | #Series和DataFrame 230 | a=pd.Series(data=[1,2,3],index=["i","love","u"]) 231 | print(a[2]) 232 | print(a["love"]) 233 | 234 | b=np.arange(1,7).reshape(3,2) 235 | df=pd.DataFrame(b,index=['a','b','c'],columns=['x1','x2'])#直接建立 236 | print(df) 237 | x1 x2 238 | a 1 2 239 | b 3 4 240 | c 5 6 241 | 242 | da={'data1':['a','b','c','d'],'data2':[1,2,3,4],'data3':['alpha','beta','gamma','zeta']} 243 | df_da=pd.DataFrame (da) #字典和DataFrame的转换 244 | print(df_da) 245 | data1 data2 data3 246 | 0 a 1 alpha 247 | 1 b 2 beta 248 | 2 c 3 gamma 249 | 3 d 4 zeta 250 | 251 | da_2=df_da ['data2'] 252 | print(da_2) 253 | print(da_2[1:2]) 254 | 0 1 255 | 1 2 256 | 2 3 257 | 3 4 258 | Name: data2, dtype: int64 259 | 1 2 260 | Name: data2, dtype: int64 261 | 262 | ##索引 263 | print(df_da[['data1','data2']]) #可以同时找出多列的数据,注意要把列名作为整体来索引 264 | data1 data2 265 | 0 a 1 266 | 1 b 2 267 | 2 c 3 268 | 3 d 4 269 | #loc按照label索引 270 | #iloc按照position索引 271 | # print(df_da[0]) 272 | print(df_da.iloc[0]) 273 | print(df_da.iloc[0:2]) 274 | print(df_da.iloc[0:2,0:2])#切片 275 | da_1=df_da.set_index('data1') #可以不用编号索引,可用DataFrame里面的一列作为索引 276 | print(da_1) 277 | # print(da_1['data1']) #此时已经没有data1这一列 278 | print(da_1['data2']) #会出现自己指定的索引 279 | print(da_1['data2']['b']) 280 | # print(da_1['b']['data2']) #直接索引是取不了行的 281 | #上面为普通索引,先取列,再取行;下面为loc通过位置索引,先取行再取列 还有哪些区别? 282 | # 取出一个值的方式 283 | print(da_1.loc['b','data2']) 284 | print(da_1.iloc[1,0]) 285 | 286 | print(da_1.loc['a':'c','data2':'data3']) #与上面取切片相同,不过‘:’可以取到最后一位 287 | 288 | print(da_1[da_1['data2']>2]) #bool类型的索引 289 | print(da_1[da_1['data2']==1]['data2'].mean()) 290 | 291 | ##运算 292 | df_da['data2']+=10 #加减 293 | print(df_da['data2']) 294 | da1=pd.Series(data=[1,1,1,1,1],index=['a','b','c','d','e']); 295 | da2=pd.Series(data=[1,1,1,1,1],index=['c','d','e','f','g']); 296 | print(da1+da2); #会按照当前索引进行加减操作 297 | 0 11 298 | 1 12 299 | 2 13 300 | 3 14 301 | Name: data2, dtype: int64 302 | a NaN 303 | b NaN 304 | c 2.0 305 | d 2.0 306 | e 2.0 307 | f NaN 308 | g NaN 309 | dtype: float64 310 | df_da['data2']*=10 #乘除 311 | print(df_da['data2'] ) 312 | print(df_da['data2'].mean()) #平均值 313 | print(df_da['data2'].max()) #最大值 314 | 315 | # print(math.sin(df_da['data2'])) #? 316 | print(list(map(math.sin,df_da['data2']))) #map前要加list 317 | 318 | 319 | print(df_da.describe()) #直接给出统计数据,但是只有数值的列统计 320 | [0.8414709848078965, 0.9092974268256817, 0.1411200080598672, -0.7568024953079282] 321 | data2 322 | count 4.000000 323 | mean 2.500000 324 | std 1.290994 325 | min 1.000000 326 | 25% 1.750000 327 | 50% 2.500000 328 | 75% 3.250000 329 | max 4.000000 330 | 331 | ##groupby 332 | dff={'key':['A','B','C','A','B','C','A','B','C'],'data1':[1,2,3,4,5,6,6,6,6],'data2':[100,110,120,130,140,150,160,170,180]} 333 | df3=pd.DataFrame(dff) 334 | print(df3) 335 | 336 | key data1 data2 337 | 0 A 1 100 338 | 1 B 2 110 339 | 2 C 3 120 340 | 3 A 4 130 341 | 4 B 5 140 342 | 5 C 6 150 343 | 6 A 6 160 344 | 7 B 6 170 345 | 8 C 6 180 346 | data1 data2 \ 347 | count mean std min 25% 50% 75% max count mean std 348 | key 349 | A 3.0 3.666667 2.516611 1.0 2.5 4.0 5.0 6.0 3.0 130.0 30.0 350 | B 3.0 4.333333 2.081666 2.0 3.5 5.0 5.5 6.0 3.0 140.0 30.0 351 | C 3.0 5.000000 1.732051 3.0 4.5 6.0 6.0 6.0 3.0 150.0 30.0 352 | 353 | 354 | min 25% 50% 75% max 355 | key 356 | A 100.0 115.0 130.0 145.0 160.0 357 | B 110.0 125.0 140.0 155.0 170.0 358 | C 120.0 135.0 150.0 165.0 180.0 359 | key 360 | A 390 361 | B 420 362 | C 450 363 | Name: data2, dtype: int64 364 | data2 365 | count mean std min 25% 50% 75% max 366 | data1 367 | 1 1.0 100.0 NaN 100.0 100.0 100.0 100.0 100.0 368 | 2 1.0 110.0 NaN 110.0 110.0 110.0 110.0 110.0 369 | 3 1.0 120.0 NaN 120.0 120.0 120.0 120.0 120.0 370 | 4 1.0 130.0 NaN 130.0 130.0 130.0 130.0 130.0 371 | 5 1.0 140.0 NaN 140.0 140.0 140.0 140.0 140.0 372 | 6 4.0 165.0 12.909944 150.0 157.5 165.0 172.5 180.0 373 | print(df3.groupby('key').describe()) 374 | print(df3.groupby('key')['data2'].sum()) 375 | print(df3.groupby('data1').describe()) 376 | 377 | ``` 378 | 379 | 380 | 381 | #### 2.4Matplotlib可视化 382 | 383 | 在Matplotlib库中提供了两种风格的API供开发者使用。这也就是为什么有人用`plt.xx`,有人用`ax.xx`的原因。好的代码应该坚持使用一种风格,否则会显得混乱,阅读起来困难,不利于维护。此处推荐使用面向对象的编程接口。 384 | 385 | 让我们先来了解图标各部分的名称: 386 | 387 | 坐标轴(axis) 388 | 389 | 坐标轴名称(axis label) 390 | 391 | 坐标轴刻度(tick) 392 | 393 | 坐标轴刻度标签(tick label) 394 | 395 | 坐标轴边界(lim) 396 | 397 | 网格线(grid) 398 | 399 | 图例(legend) 400 | 401 | 标题(title) 402 | 403 | 边框(spine) 404 | 405 | ##### 2.4.1导入Matplotlib 406 | 407 | ```python 408 | import matplotlib as mpl 409 | import matplotlib.pyplot as plt 410 | ``` 411 | 412 | ##### 2.4.2绘图 413 | 414 | ```python 415 | #设置标题 416 | ax.set_title('标题',fontdict={'size':16},loc = 'left') #设置16px的字体大小,将标题显示在左侧 417 | 418 | #设置边框 419 | ax.spines['right'].set_visible(False) #去除右边的spines 420 | ax.spines['bottom'].set_color('r') #设置底部的spines为红色 421 | 422 | #设置坐标轴 423 | ax.set_xlabel('季度',fontsize=16) 424 | ax.set_xlabel('销售额',fontsize=16) 425 | # 更改刻度标签。此例将0,1,2,3更改为一季度,二季度,三季度,四季度 426 | ax.set_xticks(ind) 427 | ax.set_xticklabels(quarter) 428 | 429 | # 设置刻度标签属性 430 | # axis : 可选{‘x’, ‘y’, ‘both’} ,选择对哪个轴操作,默认是’both’ 431 | # labelsize设置刻度标签的大小 432 | # direction{‘in’, ‘out’, ‘inout’}刻度线的方向 433 | # color : 刻度线的颜色 434 | # labelcolor : 刻度值颜色 435 | ax.tick_params(axis = 'y', labelsize=14,direction='in',labelcolor='r') 436 | 437 | #设置刻度间隔 438 | #从pyplot导入MultipleLocator类,这个类用于设置刻度间隔 439 | from matplotlib.pyplot import MultipleLocator 440 | #把x轴的刻度间隔设置为1,并存在变量里 441 | x_major_locator=MultipleLocator(1) 442 | #把y轴的刻度间隔设置为10,并存在变量里 443 | y_major_locator=MultipleLocator(10) 444 | #把x轴的主刻度设置为1的倍数 445 | ax.xaxis.set_major_locator(x_major_locator) 446 | #把y轴的主刻度设置为10的倍数 447 | ax.yaxis.set_major_locator(y_major_locator) 448 | 449 | #设置边界 450 | ax.set_xlim([0,12]) # x轴边界 451 | ax.set_ylim([0,50]) # y轴边界 452 | ``` 453 | 454 | 利用plt.show()进行绘制 455 | 456 | ```python 457 | import matplotlib.pyplot as plt 458 | import numpy as np 459 | 460 | x = np.linspace(0, 10, 100) 461 | 462 | plt.plot(x, np.sin(x)) 463 | plt.plot(x, np.cos(x)) 464 | 465 | plt.show() 466 | #除此之外我们还可以使用%matplotlib notebook将产生嵌入在笔记本中的交互式绘图,%matplotlib inline将产生嵌入在笔记本中的绘图的静态图像 467 | #易错点要先保存再show 468 | ``` 469 | 470 | ##### 2.4.3将图形保存到文件 471 | 472 | ```python 473 | fig.savefig('my_figure.png') 474 | ``` 475 | 476 | 应用:在绘画时的自定义 477 | 478 | ```python 479 | # 使用灰色背景 480 | ax = plt.axes(axisbg='#E6E6E6') 481 | ax.set_axisbelow(True) 482 | 483 | # 绘制白色实网格线draw solid white grid lines 484 | plt.grid(color='w', linestyle='solid') 485 | 486 | # 隐藏轴的刻度 487 | for spine in ax.spines.values(): 488 | spine.set_visible(False) 489 | 490 | # 隐藏顶部和右侧刻度 491 | ax.xaxis.tick_bottom() 492 | ax.yaxis.tick_left() 493 | 494 | # 将刻度和标签变亮 495 | ax.tick_params(colors='gray', direction='out') 496 | for tick in ax.get_xticklabels(): 497 | tick.set_color('gray') 498 | for tick in ax.get_yticklabels(): 499 | tick.set_color('gray') 500 | 501 | # 控制直方图的人脸和边界颜色 502 | ax.hist(x, edgecolor='#E6E6E6', color='#EE6666'); 503 | ``` 504 | 505 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Example.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import matplotlib.pyplot as plt 4 | 5 | df0=pd.read_excel("Trade.xlsx") #df0代表原始数据 6 | df0['year']=df0.Date.dt.year #添加交易年份字段 7 | df0['month']=df0.Date.dt.month #添加交易月份字段 8 | plt.rc('font',family='SimHei') #用来正常显示中文标签 9 | 10 | ax1=plt.subplot(2,3,1) #建立第一个子图窗口 11 | Class_Counts=df0.Order_Class[df0.year==2012].value_counts() 12 | Class_Percent=Class_Counts/Class_Counts.sum() 13 | ax1.set_aspect(aspect='equal') #设置纵横轴比例相等 14 | ax1.pie(Class_Percent,labels=Class_Percent.index, 15 | autopct="%.1f%%") #添加格式化的百分比显示 16 | ax1.set_title("2012年各等级订单比例") 17 | 18 | 19 | ax2=plt.subplot(2,3,2) #建立第2个子图窗口 20 | #统计2012年每月销售额 21 | Month_Sales=df0[df0.year==2012].groupby(by='month').aggregate({'Sales':np.sum}) 22 | 23 | #下面使用Pandas画图 24 | Month_Sales.plot(title="2012年各月销售趋势",ax=ax2, legend=False) 25 | ax2.set_xlabel('') 26 | 27 | ax3=plt.subplot(2,3,(3,6))#右侧两块区域 28 | cost=df0['Trans_Cost'].groupby(df0['Transport']) 29 | ts = list(cost.groups.keys()) 30 | dd = np.array(list(map(cost.get_group, ts))) 31 | plt.boxplot(dd); plt.gca().set_xticklabels(ts)#箱型图 32 | 33 | ax4=plt.subplot(2,3,(4,5))#左下方两块区域 34 | plt.hist(df0.Sales[df0.year==2012],bins=40, density=True) 35 | ax4.set_title("2012年销售额分布图"); 36 | ax4.set_xlabel("销售额"); 37 | plt.savefig("figure2_45.png"); 38 | plt.show() 39 | 40 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_1.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_2.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_3.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_4.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_5.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_6.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_7.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Figure_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Figure_8.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Python在高等数学中的应用.md: -------------------------------------------------------------------------------- 1 | # Python在高等数学&线性代数中的应用(1) 2 | 3 | 文档负责人:宋奕辰 4 | 5 | ## 引言 6 | 7 | Python在数学计算中的应用,主要采用的库有Numpy、SciPy、SymPy这些库,其中基础数值计算采用的是Numpy和SciPy,符号运算采用的是SymPy库。 8 | 9 | ## **1. SymPy工具库** 10 | 11 | ### **1.0 Sympy 简介** 12 | SymPy库具有很强大的符号计算的功能,其中包含有许多模块,如:积分模块(intergrals)、离散数学模块(discrete)、方程求解模块(solvers)、矩阵模块(matrices)、物理学模块(physics)、统计学模块(stats)。对于其中包含的模块,最为常用的其实还是一些符号函数的计算和化简,如计算符号函数的值、化简表达式、求积分等。 13 |
14 |
15 | 16 | ### **1.1 符号运算相关:** 17 | 18 | #### **1.1.1 建立符号变量的方式** 19 | 20 | 首先导入sympy库(不建议使用*代替) 21 | 22 | ```python 23 | import sympy 24 | ``` 25 | 26 | 接着采用symbols函数建立符号变量 27 | 28 | ```python 29 | x = sympy.symbols('x') 30 | ver_v = sympy.symbols('v') #ver_v是变量本身,而v是 31 | y,z = sympy.symbols('y z') #利用空格隔开多个符号变量, 32 | m0,m1,m2,m3 = sympy.symbols('m0:4') #创建多个符号变量的另一种方法 33 | print(ver_v) #打印的是变量的“表示方法”,即v 34 | print(type(ver_v)) 35 | print(type(sympy.E)) #此处的E的类型是sympy中的number的类型 36 | ``` 37 | 38 | 值得注意的是:在后续的符号变量调用中,应该使用的是变量本身,而不是变量的表示方法,即调用时应该使用'ver_v'而非'v'。 39 | 40 | 注意,sympy中有一些常数以及公式如下:pi,oo(无穷大),E,I 41 | 42 | ```python 43 | #数学符号以及公式 44 | #虚数单位i 45 | sympy.I 46 | #自然对数低e 47 | sympy.E 48 | #无穷大 49 | sympy.oo 50 | #圆周率 51 | sympy.pi 52 | #求n次方根 53 | sympy.root(8,3) 54 | #求对数 55 | sympy.log(1024,2) 56 | #求阶乘 57 | sympy.factorial(4) 58 | #三角函数 59 | sympy.sin(sympy.pi) 60 | sympy.tan(sympy.pi/4) 61 | sympy.cos(sympy.pi/2) 62 | ``` 63 | 64 | #### **1.1.2 符号变量的赋值以及计算** 65 | 66 | ```python 67 | import sympy 68 | x = sympy.sin(1) #赋值,注意在使用sin函数时前面要加上sympy 69 | y = sympy.Rational(1,2) #分数的赋值 70 | #y = 1/2 #直接利用分数赋值会出现报错,变量的格式不匹配 71 | print(x) #结果是x = ......(说明print函数对于symbol对象是打印其表示形式以及值) 72 | print("x=",x.evalf()) 73 | #也可写作print("x=",x.n()),默认值为15位,可以自己修改位数 74 | print("pi的两种显示格式:{},{}".format(sympy.pi,sympy.pi.evalf(3))) 75 | print(type(sympy.pi.evalf())) 76 | #若要得到pi的值,则需要使用.evalf()函数调用值(evaluate with float) 77 | print(type(sympy.pi.n())) 78 | #可以看到,.evalf()和.n()的返回值都是sympy中自带的浮点数类型 79 | ``` 80 | $\textbf{Out:}$ 81 | ``` 82 | sin(1) 83 | x= 0.841470984807897 84 | pi的两种显示格式:pi,3.14 85 | 86 | 87 | ``` 88 | #### **1.1.3 表达式的创建以及赋值** 89 | 90 | ```python 91 | import sympy 92 | y=sympy.symbols('y') 93 | z=sympy.symbols('z') 94 | expr1 = y*sympy.sin(y**2) #符号表达式的创建(注意函数应用时加上前缀) 95 | expr2 = y**2+sympy.sin(y)*sympy.cos(y)+sympy.sin(z) 96 | print("expr1=",expr1) 97 | print("y = 5时,expr1 = ",expr1.subs(y,5)) 98 | #代入计算的值,仅仅是将y利用数字代入,并没有得出最后结果,最后结果可以使用.evalf()来求得 99 | print(expr2.subs({y:2,z:3})) 100 | #双变量赋值,单变量不能用冒号隔开,(利用一个列表代入) 101 | print(expr2.evalf(3)) 102 | #此处打印,发现evalf()函数并未给出上述值,说明subs()函数仅仅是“暂时”改变表达式的值 103 | ``` 104 | $\textbf{Out:}$ 105 | ``` 106 | expr1= y*sin(y**2) 107 | y = 5时,expr1 = 5*sin(25) 108 | sin(2)*cos(2) + sin(3) + 4 109 | y**2 + sin(y)*cos(y) + sin(z) 110 | ``` 111 | ### **1.2 Sympy中的函数介绍:** 112 | 113 | #### **1.2.1 对于代数式的变形操作** 114 | 主要有:together()、apart()、simplify()、expand()、factor(),使用方式如下: 115 | 116 | ```python 117 | import sympy 118 | #为了方便,也可写 from sympy import simplify 119 | x1,x2,x3,x4 = sympy.symbols('m1:5');x = sympy.symbols('x');y = sympy.symbols('y') 120 | print(x1/x2+x3/x4) 121 | print(sympy.together(x1/x2+x3/x4)) 122 | #合并函数(此处为通分) 123 | print((2*x**2+3*x+4)/(x+1)) 124 | print(sympy.simplify((2*x**2+3*x+4)/(x+1))) 125 | #化简函数,此处化简无效 126 | print(sympy.simplify((x + x**2)/(x*sympy.sin(y)**2 + x*sympy.cos(y)**2))) 127 | #有效的化简(还有其他化简如trigsimp三角化简,powsimp指数化简) 128 | print(sympy.apart((2*x**2+3*x+4)/(x+1))) 129 | #展开函数(代数式的展开),将分数多项式展开为每一项都不可展开的项 130 | print(sympy.expand((x+1)**2)) #应用分配律 131 | print(sympy.factor(x**2+2*x+1)) #因式分解 132 | ``` 133 | $\textbf{Out:}$ 134 | 135 | ``` 136 | m1/m2 + m3/m4 137 | (m1*m4 + m2*m3)/(m2*m4) 138 | (2*x**2 + 3*x + 4)/(x + 1) 139 | (2*x**2 + 3*x + 4)/(x + 1) 140 | x + 1 141 | 2*x + 1 + 3/(x + 1) 142 | x**2 + 2*x + 1 143 | (x + 1)**2 144 | ``` 145 | #### **1.2.2 初等数学中的应用** 146 | 常用函数:solve()、summation(),使用方式如下: 147 | ```python 148 | import sympy 149 | x = sympy.Symbol('x') 150 | y = sympy.Symbol('y') 151 | f1 = x+y-3 152 | f2 = x-y+5 153 | f3 = x**2-3*x<10 154 | f4 = x**3-2>20 155 | fx = x*3+y**2 156 | #三种表示:两个方程一个未知数、一个方程一个未知数、一个方程两个未知数 157 | print(sympy.solve([f1,f2],[x,y])) 158 | #输入为solve(表达式,符号参数),输出为符号参数的一个list,用来表示求解得到的值 159 | print(sympy.solve(sympy.Eq(fx,1),[x,y])) 160 | #如果方程数目不够,得到的结果是x与y的关系式,得到的是一个list类型的返回值,list的第一项为第一个变量、第二项为第二个变量(用第一个变量表示) 161 | print(sympy.solve([f3,f4],x)) 162 | ``` 163 | $\textbf{Out:}$ 164 | 165 | ``` 166 | {x: -1, y: 4} 167 | [(1/3 - y**2/3, y)] 168 | (x < 5) & (22**(1/3) < x) 169 | ``` 170 | **EXAMPLE:** 171 | $$ 172 | \text { 验证 } \sum_{k=1}^{n} k^{2}=\frac{n(n+1)(2 n+1)}{6}, \sum_{k=1}^{\infty} \frac{1}{k^{2}}=\frac{\pi^{2}}{6} . 173 | $$ 174 | 175 | ```python 176 | import sympy 177 | n = sympy.symbols('n') 178 | f = n**(-2) 179 | s = sympy.summation(f,(n,1,sympy.oo)) 180 | #输入为summation(表达式,(参数,参数范围)),输出为计算得到的值 181 | print(s) 182 | ``` 183 | $\textbf{Out:}$ 184 | 185 | ``` 186 | pi**2/6 187 | ``` 188 | 189 | ## **1.3 用SymPy做符号函数画图** 190 | 191 | 用Sympy做符号函数的画图很方便,其最为重要的是不用解出一个变量对于另一个变量的表达式,即利用隐函数即可作图。下面是一些实例展示: 192 | 193 | ### **1.3.1 二维曲线画图** 194 | 在sympy中,二维曲线画图可以调用plot函数实现。 195 | 196 | plot的基本使用格式是: 197 | 198 | $$\text{plot(表达式,变量取值范围,属性=属性值)}$$ 199 | 200 | 多重绘制图形则使用: 201 | 202 | $$\text{plot(表达式1,表达式2,变量取值范围,属性=属性值) }$$ 203 | 或者: 204 | $$\text{plot((表达式1,变量取值范围1),(表达式2,变量取值范围2))}$$ 205 | **EXAMPLE:** 206 | 绘制 $2 \sin x,\ \cos (x+\frac{\pi}{4})$分别在$ x \in [-6,6],[-5,5]$上的图像。 207 | ```python 208 | from sympy.plotting import plot 209 | from sympy.abc import x,pi 210 | from sympy.functions import sin,cos 211 | plot((2*sin(x),(x,-6,6)),(cos(x+pi/4),(x,-5,5))) 212 | ``` 213 | ![](./Figure_1.png) 214 | 215 | 216 | ### **1.3.2 三维曲线画图** 217 | **EXAMPLE:** 218 | 绘制 $y_1=\sin x,x\in [-6,6];y_2=\cos (x+\frac{\pi}{4}),x\in [-5,5] $ 219 | ```python 220 | from pylab import rc #pylab为matplotlib的接口 221 | from sympy.plotting import plot3d 222 | from sympy.abc import x,y #引进符号变量x,y 223 | from sympy.functions import sin,sqrt 224 | rc('font',size=16); rc('text',usetex=True) #'font'指的是字体,即调整字体大小到16;text指的是调整文本可以使用tex字体(数字字体) 225 | plot3d(sin(sqrt(x**2+y**2)),(x,-10,10),(y,-10,10),xlabel='$x$',ylabel='$y$') 226 | ``` 227 | ![](./Figure_2.png) 228 | 229 | 注:怎么调整图片的一些要素建议上网查找,现查现用 230 | 231 | ### **1.3.3 隐函数画图** 232 | 233 | **EXAMPLE:** 234 | 绘制 $(x-1)^2+(y-2)^3-4=0 $的图像。 235 | 236 | ```python 237 | from pylab import rc 238 | from sympy import plot_implicit as pt,Eq #plot_implicit是隐函数绘图函数 239 | from sympy.abc import x,y #引进符号变量x,y 240 | rc('font',size=16); rc('text',usetex=True) 241 | pt(Eq((x-1)**2+(y-2)**3,4),(x,-6,6),(y,-2,4),xlabel='$x$',ylabel='$y$') #此处,Eq(arg1,arg2)中arg1是方程左边表达式,arg2是方程右边表达式。原因是sympy中的符号方程式不是用=或者==表示,而是用等式Eq表示。当然,此处还可以使用表达式直接画图,就不用使用Eq 242 | pt((x-1)**2+(y-2)**3-4,(x,-6,6),(y,-2,4),xlabel='$x$',ylabel='$y$') 243 | ``` 244 | ![](./Figure_3.png) 245 | 246 | 或使用匿名函数(lambda函数),亦可得到同样的图像: 247 | ```python 248 | from sympy import plot_implicit as pt 249 | from sympy.abc import x,y #引进符号变量x,y 250 | ezplot = lambda expr:pt(expr) #expr是表达式的意思,不需要提前声明 251 | ezplot((x-1)**2+(y-2)**3-4) 252 | #上述操作等效于下面一句: 253 | pt((x-1)**2+(y-2)**3-4) 254 | ``` 255 | 256 | 257 | **补充内容:** lambda函数的使用 258 | 259 | lambda函数的基本使用形式是: 260 | 261 | ```python 262 | name = lambda 变量 : 表达式 #声明一个lambda函数 263 | name(变量的值) 264 | ``` 265 | 266 | lambda函数的优点:单行,轻便,即用即扔(不需要特地去建立一个正式的函数). 267 | 268 | ### **1.4 官方文档** 269 | 更多的sympy的函数的用法,可参考官方文档: 270 | 271 | [Welcome to SymPy’s documentation! — SymPy 1.9 documentation](https://docs.sympy.org/latest/index.html) 272 | 273 | ## **2 Scipy工具库** 274 | 275 | ### **2.0 Scipy 简介** 276 | SciPy是以NumPy为基础,一个应用更加广泛的科学计算工具库,他与Numpy的区别就是对于一些高级函数进行封装可供直接调用。下面是一些模块的简单介绍: 277 | 278 | ### **2.1 积分模块(scipy.integrate)** 279 | 280 | 积分模块分为:给定函数的数值积分、给定离散点的数值积分、微分方程的数值解,一些函数距离如下: 281 | 282 | - 给定函数的数值积分 283 | 284 | | 函数名 | 函数说明 | 285 | | ---------- | -------------------------------------- | 286 | | quad | 一重数值积分 | 287 | | dblquad | 二重数值积分 | 288 | | tplquad | 三重数值积分 | 289 | | nquad | 通用$N$重积分 | 290 | | fixed_quad | 使用固定阶高斯求积公式求数值积分 | 291 | | quadtature | 使用固定误差限的高斯求积公式求数值积分 | 292 | | romberg | 求函数的Romberg数值积分 | 293 | 294 | - 给定离散点的数值积分 295 | 296 | | 函数名 | 函数说明 | 297 | | -------- | ----------------------------------------------- | 298 | | cumtrapz | 用梯形法求数值积分 | 299 | | simps | 用辛普森法求数值积分 | 300 | | romb | 用Romberg积分法求自变量均匀间隔离散点的数值积分 | 301 | 302 | - 微分方程的数值解 303 | 304 | | 函数名 | 函数说明 | 305 | | ----------- | --------------------------------------- | 306 | | odeint | 使用Fortran库中方法求微分方程组的数值解 | 307 | | ode | 求一般微分方程组的数值解 | 308 | | complex_ode | 求复微分方程组的数值解 | 309 | 310 | 示例代码如下所示: 311 | 312 | ```python 313 | from scipy import integrate 314 | import numpy as np 315 | import matplotlib.pyplot as plt 316 | def func1(x): 317 | return x*x 318 | def func2(x,y): 319 | return x*y 320 | print(integrate.quad(func1,0,1)) 321 | print(integrate.dblquad(func2,0,1,0,1)) 322 | print(integrate.fixed_quad(func1,0,1)) 323 | print(integrate.romberg(func1,0,1)) 324 | z = np.linspace(-2,2,num = 20)#梯形法的插值点 325 | print(integrate.cumtrapz(z))#梯形法 326 | #...more to explore 327 | ``` 328 | $ \textbf{Out:}$ 329 | ``` 330 | (0.33333333333333337, 3.700743415417189e-15) 331 | (0.24999999999999997, 5.539061329123429e-15) 332 | (0.33333333333333326, None) 333 | 0.3333333333333333 334 | [-1.89473684e+00 -3.57894737e+00 -5.05263158e+00 -6.31578947e+00 335 | -7.36842105e+00 -8.21052632e+00 -8.84210526e+00 -9.26315789e+00 336 | -9.47368421e+00 -9.47368421e+00 -9.26315789e+00 -8.84210526e+00 337 | -8.21052632e+00 -7.36842105e+00 -6.31578947e+00 -5.05263158e+00 338 | -3.57894737e+00 -1.89473684e+00 -2.22044605e-15] 339 | ``` 340 | 注:前三行的后面一项为相应方法的误差。 341 | 342 | ### **2.2 线性代数模块(scipy.linalg)** 343 | 344 | 在官方文档中,对于scipy中的linalg模块的介绍如下:scipy.linalg contains all the functions in numpy.linalg. plus some other more advanced ones not contained in numpy.linalg.(来源于numpy但是超越了numpy)。 345 | 346 | **EXAMPLE:** 对矩阵$A$进行一些常用操作 347 | ```python 348 | import numpy as np 349 | from scipy import linalg 350 | A = np.array([[1,3,5],[2,5,1],[2,3,8]]) 351 | print(linalg.inv(A)) 352 | #矩阵求逆的运算 353 | print(A.dot(linalg.inv(A))) 354 | #验算(通过A和其逆相乘来判断计算的准确程度) 355 | print(linalg.det(A)) 356 | #求行列式 357 | #...more to explore 358 | ``` 359 | $ \textbf{Out:}$ 360 | ``` 361 | [[-1.48 0.36 0.88] 362 | [ 0.56 0.08 -0.36] 363 | [ 0.16 -0.12 0.04]] 364 | [[ 1.00000000e+00 -1.11022302e-16 -6.24500451e-17] 365 | [ 3.05311332e-16 1.00000000e+00 1.87350135e-16] 366 | [ 2.22044605e-16 -1.11022302e-16 1.00000000e+00]] 367 | -25.00000000000000 368 | ``` 369 | 370 | ### **2.3 优化模块(scipy.optimize)** 371 | 372 | 优化模块内含解决单变量和多变量的目标函数最小值问题的功能。它通过大量的算法解决最小化问题。优化模块支持线性回归、搜索函数的最大值与最小值、方程求根、线性规划、拟合等功能。 373 | 374 | **EXAMPLE:** 375 | 对(x,y)线性拟合,x、y的值见程序 376 | 377 | ```python 378 | import numpy as np 379 | from scipy import optimize 380 | x = np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78]) 381 | y = np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05]) 382 | 383 | def residual(p): 384 | k,b = p 385 | return y-(k*x+b) 386 | 387 | r = optimize.leastsq(residual,[1,0]) #最小二乘法的拟合 388 | k,b = r[0] 389 | print(k) 390 | print(b) 391 | ``` 392 | $ \textbf{Out:}$ 393 | ``` 394 | 0.6134953491930442 395 | 1.794092543259387 396 | ``` 397 | ### **2.4文件读写(scipy.io)** 398 | 399 | scipy.io模块中,有一点值得注意的是,此模块可以导入或者生成matlab中的数据文件.mat文件,具体实现代码和调用如下所示: 400 | 401 | ```python 402 | from scipy import io 403 | x = np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78]) 404 | y = np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05]) 405 | data ={} 406 | data['x']=x 407 | data['y']=y 408 | io.savemat('datafile.mat',data) 409 | test_data = io.loadmat('test_data.mat') 410 | print(test_data) 411 | print(test_data['test_data']) #引用时写变量名用于引用 412 | ``` 413 | ``` 414 | {'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on:', '__version__': '1.0', '__globals__': [], 'test_data': array([[ 1, 2, 3, 4, 5], 415 | [ 6, 7, 8, 9, 10]], dtype=uint8)} 416 | [[ 1 2 3 4 5] 417 | [ 6 7 8 9 10]] 418 | 419 | ``` 420 | ### **2.5 官方文档** 421 | 当然,除了上述模块以外,scipy还有很多值得探索的功能,在数学计算中,scipy可以说是无所不能。需要学习更多内容的话,欢迎阅读scipy官方文档: 422 | 423 | [SciPy User Guide — SciPy v1.7.1 Manual](https://docs.scipy.org/doc/scipy/reference/tutorial/index.html#user-guide) 424 | 425 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/Trade.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/Trade.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/figure2_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班03/figure2_45.png -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班03/上堂课(第二章)的 实战应用.md: -------------------------------------------------------------------------------- 1 | # Numpy & Pandas & Matplotlib 综合运用 2 | 3 | 文档负责人:宋奕辰 4 | 5 | ## 目标: 6 | 对"./Trade.xlsx"的数据进行分析与可视化操作。 7 | 8 | ### **前置操作** 9 | #### **导入包** 10 | ```python 11 | import numpy as np 12 | import pandas as pd 13 | import matplotlib.pyplot as plt 14 | ``` 15 | 16 | 17 | #### **数据读取、图片显示设置** 18 | 19 | ```python 20 | df0=pd.read_excel("Trade.xlsx") #df0代表原始数据 21 | df0['year']=df0.Date.dt.year #添加交易年份字段 22 | df0['month']=df0.Date.dt.month #添加交易月份字段 23 | plt.rc('font',family='SimHei') #用来正常显示中文标签 24 | ``` 25 | 26 | #### **数据预览** 27 | 可以利用pandas Dataframe的head属性预览前5条数据,当数据量极大的情况下,比Excel快(Excel需要加载所有数据之后才能看到前几行的情况)。 28 | ```python 29 | print(df0.head()) 30 | ``` 31 | $ \textbf{Out:}$ 32 | ``` 33 | Date Order_Class Sales Transport ... Category Box_Type year month 34 | 0 2010-10-13 低级 261.5400 火车 ... 办公用品 大型箱子 2010 10 35 | 1 2012-02-20 其它 6.0000 火车 ... 办公用品 小型包裹 2012 2 36 | 2 2011-07-15 高级 2808.0800 火车 ... 家具产品 中型箱子 2011 7 37 | 3 2011-07-15 高级 1761.4000 大卡 ... 家具产品 巨型纸箱 2011 7 38 | 4 2011-07-15 高级 160.2335 火车 ... 技术产品 中型箱子 2011 7 39 | ``` 40 | 41 | ### **TASK1:** 2012年各等级订单比例 42 | ```python 43 | ax1=plt.subplot(1,1,1) #创建图 44 | #ax1=plt.subplot(2,3,1) #左上角的子图 45 | Class_Counts=df0.Order_Class[df0.year==2012].value_counts() 46 | Class_Percent=Class_Counts/Class_Counts.sum() 47 | ax1.set_aspect(aspect='equal') #设置纵横轴比例相等 48 | ax1.pie(Class_Percent,labels=Class_Percent.index, 49 | autopct="%.1f%%") #添加格式化的百分比显示 50 | ax1.set_title("2012年各等级订单比例") 51 | plt.show() 52 | ``` 53 | ![](./Figure_4.png) 54 | ### **TASK2:** 2012年各月销售趋势 55 | ```python 56 | ax2=plt.subplot(1,1,1) 57 | #ax2=plt.subplot(2,3,2) #建立第2个子图窗口 58 | #统计2012年每月销售额 59 | Month_Sales=df0[df0.year==2012].groupby(by='month').aggregate({'Sales':np.sum}) 60 | 61 | #下面使用Pandas画图 62 | Month_Sales.plot(title="2012年各月销售趋势",ax=ax2, legend=False) 63 | ax2.set_xlabel('') 64 | ``` 65 | ![](./Figure_5.png) 66 | ### **TASK3:** 各种交通运输方式的价格分布箱型图 67 | ```python 68 | ax3=plt.subplot(1,1,1) 69 | #ax3=plt.subplot(2,3,(3,6))#右侧两块区域 70 | cost=df0['Trans_Cost'].groupby(df0['Transport']) 71 | ts = list(cost.groups.keys()) 72 | dd = np.array(list(map(cost.get_group, ts))) 73 | plt.boxplot(dd); plt.gca().set_xticklabels(ts)#箱型图 74 | ``` 75 | ![](./Figure_6.png) 76 | ### **TASK4:** 2012年销售额分布图 77 | ```python 78 | ax4=plt.subplot(1,1,1) 79 | #ax4=plt.subplot(2,3,(4,5))#左下方两块区域 80 | plt.hist(df0.Sales[df0.year==2012],bins=40, density=True) 81 | ax4.set_title("2012年销售额分布图"); 82 | ax4.set_xlabel("销售额"); 83 | plt.savefig("figure2_45.png"); 84 | plt.show() 85 | ``` 86 | ![](./Figure_7.png) 87 | ### **将所有图整合到一起** 88 | 我们将上述的命令中的第一行(1,1,1)改为我们需要的位置,如按照注释修改后,得到下图: 89 | ![](./Figure_8.png) 90 | 91 | ## 结语 92 | Matplotlib 的技术细节还是很多的,详情可以参考其官方网站:https://matplotlib.org/ 93 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班04/线性代数问题的符号解和数值解(更正).md: -------------------------------------------------------------------------------- 1 | # 线性代数问题的符号解与数值解 2 | 3 | ------ 4 | 5 | **负责人:李媛** 6 | 7 | ------ 8 | 9 | ## 一. 线代的符号解 10 | ### 1.创建矩阵与矩阵的基本操作 11 | 12 | #### 前言: 13 | 14 | > 头文件 sympy 15 | > 16 | > import sympy as sp 17 | 18 | * #### 创建矩阵 19 | 20 | ```python 21 | A = sp.Matrix( [ [1,2,3], [0,0,0], [3,2,1]] ) 22 | print(A) 23 | # 此处以行的形式储存矩阵 24 | B = sp.Matrix( [ [-1,2,-3], [2,3,4], [-3,-2,-1] ]) 25 | print(B*sp.I) 26 | 27 | x = sp.symbols('x') 28 | y = sp.symbols('y') 29 | z = sp.symbols('z') 30 | C = sp.Matrix([ [x,y,z], [y,z,x], [x,z,y]]) 31 | print(C**2) 32 | ``` 33 | 34 | * #### 结果 35 | 36 | >```python 37 | >Matrix([[1, 2, 3], [0, 0, 0], [3, 2, 1]]) 38 | >Matrix([[-I, 2*I, -3*I], [2*I, 3*I, 4*I], [-3*I, -2*I, -I]]) 39 | >Matrix([[2, 3], [0, 0], [2, 1]]) 40 | >Matrix([[x**2 + x*z + y**2, x*y + y*z + z**2, x*y + x*z + y*z], [x**2 + x*y + y*z, x*z + y**2 + z**2, x*y + x*z + y*z], [x**2 + x*y + y*z, x*y + y*z + z**2, 2*x*z + y**2]]) 41 | > 42 | >``` 43 | 44 | * #### 基本矩阵操作 45 | 46 | > $$ 47 | > 矩阵的范数: {Frobenius范数}= \sqrt{\Sigma_{i}\Sigma_{j} A_{ij}^2} \newline还有很多种不再一一列举,sympy内只能向量求模长 48 | > $$ 49 | 50 | ```python 51 | 1.获取矩阵的行列 52 | M.shape 53 | 2.获取矩阵中的任一行 54 | M.row(0) 55 | 3.获取矩阵中的任一列 56 | M.col(0) 57 | 4.矩阵的行和列删除 58 | M.row_del() 59 | M.col_del() 60 | 5.添加矩阵的行和列 61 | M.row_insert(1, sp.Matrix([[0, 4]])) 62 | M.col_insert(0, sp.Matrix([[0, 4]])) 63 | 6.模长 64 | A.norm() #矩阵的模长 65 | 7.转置 66 | A.T 67 | 8.行列式 68 | A.det() 69 | 9.秩 70 | A.rank() 71 | 10.化为标准型 72 | A.rref() 73 | # 向量运算 74 | 11.点乘 75 | A.dot(B) 76 | 12.叉乘 77 | A.cross(B) 78 | 13.向量内积 79 | A.inner(B) 80 | 14.求逆 81 | A**-1 82 | A.inv() 83 | 15.横联,纵连 84 | A.row_join(B) 85 | A.col_join(B) 86 | ``` 87 | ### 2.线性方程组求解 88 | * #### Ax = 0 89 | 90 | $$ 91 | \begin{cases} 92 | x_1 - 5x_2 + 2x_3 - 3x_4 = 0\newline 93 | 5x_1 + 3x_2 + 6x_3 - x_4 = 0\newline 94 | 2x_1 + 4x_2 + 2x_3 + x_4 = 0 95 | \end{cases} 96 | $$ 97 | 98 | 代码 99 | 100 | ```python 101 | A = sp.Matrix([[1,-5,2,-3],[5,3,6,-1],[2,4,2,1]]) 102 | b = sp.Matrix([0,0,0]) 103 | b.transpose() 104 | print(A.nullspace()) # 零空间解系即基础解系 105 | #np.null_space(A) # numpy下写法 106 | 107 | ``` 108 | 109 | 结果 110 | 111 | ``` 112 | [Matrix([ 113 | [-9/7], 114 | [ 1/7], 115 | [ 1], 116 | [ 0]]), Matrix([ 117 | [ 1/2], 118 | [-1/2], 119 | [ 0], 120 | [ 1]])] 121 | ``` 122 | 123 | * #### Ax = b 124 | 125 | $$ 126 | \begin{cases} 127 | x_1 + x_2 - 3x_3 - x_4 = 1 \newline 128 | 3x_1 - x_2 - 3x_3 + 4x_4 = 4\newline 129 | x_1 + 5x_2 - 9x_3 - 8x_4 = 0 130 | \end{cases} 131 | $$ 132 | 133 | 代码 134 | 135 | ```python 136 | A = sp.Matrix([[1,1,-3,-1],[3,-1,-3,4],[1,5,-9,-8]]) 137 | b = sp.Matrix([1,4,0]);b.transpose() 138 | A1 = A.row_join(b) 139 | print(A1.rref()) # rref() 化为标准型 140 | ``` 141 | 142 | 结果 143 | 144 | ``` 145 | (Matrix([ 146 | [1, 0, -3/2, 3/4, 5/4], 147 | [0, 1, -3/2, -7/4, -1/4], 148 | [0, 0, 0, 0, 0]]), (0, 1)) 149 | ``` 150 | 151 | ### 3.特征值与特征向量 152 | 153 | * #### 定义 154 | 155 | $$ 156 | Aα = λα \newline, \alpha 是A关于 特征值\lambda 的 特征向量 157 | $$ 158 | 159 | 160 | 161 | * #### 充要条件 162 | 163 | $$ 164 | |A - \lambda E| = 0 \newline 165 | A = \left[ 166 | \begin{matrix} 167 | 0&-2& 2 \newline 168 | -2& -3& 4 \newline 169 | 2& 4 &-3 170 | \end{matrix} 171 | \right] 172 | $$ 173 | 174 | 代码 175 | 176 | ```python 177 | A = sp.Matrix([[0,-2,2],[-2,-3,4],[2,4,-3]]) 178 | print(A.eigenvals(),"\n") # 特征值 179 | print(A.eigenvects()) # 特征向量 180 | ``` 181 | 182 | 结果 183 | 184 | ``` 185 | {-8: 1, 1: 2} 186 | 187 | [(-8, 1, [Matrix([ 188 | [-1/2], 189 | [ -1], 190 | [ 1]])]), (1, 2, [Matrix([ 191 | [-2], 192 | [ 1], 193 | [ 0]]), Matrix([ 194 | [2], 195 | [0], 196 | [1]])])] 197 | ``` 198 | 199 | ### 4. 相似对角化 200 | 201 | * #### 定义 202 | 203 | $$ 204 | P^{-1}AP = D \newline, 205 | D为对角矩阵 206 | $$ 207 | 208 | 代码 209 | 210 | ```python 211 | if A.is_diagonalizable(): # 判断对角化 212 | print(A.diagonalize()) # 输出P、D 213 | else: print('no diagonalize') 214 | ``` 215 | 216 | 结果 217 | 218 | ``` 219 | (Matrix([ 220 | [-1, -2, 2], 221 | [-2, 1, 0], 222 | [ 2, 0, 1]]), Matrix([ 223 | [-8, 0, 0], 224 | [ 0, 1, 0], 225 | [ 0, 0, 1]])) 226 | ``` 227 | 228 | ## 二. 线代的数值解 229 | 230 | ### 1.基本操作 231 | 232 | ![image-20211030181134572](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211030181134572.png) 233 | 234 | ![image-20211030181203706](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211030181203706.png) 235 | 236 | ![image-20211030181223559](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211030181223559.png) 237 | 238 | ------ 239 | 240 | **注意:** 241 | 242 | ##### numpy中 A*B 为对应元素相乘,A@B,A.dot(B)为矩阵乘法 243 | 244 | ------ 245 | 246 | ### 2. 非齐次线性方程的数值解 247 | 248 | #### 前言: 249 | 250 | >头文件 251 | > 252 | >import numpy.linalg as LA 253 | >import matplotlib.pyplot as plt 254 | 255 | * #### 定理: 256 | 257 | ![image-20211030181601433](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211030181601433.png) 258 | 259 | #### 注: 260 | 261 | ![image-20211030181821589](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211030181821589.png) 262 | 263 | 代码: 264 | $$ 265 | \begin{cases} 266 | x_1 + x_2 -3x_3 -x_4 = 1\newline 267 | 3x_1 -x_2 -3x_2 + 4x_4 = 4\newline 268 | x_1 + 5x_2 - 9x_3 - 8x_4 = 0 269 | \end{cases} 270 | $$ 271 | 272 | ```python 273 | A = np.array([[1,1,-3,-1],[3,-1,-3,4],[1,5,-9,-8]]) 274 | b = np.array([1,4,0]);b=b.T 275 | x = LA.pinv(A).dot(b) 276 | # pinv伪逆 dot矩阵乘法 277 | # 非方阵无逆,但有伪逆 278 | print(x) 279 | ``` 280 | 281 | 结果 282 | 283 | > [ 0.35040431 -0.0916442 -0.38814016 0.42318059] 284 | 285 | ### 3. 最小二乘解 286 | 287 | * #### eg: 288 | 289 | $$ 290 | \begin{cases} 291 | x_1 + x_2 = 1\newline 292 | 2x_1 + 2x_2 = 3\newline 293 | x_1 + 2x_2 = 2 294 | \end{cases} 295 | $$ 296 | 297 | 代码: 298 | 299 | ```python 300 | A = np.array([[1,1],[2,2],[1,2]]) 301 | b = np.array([1,3,2]);b=b.T 302 | print(LA.pinv(A).dot(b)) 303 | # LA.inv(A) 304 | ``` 305 | 306 | 结果 307 | 308 | > [0.8 0.6] 309 | 310 | ### 4. 超定线性最小二乘解(过定义) 311 | 312 | * #### eg: 313 | 314 | $$ 315 | \left[ 316 | \begin{matrix} 317 | 0&1\newline1&1\newline2&1\newline3&1\newline 318 | \end{matrix} 319 | \right] 320 | \left[ 321 | \begin{matrix} 322 | m\newline c 323 | \end{matrix} 324 | \right] 325 | \left[ 326 | \begin{matrix} 327 | -1\newline0.2\newline0.9\newline2.1 328 | \end{matrix} 329 | \right] 330 | $$ 331 | 332 | 代码: 333 | 334 | ```python 335 | x = np.arange(4) 336 | y = np.array([-1,0.2,0.9,2.1]) 337 | A = np.c_[x,np.ones_like(x)] 338 | m,c = LA.lstsq(A, y, rcond=None)[0] #返回列表,第一位为答案,后面是误差 339 | LA.lstsq(A, y, rcond=None) 340 | print(m,c) 341 | # rcond用来处理回归中的异常值,一般不用。(或者直接写-1) 342 | #画图 343 | plt.rc('font',size = 16) 344 | plt.plot(x,y,'o',label = '原始数据',markersize = 5) 345 | plt.plot(x, m*x + c, 'r', label = '拟合曲线') 346 | plt.rc('font',family = 'SimHei')#中文 347 | plt.rc('axes',unicode_minus = False)#正负号 348 | plt.show() 349 | ``` 350 | 351 | 结果 352 | 353 | > ``` 354 | > m = 0.9999999999999997 c = -0.949999999999999 355 | > ``` 356 | > 357 | > ![2](https://gitee.com/mr_asd/taolunban-img/raw/master/images/2.png) 358 | 359 | ## 总结 360 | 361 | numpy内的矩阵处理与sympy内的极为相似,但相较而言,numpy更为全面与好用,建议不需要符号解法时(绝大多数情况下)使用numpy。 362 | 363 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班05/第八周记录.md: -------------------------------------------------------------------------------- 1 | # 线性回归和数据清洗 2 | 3 | ---- 4 | 5 | 负责人:刘俊涵 6 | 7 | --- 8 | 9 | ## 1.一元线性回归模型 10 | 11 | 模型研究变量间的关系,变量间的关系有确定性关系(可以用函数来表示,一个x对应一个y)和相关关系(不能用函数来表示,一个x可能对应好几个y)。 12 | 13 | 一元线性模型可用来解释相关关系 14 | $$ 15 | y=\beta_0+\beta_1x+\epsilon 16 | $$ 17 | 其中$\beta_0$和$\beta_1$是未知待定常数,$\epsilon$表示其他随机因素对y的影响,满足$N(0,\sigma^2)$分布。 18 | 19 | ### 1.2参数$\beta_0$和$\beta_1$的最小二乘估计 20 | 21 | 利用最小二乘法刻画接近程度 22 | 23 | 用最小二乘法刻画“接近程度”,使y的观察值与估计值偏差的平方和最小,即只需求函数 24 | $$ 25 | Q=\sum_{i=1}^n (y_i-\beta_0-\beta_1 x_i)^2 26 | $$ 27 | **好处**:绝对值不好求导,平方可微,在数学上性质好一点,所以一般用最小二乘法 28 | 29 | Q是$\beta_0$和$\beta_1$的函数,可以用求偏导的方法求得 30 | 31 | **自由度**:独立的变量个数 32 | 33 | ### 1.3相关性检验与判定系数(拟合优度) 34 | 35 | 采用样本方差的方法来测度 36 | 37 | $SST=\sum_{i=1}^{n}(y_i-\overline y)^2=L_{yy}$,这是原始数据$y_i$的总变异平方和,其自由度为$df_T=n-1$; 38 | 39 | $SSR=\sum_{i=1}^n(\hat y-\overline y)^2$,这是用拟合直线$\hat y_i=\hat \beta_0 +\hat \beta_1 x_i$可解释的变异平方和,其自由度为$df_R=1$ 40 | 41 | $SSE=\sum_i^n(y_i-\hat y_i)^2$,这是残差平方和,其自由度为$df_E=n-2$ 42 | 43 | 注:这里$(\hat y_i - \overline y)$和$(y_i-\hat y_i)$正交,所以自由度可以直接通过相加计算,否则左右相加自由度不一定相等 44 | 45 | (1)SSR越大,用回归方程来解释$y_i$变异的部分越大,回归方程对原数据解释得越好; 46 | 47 | (2)SSE越小,观测值$y_i$绕回归直线越紧密,回归方程对原数据的拟合效果越好。 48 | 49 | 判定系数是指可解释的变异占总变异的百分比,用$R^2$表示, 50 | $$ 51 | R^2=\frac{SSR}{SST}=1-\frac{SSE}{SST} 52 | $$ 53 | $R^2$有以下几个简单性质 54 | 55 | (1)$0\le R^2\le 1$ 56 | 57 | (2)$R^2=1$时,有SSR=SST,此时原数据的总变异可以完全由拟合值的变异来解释,残差为0 58 | 59 | (3)$R^2=0$时,回归方程完全不能解释原数据的总变异,y的变异有与x无关的因素引起 60 | 61 | ### 1.4回归方程的显著性检验 62 | 63 | 实际应用中,需要检验$f(x)$是否为x的线性函数 64 | 65 | 利用检验统计量 66 | $$ 67 | F=\frac{SSR}{SSE/(n-2)}~F(1,n-2) 68 | $$ 69 | 查表,决策规则如下: 70 | 71 | (1)$F_{0.01}(1,n-2)NumPy库提供了polyfit函数 84 | > 85 | >np.polyfit(x,y,deg=n)用于拟合n次多项式,n次多项式和线性关系式的求法是一样的 86 | > 87 | >最后返回一个list,从小到大分别是指数从大到小,比如当n=1时,p[0]表示x的系数,p[1]表示常数项系数 88 | > 89 | >np.polyval(p,x)可以用拟合好的系数来求拟合的值 90 | 91 | ```python 92 | import matplotlib.pyplot as plt 93 | import numpy as np 94 | x=[2.5, 3.9, 2.9, 2.4, 2.9, 0.8, 9.1, 0.8, 0.7,7.9, 1.8, 1.9, 0.8, 6.5, 1.6, 5.8, 1.3, 1.2, 2.7] 95 | y=[211, 167, 131, 191, 220, 297, 71, 211, 300, 107, 96 | 167, 266, 277, 86, 207, 115, 285, 199, 172] 97 | plt.plot(x,y,'+k', label="原始数据点") 98 | p=np.polyfit(x,y,deg=1) #拟合一次多项式 deg=2 可以拟合二次多项式 99 | #返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中) 100 | print("拟合的多项式为:{}*x+{}".format(p[0],p[1])) 101 | plt.rc('font',size=16); plt.rc('font',family='SimHei')#SimHei 黑体 102 | plt.plot(x, np.polyval(p,x), label="拟合的直线") 103 | print("预测值为:", np.polyval(p, 8)); plt.legend() 104 | plt.savefig("figure4_25.png", dpi=500); plt.show()#dpi 分辨率 105 | ``` 106 | 107 | ## 2.数据清洗 108 | 109 | 处理数据的时候,得到的表格不一定是完整的数据,即使是完整的数据,也有可能有异常的地方。 110 | 111 | 本节介绍**如何识别和处理重复观测、缺失值和异常值**。 112 | 113 | ### 2.1重复观测 114 | 115 | > **Pandas**提供了检测和删除重复的记录的功能 116 | > 117 | > **Pandas**中使用**duplicated**方法,该方法返回的是数据行每一行的检验结果,即每一行返回一个**bool**值。使用**drop_duplicates**方法移除重复值。 118 | 119 | `Pex4_26.py` 120 | 121 | ```python 122 | import pandas as pd 123 | a=pd.read_excel("Pdata4_26_1.xlsx") 124 | print("是否存在重复观测:",any(a.duplicated())) #输出:True 125 | # a.drop_duplicates(self,subset=['id',...],keep='first') 126 | # subset是列名的list,可以按照这些列来判断是否重复,keep=‘first’表示保留的是重复记录中的第一个 127 | a.drop_duplicates(inplace=True) #inplace=True时,直接删除a中的重复数据 128 | f=pd.ExcelWriter('Pdata4_26_2.xlsx') #创建文件对象 129 | a.to_excel(f) #把a写入新Excel文件中 130 | f.save() #保存文件,数据才真正写入Excel文件 131 | ``` 132 | 133 | ### 2.2缺失值 134 | 135 | **【nan】not a number** 136 | 137 | > **Pandas**使用浮点值**NaN**表示浮点或非浮点数组中的缺失数据,Python内置的None值也会被当作缺失值处理。**Pandas**中使用方法**isnull**检测是否为缺失值,检测对象的每个元素返回一个**bool值**。 138 | 139 | **检测缺失值** 140 | 141 | ```python 142 | from numpy import NaN 143 | from pandas import Series 144 | data=Series([10.0, None, 20, NaN, 30]) 145 | print(data.isnull()) #输出每个元素的检测结果 146 | print("是否存在缺失值:", any(data.isnull())) #输出:True 147 | ``` 148 | 149 | 输出 150 | 151 | ```bash 152 | 0 False 153 | 1 True 154 | 2 False 155 | 3 True 156 | 4 False 157 | dtype: bool 158 | 是否存在缺失值: True 159 | ``` 160 | 161 | 输出True,说明这个位置是缺失,any()函数只要有True,就返回True。 162 | 163 | **去掉缺失值** 164 | 165 | > Pandas中提供dropna和drop两个函数用于删除缺失值 166 | 167 | ```bash 168 | #程序文件Pex4_28.py 169 | from pandas import read_excel 170 | a=read_excel("Pdata2_33.xlsx",usecols=range(1,4)) 171 | b1=a.dropna() #删除所有的缺失值 dropna(axis=0,how='any',thresh=None) 172 | b2=a.dropna(axis=1, thresh=9) #删除有效数据个数小于9的列 173 | b3=a.drop('用户B', axis=1) #删除用户B的数据 174 | b4=a.drop(1, axis=0) #删除'1'(int)行数据 175 | ``` 176 | 177 | **填补缺失值** 178 | 179 | > Pandas中提供fillna函数来填补缺失值,value可以是一个字典 180 | 181 | ```python 182 | #程序文件Pex4_29.py 183 | from pandas import read_excel 184 | from numpy import NaN 185 | a=read_excel("Pdata4_29.xlsx") 186 | #a['age',0]=NaN#也可以a.age[0]=NaN,但是会警告 187 | a['age',0]=NaN 188 | b1=a.fillna(0) #用0填补所有的缺失值 189 | b2=a.fillna(method='ffill') #用前一行的值填补缺失值,第一行缺失值不处理 190 | b3=a.fillna(method='bfill') #用后一行的值填补,最后一行缺失值不处理 191 | b4=a.fillna(value={'gender':a.gender.mode()[0], #性别使用众数替换 192 | 'age':a.age.mean(), #年龄使用均值替换 193 | 'income':a.income.median()}) #收入使用中位数替换 194 | ``` 195 | 196 | ### 2.3异常值处理 197 | 198 | **异常值检测** 199 | 200 | 异常值指一些不符合常理的值和一些极端的值 201 | 202 | 异常值检测有两种常用的方法:一种是标准差法,如3$\sigma$方法(极端异常值),2$\sigma$方法(异常值);另一种是箱线图判别法。 203 | 204 | 若服从正态分布,还是用$\sigma$方法比较好,箱线图法用于比较对称的分布。 205 | 206 | ```python 207 | a.counts.quantile(0.25) # 计算下四分位数 208 | a.counts.quantile(0.75) # 计算上四分位数 209 | ``` 210 | 211 | **替换异常值** 212 | 213 | 超出上界的值用上界替换,小于下界的值用下界替换 214 | 215 | ```python 216 | print("异常值替换前的数据统计特征",a.counts.describe()) 217 | UB=Q3+1.5*IQR 218 | st=a.counts[a.countsUB, 'counts']=st #替换超过判别上限异常值 222 | print("异常值替换后的数据统计特征",a.counts.describe()) 223 | ``` 224 | 225 | ### 3总结 226 | 227 | 本次讨论课主要讲授了一元线性方程和数据清洗,一元线性方程可以利用numpy来拟合和求值,正常的数学工具包几乎都有这个功能,数据清洗主要用的是pandas包,针对重复、缺失、异常值三类情况的处理。 -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班06/第五章 线性规划.md: -------------------------------------------------------------------------------- 1 | # 线性规划 2 | 整理人:李媛 3 | 4 | ## 一. 线性规划的概念和理论 5 | 6 | ### 1.线性规划问题的概述 7 | > 线性规划(Linear Programming)是运筹学的一个重要分支,数学上它用来确定多变量线性函数在变量满足线性约束条件下的最优值。线性规划模型通常由三个要素--**决策变量**、**目标函数**和**约束条件**构成。 8 | > 9 | > 问题求解就是找出决策变量的最终取值;目标函数是决策变量的线性函数; 约束条件即所受限制。 10 | 11 | ​ 一般模型: 12 | $$ 13 | \max(min)z=\sum_{j=1}^n c_jx_j 14 | $$ 15 | ​ $\max(\min)z=\sum_{j=1}^n c_jx_j$ #目标函数 16 | 17 | ​ $s.t. \sum_{j=1}^n a_{ij}x_j≤(≥,=)b_i ,i=1,2,...,m$ 且 $x_j≥0, j=1,2,...,n$ #约束条件 18 | 19 | ​ 矩阵形式: 20 | 21 | ​ $\max(\min)z=c^Tx$ , 22 | 23 | ​ $s.t.Ax≤(≥,=)b, 且 x≥0$ 24 | 25 | ​ 向量形式: 26 | 27 | ​ $\max(\min)z=c^Tx,$ 28 | 29 | ​ $s.t.\sum_{j=1}^n p_jx_j ≤(≥,=)b, 且 x≥0$ 30 | 31 | ​ 数学上,规定线性规划的标准型为 $\max z=c^Tx, s.t. Ax=b 且 x≥0$ 32 | 33 | ### 2.线性规划解的概念和性质 34 | * 可行解:满足全部约束条件的决策向量$x\in R^n$​。 35 | * 可行域:满足全部约束条件的决策向量$x\in R^n$即全部可行解构成的集合,且为**凸集** 36 | * 最优解:使得目标函数得到最优值(并且有界)的可行解 37 | * 定理: **当有最优解时,一定可以在可行域的某个顶点上取到。当有唯一解时,最优解就是可行域的某个顶点。当有无穷多个最优解时,其中至少有一个解是可行域的一个顶点。** 38 | * 注:此处的顶点指不在集合的任意两点的连线上(不包括端点);线性规划的基本可行解对应凸多面体顶点。 39 | 40 | ### 3.可转化为线性规划的问题 41 | 42 | ​ 如问题 $\min |x_1|+|x_2|+...+|x_n|, s.t. Ax≤b$ 43 | 44 | ​ 只要取$u_i=\frac{|x_i|+x_i}{2},v_i=\frac{|x_i|-x_i}{2}$就可以满足线性规划的条件 45 | 46 | ​ 问题自然转化为$\min \sum_{i=1}^n (u_i+v_i), s.t.[A,-A]$$\begin{bmatrix} u \\ v \ \end{bmatrix}$$≤b 且 u,v≥0$ 47 | 48 | ## 二. 线性规划的Python求解 49 | 50 | ### 1.用scipy.optimize模块求解 51 | 52 | ​ 求解线性规划的函数linprog,该函数集中了解线性规划常用算法,如单纯形法和内点法。 53 | 54 | ​ scipy中线性规划的标准型:$\min z=c^Tx,s.t.Ax≤b, Aeq·x=beq,Lb≤x≤Ub$ 55 | 56 | **(利用linprog函数求解的重点是整合成标准型)** 57 | 58 | ```python 59 | from scipy.optimize import linprog 60 | res=linprog(c,A,b,Aeq,beq,bounds,method='***') # c对应标准形中的目标向量;A,b对应不等号约束;Aep,bep对应等号约束;bounds的默认取值是下界为0,上界为+∞ 61 | res.fun 目标函数最小值(最优解) 62 | res.x 最优解的解向量 63 | ``` 64 | 65 | ### 2. 用cvxopt.solvers模块求解 66 | 67 | ​ cvxopt.solvers中线性规划的标准型:$\min z=c^Tx,s.t.Ax≤b,Aeq·x=beq$ 68 | 69 | ```python 70 | import numpy as np 71 | from cvxopt import matrix,solvers 72 | sol=solvers.lp(c,A,b,Aeq,beq) 73 | print(sol['x']) 74 | print(sol['primal objective']) 75 | ``` 76 | 77 | ​ **在程序中虽然没有直接使用NumPy库中的函数,不加载也可以,但数据必须写成浮点型数据** 78 | 79 | ### 3. 用cvxpy模块求解 80 | 81 | ​ 属于可以计算导入数据的线性规划最优解的方法 82 | 83 | ​ 用于求解凸优化问题,线性规划相当于凸优化的“子章节” 84 | 85 | ```python 86 | import cvxpy as cp 87 | import numpy as np 88 | import pandas as pd 89 | obj=cp.Minimize(cp.sum(cp,multiply(c,x)))#∑X(i,j) C*X 90 | con=[cp.sum(x,axis=1,keepdims=True)<=e, 91 | cp.sum(x,axis=0,keepdims=True)==d,x>=0]#1是按行相加,0是按列相加 92 | prob=cp.Problem(obj,con)#obj是目标函数,con是约束条件 93 | prob.solve(solver='GLPK_MI',verbose=True) 94 | print(prob.value) 95 | print(x.value) 96 | ``` 97 | 98 | ## 三.总结 99 | 100 | ​ 本次课主要讲了两部分。一是线性规划的概念和理论,对线性规划的一般模型分析理解,并证明其理论;二是介绍三类求解线性规划的函数。 101 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班07/第七次讨论班.md: -------------------------------------------------------------------------------- 1 | # 第七次讨论班 2 | 3 | 分享人:王云申 4 | 5 | 记录:郭雪琦 6 | 7 | ## 一. 灵敏度分析 8 | 9 | ### 1.含义 10 | 11 | 灵敏度分析是指对系统因为周围条件变化显示出来的敏感程度的分析。在上次所讲的线性规划问题中,$a_{ij}$ 常随加工工艺的改变而变化,$c_i$常随市场因素的改变而改变,$b_i$则因为决策方案的改变而变化。 12 | 13 | > **对确定性不高的变量进行灵敏度分析** 14 | 15 | ### 2. 要解决的问题 16 | 17 | > * a,b,c 的变化对最优方案的影响 18 | > * 将参数的变化限制在什么范围内,最优方案不变 19 | 20 | 在实际应用中,常给定参变量步长重复求解线性规划问题,被称为数值解法。 21 | 22 | ### 3. 例题 23 | 24 | ![image-20211120165622579](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120165622579.png) 25 | 26 | ![image-20211120165656287](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120165656287.png) 27 | 28 | 解: 29 | 30 | 设每天用$x_1$桶牛奶生产A,用$x_2$桶牛奶生产B,每天获利$z$元,则建立数学模型如下: 31 | $$ 32 | max z = 72x_1 + 64x_2 \\ 33 | s.t.\begin{cases} 34 | x_1 + x_2 \leq 50 \\ 35 | 12x_1 + 8x_2 \leq 480 \\ 36 | 3x_1 \leq 100\\ 37 | x_1 \geq 0, x_2 \geq 0 38 | \end{cases} 39 | $$ 40 | 代码 41 | 42 | ```python 43 | from scipy.optimize import linprog as Li 44 | c = [-72, -64] 45 | A = [[1,1], [12,8]] 46 | b = [[50], [480]] 47 | bound = ((0,100/3.0), (0,None)) 48 | resp = Li(c=c,A_ub=A,b_ub=b,bounds=bound,method='simplex',options={"disp":True}) 49 | print(resp) 50 | 51 | #输出 52 | Optimization terminated successfully. 53 | Current function value: -3360.000000 54 | Iterations: 4 55 | con: array([], dtype=float64) 56 | fun: -3360.0 57 | message: 'Optimization terminated successfully.' 58 | nit: 4 59 | slack: array([0., 0.]) # 松弛量 60 | status: 0 61 | success: True 62 | x: array([20., 30.]) 63 | 因松弛量为0,所以不改变分配方案,参数变化后最优解不变,最优收益为3720元。 64 | ``` 65 | 66 | [linprog参数详解](https://blog.csdn.net/weixin_45288557/article/details/109139303) 67 | 68 | ## 二. 投资的收益与风险 69 | 70 | ## 1. 例题 71 | 72 | ![image-20211120172350857](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172350857.png) 73 | 74 | ![image-20211120172406829](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172406829.png) 75 | 76 | ![image-20211120172752863](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172752863.png) 77 | 78 | #但其实在现实生活中的投资问题比这复杂的多,因此为了尽可能简化我们的问题,我们需要提出详细的假设。 79 | 80 | #具体的投资模型有兴趣的同学可以参考这篇论文https://www.cicfconf.org/past/cicf2006/cicf2006paper/20060105182136.pdf 81 | 82 | ## 2. 符号规定与基本假设 83 | 84 | ### 符号规定 85 | 86 | ![image-20211120172847985](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172847985.png) 87 | 88 | ### 基本假设 89 | 90 | ![image-20211120172946458](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172946458.png) 91 | 92 | ## 3. 模型分析与建立 93 | 94 | ### 分析 95 | 96 | ![image-20211120173041311](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173041311.png) 97 | 98 | ![image-20211120173052284](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173052284.png) 99 | 100 | ### 三种简化模型建立 101 | 102 | #### (1) 103 | 104 | ![image-20211120173228627](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173228627.png) 105 | 106 | ![image-20211120173242106](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173242106.png) 107 | 108 | #### (2) 109 | 110 | ![image-20211120173305190](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173305190.png) 111 | 112 | ![image-20211120173333029](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173333029.png) 113 | 114 | #### (3) 115 | 116 | #### ![image-20211120173440688](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173440688.png) 117 | 118 | ![image-20211120173457330](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173457330.png) 119 | 120 | ## 4. 求解 121 | 122 | #### (1) 123 | 124 | ![image-20211120173600944](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173600944.png) 125 | 126 | 由于a因人而异,从$a=0$开始以步长为0.001开始求解 127 | 128 | 代码 129 | 130 | ```python 131 | import matplotlib.pyplot as plt 132 | from numpy import ones, diag, c_, zeros 133 | from scipy.optimize import linprog 134 | plt.rc('text',usetex=True); plt.rc('font',size=16) 135 | c = [-0.05,-0.27,-0.19,-0.185,-0.185] 136 | A = c_[zeros(4),diag([0.025,0.015,0.055,0.026])] 137 | Aeq =[[1,1.01,1.02,1.045,1.065]]; beq = [1] 138 | a=0; aa=[]; ss=[] 139 | while a<0.05: 140 | b = ones(4)*a 141 | res = linprog(c,A,b,Aeq,beq) 142 | x = res.x; Q = -res.fun 143 | aa.append(a); ss.append(Q) #把最优值都保存起来 144 | a = a+0.001 145 | plt.plot(aa,ss,'r*') 146 | plt.xlabel('$a$'); plt.ylabel('$Q$',rotation=90) 147 | plt.show() 148 | 149 | ``` 150 | 151 | 输出 152 | 153 | ![figure5_1_1](https://gitee.com/mr_asd/taolunban-img/raw/master/images/figure5_1_1.png) 154 | 155 | #### (2) 156 | 157 | ![image-20211120175508120](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120175508120.png) 158 | 159 | 代码 160 | 161 | ```python 162 | # 程序文件Pan5_1_2.py 163 | import pylab as plt 164 | import numpy as np 165 | import cvxpy as cp#cvxpy是解决凸优化问题的,在使用之前要确保目标函数是一个凸优化问题(包括其中的变量范围设置,参数设置等) 166 | 167 | plt.rc('text', usetex=True) 168 | plt.rc('font', size=16) 169 | x = cp.Variable(6, pos=True) 170 | obj = cp.Minimize(x[5]) 171 | a1 = np.array([0.025, 0.015, 0.055, 0.026]) 172 | a2 = np.array([0.05, 0.27, 0.19, 0.185, 0.185]) 173 | a3 = np.array([1, 1.01, 1.02, 1.045, 1.065]) 174 | k = 0.05 175 | kk = [] 176 | ss = [] 177 | while k < 0.27: 178 | con = [cp.multiply(a1, x[1:5]) - x[5] <= 0, 179 | a2 @ x[:-1] >= k, a3 @ x[:-1] == 1] 180 | prob = cp.Problem(obj, con) 181 | prob.solve(solver='GLPK_MI') 182 | kk.append(k) 183 | ss.append(prob.value) 184 | k = k + 0.005 185 | plt.plot(kk, ss, 'r*') 186 | plt.xlabel('$k$') 187 | plt.ylabel('$R$', rotation=90) 188 | plt.show() 189 | 190 | ``` 191 | 192 | 输出 193 | 194 | ![figure5_1_2](https://gitee.com/mr_asd/taolunban-img/raw/master/images/figure5_1_2.png) 195 | 196 | 由图片可以得知随着风险偏好的升高投资收益呈现一种分段函数的趋势。 197 | 198 | #### (3) 199 | 200 | image-20211120183358662 201 | 202 | 203 | 204 | 代码 205 | 206 | ```python 207 | 208 | # 程序文件Pan5_1_2.py 209 | import matplotlib.pyplot as plt 210 | import numpy as np 211 | import cvxpy as cp 212 | 213 | # plt.rc('text', usetex=True) 214 | plt.rc('font', size=16) 215 | x = cp.Variable(6, pos=True) 216 | a1 = np.array([0.025, 0.015, 0.055, 0.026]) 217 | a2 = np.array([0.05, 0.27, 0.19, 0.185, 0.185]) 218 | a3 = np.array([1, 1.01, 1.02, 1.045, 1.065]) 219 | s = 0.00 220 | ss = [] 221 | ff = [] 222 | while s <= 1: 223 | obj = cp.Minimize(s*x[5] - (1-s)*sum(cp.multiply(a2,x[:-1]))) 224 | con = [cp.multiply(a1, x[1:5]) - x[5] <= 0, 225 | a3 @ x[:-1] == 1] 226 | prob = cp.Problem(obj, con) 227 | prob.solve(solver='GLPK_MI') 228 | ss.append(s) 229 | ff.append(prob.value) 230 | s = s + 0.01 231 | plt.plot(ss, ff, 'r*') 232 | plt.xlabel('s') 233 | plt.ylabel('R', rotation=90) 234 | plt.show() 235 | 236 | ``` 237 | 238 | 输出 239 | 240 | ![image-20211120205901226](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120205901226.png) 241 | 242 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班08/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班08/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班08/整数规划.md: -------------------------------------------------------------------------------- 1 | # 整数规划 2 | 3 | 分享人:王德民 4 | 5 | 总结人:从坤 6 | 7 | #### 定义 8 | 9 | 对于限制全部或部分决策变量取离散非负整数值的线性规划,我们称之为整数线性规划,简称为整数规划。 10 | 11 | #### **详细分类** 12 | 13 | | 类别 | 定义 | 14 | | :----------------: | :-------------------------------------: | 15 | | **纯整数规划** | 整数规划中,所有决策变量都限制为整数 | 16 | | **混合整数规划** | 整数规划中,一部分决策变量都限制为整数 | 17 | | $0-1$ **整数规划** | 整数规划中,决策变量仅限制为 $0$ 或 $1$ | 18 | 19 | #### 求解方法 20 | 21 | | 方法 | 求解问题 | 22 | | ---------- | ----------------------------------------------------- | 23 | | 分枝定界法 | 可求纯或混合整数线性规划 | 24 | | 割平面法 | 可求纯或混合整数线性规划 | 25 | | 隐枚举法 | 用于求解 $0-1$ 整数规划,有过滤隐枚举法和分枝隐枚举法 | 26 | | 匈牙利法 | 解决指派问题( $0-1$ 整数规划特殊情形) | 27 | | 蒙特卡罗法 | 求解各种类型规划 | 28 | 29 | #### 指派问题 30 | 31 | **1.标准指派模型** 32 | 标准指派问题的一般提法是:拟分派 $n$ 个人 $A_{1}, A_{2}, \cdots, A_{n}$ 去完成 $n$ 项工作 $B_{1}, B_{2}, \cdots, B_{n}$, 要求每项工作需且仅需一个人去完成, 每个人需完成且仅需完成一项工作。已知人 $A_{i}$ 完成工作 $B_{j}$ 的时间或费用等成本型指标值为 $c_{i j}$, 则应如何指派才能使总的工作效率最高? 33 | 34 | 引入0-1决策变量 35 | $$ 36 | x_{i j}=\left\{\begin{array}{l} 37 | 1, \text { 指派 } A_{i} \text { 去完成工作 } B_{j}, \\ 38 | 0, \text { 否则, } 39 | \end{array} \quad i, j=1,2, \cdots, n\right. \text {. } 40 | $$ 41 | 则标准指派问题的数学模型为 42 | $$ 43 | \begin{gathered} 44 | \min z=\sum_{i=1}^{n} \sum_{j=1}^{n} c_{i j} x_{i j}, \\ 45 | \text { s.t. }\left\{\begin{array}{l} 46 | \sum_{j=1}^{n} x_{i j}=1, \quad i=1,2, \cdots, n, \\ 47 | \sum_{i=1}^{n} x_{i j}=1, \quad j=1,2, \cdots, n, \\ 48 | x_{i j}=0 \text { 或 } 1, \quad i, j=1,2, \cdots, n, 49 | \end{array}\right. 50 | \end{gathered} 51 | $$ 52 | 这是一个纯 $0-1$ 整数规划模型,可以通过上面通用算法解决,为了提高求解效率,下面介绍匈牙利算法。 53 | 54 | 匈牙利算法基与以下两个定理: 55 | 56 | **定理 $6.1$** 设效率矩阵 $C=\left(c_{i j}\right)_{n \times n}$ 中任何一行 (列) 的各元素都减去一个 常数 $k$ (可正可负) 后得到的新矩阵为 $B=\left(b_{i j}\right)_{n \times n}$, 则以 $B=\left(b_{i j}\right)_{n \times n}$ 为效率矩 阵的指派问题与原问题有相同的最优解, 但其最优值比原问题的最优值小 $k$ 。 57 | 58 | **定理 $6.2$** (独立零元素定理) 若一方阵中的一部分元素为 0 , 一部分 元素为非 0 , 则覆盖方阵内所有 0 元素的最少直线数恰好等于那些位于不同 行、不同列的 0 元素的最多个数。 59 | 60 | 定理6.1告诉我们如何将效率矩阵中的元素转换为每行每列都有零元素,而定理6.2告诉我们效率矩阵中有多少个独立的零元素。 61 | 62 | 下面结合具体实例,分析匈牙利算法如何解决任务分配问题。 63 | 64 | 以 $N = 4$ 为实例,下图为 cost 列表和 cost 矩阵。 65 | 66 | ![1](https://gitee.com/mr_asd/taolunban-img/raw/master/images/1.png) 67 | 68 | **Step1.**从第1行减去75,第2行减去35,第3行减去90,第4行减去45。 69 | 70 | ![2](https://gitee.com/mr_asd/taolunban-img/raw/master/images/222.png) 71 | 72 | **Step2.**从第1列减去0,第2列减去0,第3列减去0,第4列减去5。 73 | 74 | ![3](https://gitee.com/mr_asd/taolunban-img/raw/master/images/3.png) 75 | 76 | **Step3.**利用最少的水平线或垂直线覆盖所有的0。 77 | 78 | ![4](https://gitee.com/mr_asd/taolunban-img/raw/master/images/4.png) 79 | 80 | **Step4.**由于水平线和垂直线的总数是3,少于4,进入Step5。 81 | 82 | **Step5.**没有被覆盖的最小值是5,没有被覆盖的每行减去最小值5,被覆盖的每列加上最小值5,然后跳转到步骤3。 83 | 84 | ![5](https://gitee.com/mr_asd/taolunban-img/raw/master/images/5.png) 85 | 86 | **Step3.**利用最少的水平线或垂直线覆盖所有的0。 87 | 88 | ![6](https://gitee.com/mr_asd/taolunban-img/raw/master/images/6.png) 89 | 90 | **Step4.**由于水平线和垂直线的总数是3,少于4,进入Step5。 91 | 92 | **Step5.**没有被覆盖的最小值是20,没有被覆盖的每行减去最小值20,被覆盖的每列加上最小值20,然后跳转到步骤3。 93 | 94 | ![7](https://gitee.com/mr_asd/taolunban-img/raw/master/images/7.png) 95 | 96 | **Step3.**利用最少的水平线或垂直线覆盖所有的0。 97 | 98 | ![9](https://gitee.com/mr_asd/taolunban-img/raw/master/images/9.png) 99 | 100 | **Step4.**由于水平线和垂直线的总数是4,算法结束,分配结果如下图所示。 101 | 102 | ![8](https://gitee.com/mr_asd/taolunban-img/raw/master/images/8.png) 103 | 104 | 其中,黄色框表示分配结果,左边矩阵的最优分配等价于左边矩阵的最优分配。 105 | 106 | **2.广义指派模型** 107 | 在实际应用中,常会遇到各种非标准形式的指派问题一广义指派问题。 通常的处理方法是先将它们转化为标准形式, 然后用匈牙利算法求解。 108 | 109 | | 类型 | 方法 | 110 | | ------------------------------------ | ---------------------------------------------------------- | 111 | | 最大化指派问题 | 用效率矩阵中最大数分别与效率矩阵中每个数作差即化为标准模型 | 112 | | 人数和任务数不等的指派问题 | 添加虚拟人或者虚拟任务 | 113 | | 一个人可完成多项任务的指派问题 | 一人看作多人,只需保证他们完成同一项任务的效率一样 | 114 | | 某项任务一定不能由某人完成的指派问题 | 对应效率取无穷大(足够大) | 115 | 116 | #### 例子 117 | 118 | 例 $6.1$ 求解下列整数线性规划问题: 119 | $$ 120 | \begin{aligned} 121 | &\min z=40 x_{1}+90 x_{2}, \\ 122 | &\text { s.t. }\left\{\begin{array}{l} 123 | 9 x_{1}+7 x_{2} \leq 56, \\ 124 | 7 x_{1}+20 x_{2} \geq 70, \\ 125 | x_{1}, x_{2} \geq 0 \text { 为整数. } 126 | \end{array}\right. 127 | \end{aligned} 128 | $$ 129 | 解 利用 cvxpy 库, 求得的最优解为 $x_{1}=2, x_{2}=3$; 标函数的最优值为 $z=350$ 。 130 | 131 | ``` 132 | import cvxpy as cp 133 | from numpy import array 134 | c=array([40,90]) #定义目标向量 135 | a=array([[9,7],[-7,-20]]) #定义约束矩阵 136 | b=array([56,-70]) #定义约束条件的右边向量 137 | x=cp.Variable(2,integer=True) #定义两个整数决策变量 138 | obj=cp.Minimize(c*x) #构造目标函数 139 | cons=[a*x<=b, x>=0] #构造约束条件 140 | prob=cp.Problem(obj, cons) #构建问题模型 141 | prob.solve(solver='GLPK_MI',verbose =True) #求解问题 142 | print("最优值为:",prob.value) 143 | print("最优解为:\n",x.value) 144 | ``` 145 | 146 | 例 $6.2$ 某商业公可计划开办 5 家新商店, 决定由 5 家建筑公可分别承建。已知建筑公可 $A_{i}(i=1,2, \cdots, 5)$ 对新商店 $B_{j}(j=1,2, \cdots, 5)$ 的建造费用报价 (万元) 为 $c_{i j}(i, j=1,2, \cdots, 5)$, 见表 $6.1$ 。为节省费用, 商业公可应当对 5 家建筑公可怎样分配建造任务, 才能使总的建造费用最少? 147 | $$ 148 | \begin{aligned} 149 | &\text \qquad \ { 表 } 6.1 \text { 建造费用报价数据 }\\ 150 | &\begin{array}{c|ccccc} 151 | \hline & \mathbf{B}_{1} & \mathbf{B}_{2} & \mathbf{B}_{3} & \mathbf{B}_{4} & \mathbf{B}_{5} \\ 152 | \hline \mathbf{A}_{1} & 4 & 8 & 7 & 15 & 12 \\ 153 | \mathbf{A}_{2} & 7 & 9 & 17 & 14 & 10 \\ 154 | \mathbf{A}_{3} & 6 & 9 & 12 & 8 & 7 \\ 155 | \mathbf{A}_{4} & 6 & 7 & 14 & 6 & 10 \\ 156 | \mathbf{A}_{5} & 6 & 9 & 12 & 10 & 6 \\ 157 | \hline 158 | \end{array} 159 | \end{aligned} 160 | $$ 161 | 解 这是一个标准的指派问题。引进 0-1 变量 162 | $$ 163 | x_{i j}=\left\{\begin{array}{l} 164 | 1, \text { 当 } \mathrm{A}_{i} \text { 承建 } \mathrm{B}_{j} \text { 时 } \\ 165 | 0, \text { 当 } \mathrm{A}_{i} \text { 不承建 } \mathrm{B}_{j} \text { 时 } 166 | \end{array}, i, j=1,2, \cdots, 5\right. \text {. } 167 | $$ 168 | 则问题的数学模型为 169 | $$ 170 | \begin{gathered} 171 | \min z=\sum_{i=1}^{5} \sum_{j=1}^{5} c_{i j} x_{i j}, \\ 172 | \text { s.t. }\left\{\begin{array}{l} 173 | \sum_{j=1}^{5} x_{i j}=1, \quad i=1,2, \cdots, 5, \\ 174 | \sum_{i=1}^{5} x_{i j}=1, \quad j=1,2, \cdots, 5, \\ 175 | x_{i j}=0 \text { 或 } 1, \quad i, j=1,2, \cdots, 5 . 176 | \end{array}\right. 177 | \end{gathered} 178 | $$ 179 | 利用 cvxpy 库, 求得的最优解为 180 | $$ 181 | \left[\begin{array}{lllll} 182 | 1 & 2 & 3 & 4 & 5 \\ 183 | 3 & 2 & 1 & 4 & 5 184 | \end{array}\right] 185 | $$ 186 | 也就是说,最优指派方案是,让 $A_{1}$ 承建 $B_{3}, A_{2}$ 承建 $B_{2}, A_{3}$ 承建 $B_{1}, A_{4}$ 承建 $B_{4}, A_{5}$ 承建 $B_{5}$ 。这样安排能使总的建造费用最少, 最小费用为 34 万元。 187 | 188 | ``` 189 | import cvxpy as cp 190 | import numpy as np 191 | c=np.array([[4, 8, 7, 15, 12], 192 | [7, 9, 17, 14, 10], 193 | [6, 9, 12, 8, 7], 194 | [6, 7, 14, 6, 10], 195 | [6, 9, 12, 10, 6]]) 196 | x = cp.Variable((5,5),integer=True) 197 | obj = cp.Minimize(cp.sum(cp.multiply(c,x))) 198 | con= [0 <= x, x <= 1, cp.sum(x, axis=0, keepdims=True)==1, 199 | cp.sum(x, axis=1, keepdims=True)==1] 200 | prob = cp.Problem(obj, con) 201 | prob.solve(solver='GLPK_MI') 202 | print("最优值为:",prob.value) 203 | print("最优解为:\n",x.value) 204 | ``` 205 | 206 | 例 $6.3$ (装箱问题) 有 7 种规格的包装箱要装到两辆铁路平板车上去。 包装箱的宽和高是一样的, 但厚度 $l(\mathrm{~cm})$ 及重量 $w(\mathrm{~kg})$ 是不同的, 表 $6.2$ 给出了每种包装箱的厚度、重量以及数量, 每辆平板车有 $10.2 \mathrm{~m}$ 长的地方来装包装箱, 载重量为 $40 \mathrm{t}$, 由于当地货运的限制, 对 $C_{5}, C_{6}, C_{7}$ 类的包装箱的总数有一个特别的限制: 这类箱子所占的空间 (厚度) 不能超过 $302.7 \mathrm{~cm}$ 。要 求给出最好的装运方式。 207 | $$ 208 | \begin{aligned} 209 | &\qquad \qquad \qquad \qquad \text { 表 } 6.2 \text { 各类包装箱数据 }\\ 210 | &\begin{array}{c|ccccccc} 211 | \hline & C_{1} & C_{2} & C_{3} & C_{4} & C_{5} & C_{6} & C_{7} \\ 212 | \hline l / \mathrm{cm} & 48.7 & 52.0 & 61.3 & 72.0 & 48.7 & 52.0 & 64.0 \\ 213 | w / \mathrm{kg} & 2000 & 3000 & 1000 & 500 & 4000 & 2000 & 1000 \\ 214 | \text { 件数 } & 8 & 7 & 9 & 6 & 6 & 4 & 8 \\ 215 | \hline 216 | \end{array} 217 | \end{aligned} 218 | $$ 219 | 解 1.装箱总厚度最大的模型 220 | $$ 221 | \begin{aligned} 222 | &\max z_{1}=\sum_{j=1}^{7} l_{j}\left(x_{1 j}+x_{2 j}\right), \\ 223 | &\text { s.t. }\left\{\begin{array}{l} 224 | \sum_{i=1}^{2} x_{i j} \leq a_{j}, \quad j=1,2, \cdots, 7, \\ 225 | \sum_{j=1}^{7} l_{j} x_{i j} \leq 1020, \quad i=1,2, \\ 226 | \sum_{j=1}^{7} w_{j} x_{i j} \leq 40000, \quad i=1,2, \\ 227 | \sum_{j=5}^{7} l_{j}\left(x_{1 j}+x_{2 j}\right) \leq 302.7, \\ 228 | x_{i j} \geq 0 \text { 且为整数, } i=1,2 ; j=1,2, \cdots, 7 . 229 | \end{array}\right. 230 | \end{aligned} 231 | $$ 232 | 利用 cvxpy 库,可得到问题付最优解: 233 | $$ 234 | x^{*}=\left(x_{i j}\right)_{2 \times 7}=\left[\begin{array}{ccccccc} 235 | 4 & 1 & 5 & 3 & 3 & 2 & 0 \\ 236 | 4 & 6 & 4 & 3 & 0 & 1 & 0 237 | \end{array}\right], \quad z_{1}=2039.4 . 238 | $$ 239 | 240 | ``` 241 | import cvxpy as cp 242 | import numpy as np 243 | L=np.array([48.7,52.0,61.3,72.0,48.7,52.0,64.0]) 244 | w=np.array([2000,3000,1000,500,4000,2000,1000]) 245 | a=np.array([8,7,9,6,6,4,8]) 246 | x=cp.Variable((2,7), integer=True) 247 | obj=cp.Maximize(cp.sum(x*L)) 248 | con=[cp.sum(x,axis=0,keepdims=True)<=a.reshape(1,7), 249 | x*L<=1020, x*w<=40000, cp.sum(x[:,4:]*L[4:])<=302.7, x>=0] 250 | prob = cp.Problem(obj, con) 251 | prob.solve(solver='GLPK_MI',verbose =True) 252 | print("最优值为:",prob.value) 253 | print("最优解为:\n",x.value) 254 | ``` 255 | 256 | 2.装箱总重量最大的模型 257 | 258 | 要使两辆平板车的装箱总重量之和最大, 目标函数为 $\max z_{2}=\sum_{j=1}^{7} w_{j}\left(x_{1 j}+x_{2 j}\right)$,约束条件与前述模型相同。利用 cvxpy 库,可得到问题的最优解: 259 | $$ 260 | x^{*}=\left(x_{i j}\right)_{2 \times 7}=\left[\begin{array}{ccccccc} 261 | 6 & 0 & 0 & 6 & 6 & 0 & 0 \\ 262 | 2 & 7 & 9 & 0 & 0 & 0 & 0 263 | \end{array}\right], \quad z_{2}=73000 . 264 | $$ -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班08/整数规划.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班总结文档/讨论班08/整数规划.pdf -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班08/非线性规划0.md: -------------------------------------------------------------------------------- 1 | --- 2 | marp: true 3 | theme: gaia 4 | paginate: true 5 | footer: '数学建模协会 2021-11-25' 6 | style: | 7 | section a { 8 | font-size: 40px; 9 | } 10 | --- 11 | 12 | 16 | 17 | # 数学建模协会第八次讨论班 18 | ## ——非线性规划 19 | 20 | ### 上海交通大学数学科学学院 21 | ### 白志威 22 | #### 2021-11-25 23 | 24 | --- 25 | 30 | 31 | # 目录 32 | - 1. 非线性规划介绍 33 | - 2. 无约束非线性规划求解 34 | - 3. 有约束非线性规划求解 35 | ![bg right:50% h:13cm](https://gitee.com/bai299/images/raw/master/%E5%8D%8F%E4%BC%9Alogo.jpg) 36 | 37 | 38 | --- 39 | $\quad$ 40 | $\quad$ 41 | $\quad$ 42 | $\quad$ 43 | # $\quad$ $\quad$ $\quad$ 1. 非线性规划介绍 44 | 45 | --- 46 | 51 | ## 非线性规划介绍 52 | - 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。 53 | - 不像线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。 54 | ![bg right 99%](https://se.mathworks.com/help/examples/optim/win64/SolveConstrainedNonlinearOptimizationProblemBasedExample_01.png) 55 | 56 | 57 | --- 58 | 63 | ## 非线性规划介绍 64 | - 与线性规划问题不同,非线性规划问题可以有约束条件,也可以没有约束条件。非线性规划模型的一般形式描述如下: 65 | $$ 66 | \begin{aligned} 67 | &\min f(x), \\ 68 | &\text { s.t. } \begin{cases}g_{i}(x) \leq 0, & i=1,2, \cdots, m \\ 69 | h_{j}(x)=0, & j=1,2, \cdots, l,\end{cases} 70 | \end{aligned} 71 | $$ 72 | - 其中 $x=\left[x_{1}, x_{2}, \cdots, x_{n}\right]^{T} \in R^{n}$, 而 $f, g_{i}, h_{j}$ 都是定义在 $\mathbb{R}^{n}$ 上的实值函数。 73 | 74 | --- 75 | $\quad$ 76 | $\quad$ 77 | $\quad$ 78 | $\quad$ 79 | # $\quad$ $\quad$ 2. 无约束非线性规划求解 80 | 81 | --- 82 | 87 | ## 无约束非线性规划求解 88 | - **定理** *(无约束优化问题有局部最优解的充分条件)设 $f(x)$ 具有连 续的二阶偏导数, 点 $x^{*}$ 满足 $\nabla f\left(x^{*}\right)=0$; 并且 $\nabla^{2} f\left(x^{*}\right)$ 为正定阵, 则 $x^{*}$ 为无约束优化问题的局部最优解。* 89 | - 该定理给出了求解无约束优化问题的理论方法, 但困难的是求解方程 90 | $$ 91 | \nabla f\left(x^{*}\right)=0 92 | $$ 93 | - 对于比较复杂的函数, 常用的方法是数值解法, 如梯度下降法、牛顿法和拟牛顿法等。 94 | 95 | --- 96 | 101 | ## 梯度下降法 102 | - 比如我们在大山的某处位置,由于不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的方向向下走一步,然后继续求解当前位置梯度,沿着负梯度方向再走一步,一直走到觉得我们已经到了山脚。 103 | ![bg right 90%](https://www.researchgate.net/profile/Alexander-Amini/publication/325142728/figure/fig1/AS:766109435326465@1559666131320/Non-convex-optimization-We-utilize-stochastic-gradient-descent-to-find-a-local-optimum.jpg) 104 | 105 | 106 | --- 107 | 112 | ## 梯度下降法 113 | - **例子**: 114 | $$ 115 | \min f(x, y) = (x-10)^2 + (y-10)^2 116 | $$ 117 | - 给定初始点 $(x_0, y_0)$ 118 | - 按照如下方式更新位置 119 | $$ 120 | \left(x_t, \\ y_t\right)^T = (x_{t-1}, y_{t-1})^T - \alpha \nabla f 121 | $$ 122 | - 直到算法收敛 123 | 124 | $\quad$ $\quad$ $\quad$ $\quad$ $\quad$![bg right 99%](https://gitee.com/bai299/images/raw/master/image-20211125092856731.png) 125 | 126 | --- 127 | 132 | ```python 133 | import sympy as sp 134 | import numpy as np 135 | def Func(x,y): 136 | return (x-10)**2 + (y-10)**2 137 | def Grad_decent(func, x_init, alpha=0.1, step=100): 138 | i = 1 139 | while i <= step: 140 | gradient = np.array([sp.diff(func, x).subs([(x, x_init[0]),(y, x_init[1])]), 141 | sp.diff(func, y).subs([(x, x_init[0]),(y, x_init[1])])], dtype=float) 142 | x_init -= alpha * gradient 143 | print(f'迭代第{i}次[x, y]为:{x_init}') 144 | i = i + 1 145 | if np.linalg.norm(gradient) < 1e-2: #设置迭代停止条件 146 | break 147 | return x_init 148 | x0 = np.array([20,20], dtype=float) 149 | x, y = sp.symbols("x, y") 150 | f=Func(x,y) 151 | x_sol = Grad_decent(f, x0) 152 | ``` 153 | --- 154 | 159 | ## 梯度下降法 160 | $\quad$ $\quad$ $\quad$ ![h:13cm](https://gitee.com/bai299/images/raw/master/image-20211125111702816.png) 161 | 162 | --- 163 | $\quad$ 164 | $\quad$ 165 | $\quad$ 166 | $\quad$ 167 | # $\quad$ $\quad$ 3. 有约束非线性规划求解 168 | 169 | --- 170 | 175 | ## 罚函数法 176 | - 罚函数法的基本思想是: 177 | - 利用问题的目标函数和约束函数构造出带参数的所谓增广目标函数,从而把有约束非线性规划问题转化为一系列无约束非线性规划问题来求解。 178 | - 而增广目标函数通常由两个部分构成,一部分是原问题的目标函数,另一部分是由约束函数构造出的“惩罚”项,“惩罚”项的作用是对“违规”的点进行“惩罚”。 179 | 180 | --- 181 | 186 | ## 罚函数法 187 | - 比较有代表性的一种罚函数法是所谓的外部罚函数法, 或称外点法, 这种方法的迭代点一般在可行域的外部移动, 随着迭代次数的增加, “惩罚”的力度也越来越大, 从而迫使迭代点向可行域靠近。 188 | - 具体操作方式为: 根据不等式约束 $g_{i}(x) \leq 0$ 与等式约束 $\max \left\{0, g_{i}(x)\right\}=0$ 的等价性, 构造增广目标函数(也称为罚函数) 189 | $$ 190 | T(x, M)=f(x)+M \sum_{i=1}^{m}\left[\max \left\{0, g_{i}(x)\right\}\right]+M \sum_{j=1}^{l}\left[h_{j}(x)\right]^{2} 191 | $$ 192 | 193 | --- 194 | 199 | ## 罚函数法 200 | $$ 201 | \left\{\begin{array}{l} 202 | \min f(x)=x_{1}^{2}+x_{2}^{2}+8 \\ 203 | x_{1}^{2}-x_{2} \geq 0 \\ 204 | -x_{1}-x_{2}^{2}+2=0 \\ 205 | x_{1}, x_{2} \geq 0 206 | \end{array}\right. 207 | $$ 208 | - 最优解:$x_1 = x_2 =1$,函数值:10,增广函数为: 209 | $$ 210 | T(x, M) = f(x) + M\max(-x_1, 0) + M\max(-x_2, 0) \\+ M\max(-x_1^2+x_2, 0)+ 211 | M(-x_1-x_2^2+2)^2 212 | $$ 213 | 214 | --- 215 | 220 | ## 罚函数法 221 | ```python 222 | from scipy.optimize import minimize 223 | def func2(x, M=1e7): 224 | f=x[0]**2+x[1]**2+8 225 | g=f + M*max(-x[0],0) + M*max(-x[1],0) 226 | + M*max(-x[0]**2+x[1],0) + M*(-x[0]-x[1]**2+2)**2 227 | return g 228 | res=minimize(func2, np.random.rand(2)) #第 2 个参数为初值 229 | print(res.fun,'\n',res.x) # 输出最优值、求解状态、最优解 230 | ``` 231 | ``` 232 | 10.001400242949867 233 | [1.00058428 0.99971231] 234 | ``` 235 | 236 | --- 237 | 243 | $\quad$ 244 | $\quad$ 245 | $\quad$ 246 | ## 感谢聆听! 247 | 248 | 249 | -------------------------------------------------------------------------------- /Python数学建模讨论班总结文档/讨论班09/非线性规划.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 非线性规划 4 | 5 | 总结人: 宋奕辰 6 | 7 | ## 1.非线性规划模型 8 | 9 | 与线性规划问题不同,非线性规划问题可以有约束条件,也可以没有约束条件。 10 | 11 | 非线性规划模型的一般形式描述如下: 12 | $$ 13 | \text{min} f(x),\ \text{s.t.} 14 | 15 | \begin{cases} 16 | g_i(x)\leq 0,i\in[1,m] \\ 17 | h_j(x)=0,j\in[1,l] 18 | \end{cases} 19 | $$ 20 | 21 | 如果采用向量表示法,则非线性规划的一般形式还可以写成 22 | 23 | $$ 24 | \text{min} f(x),\ \text{s.t.} 25 | 26 | \begin{cases} 27 | G(x)\leq 0 \\ 28 | H(x)=0 29 | \end{cases} 30 | \\ 31 | \text{where }G(x)=[g_1(x),g_2(x),...,g_m(x)];\ H(x)=[h_1(x),h_2(x),...,h_l(x)] 32 | $$ 33 | 34 | **Def 1.** 可行域:与线性规划的可行域类似,所有满足约束条件的点的集合即为可行域。全局最优解的定义也与线性规划中的最优解定义一致。 35 | 36 | ## 2.无约束非线性规划的求解 37 | 38 | 其表达形式为: 39 | $$\text{min} f(x),\ x\in \mathbb{R}^n$$ 40 | 41 | **Thm1.** 设f(x)具有连续的一阶偏导数,且x*是无约束问题的局部极小点,则: 42 | $$\nabla f(x^*)=0$$ 43 | **Def 2.** 设函数$f(x)$具有对各个变量的二阶偏导数,称矩阵 44 | $$ 45 | \left[ 46 | \begin{matrix} 47 | \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_2\partial x_1}&\cdots& \frac{\partial^2 f}{\partial x_n\partial x_1}\\ 48 | \frac{\partial^2 f}{\partial x_1\partial x_2} & \frac{\partial^2 f}{\partial x_2^2}&\cdots& \frac{\partial^2 f}{\partial x_n\partial x_2}\\ 49 | \vdots&\vdots&\ddots&\vdots\\ 50 | \frac{\partial^2 f}{\partial x_1\partial x_n} & \frac{\partial^2 f}{\partial x_2 \partial x_n}&\cdots& \frac{\partial^2 f}{\partial x_n^2}\\ 51 | 52 | \end{matrix} 53 | \right] 54 | $$ 55 | 为函数的Hesse矩阵,记为$\nabla^2f(x)$ 56 | 57 | **Thm2.**(无约束优化问题有局部最优解的充分条件) 设$f(x)$ 58 | 具有连续的二阶偏导数,点x*满足$\nabla f(x^*)=0$;并且$\nabla^2 f(x^*)$为正定阵,则x*为无约束优化问题的局部最优解。 59 | 60 | 61 | **Thm1.** 和**Thm2.** 给出了求解无约束优化问题的理论方法,但困难的是求解方程$\nabla f(x^*)=0$ 62 | ,对于比较复杂的函数,常用的方法是数值解法,如最速降线法、牛顿法和拟牛顿法等,这里就不介绍了。 63 | 64 | ## 3.有约束的非线性规划问题求解 65 | ### 3.1 有等式约束的非线性规划问题的求解 66 | **Thm3.** Lagrange乘数法: 67 | 求解以下问题: 68 | $$ 69 | \text{min} f(x),\ \text{s.t.} 70 | 71 | \begin{cases} 72 | h_i(x)=0,i\in[1,m]\\ 73 | x\in \mathbb{R}^n 74 | \end{cases} 75 | $$ 76 | $$\text{设}\lambda=[\lambda_1, \lambda_2 ,... ,\lambda_m ]^T,\ H(x)=[h_1(x),h_2(x),...,h_m(x)]^T,\\ \ L(x,\lambda)=f(x)-\lambda^TH(x)$$ 77 | 最小值点满足: 78 | $$\nabla L=0\Rightarrow\nabla f(x^*)-\sum_{j=1}^l \lambda_j^*\nabla h_j(x^*)=0$$ 79 | 80 | 显然,Lagrange定理的意义在于能将问题(6.5)的求解转化为无约束问题的求解。 81 | 82 | ### 3.2 求解有约束的非线性规划问题的罚函数法 83 | 84 | 罚函数法的基本思想是:利用目标函数和约束函数构造出带参数的所谓增广目标函数,从而把有约束非线性规划问题转化为一系列无约束非线性规划问题来求解。而增广目标函数通常由两个部分构成,一部分是原问题的目标函数,另一部分是由约束函数构造出的“惩罚”项,“惩罚”项的作用是对“违规”的点进行“惩罚”。 85 | 86 | 比较有代表性的一种罚函数法是所谓的外部罚函数法, 或称外点法, 这种方法的迭代点一般在可行域的外部移动, 随着迭代次数的增加, “惩罚”的力度也越来越大, 从而迫使迭代点向可行域靠近。 87 | 88 | 具体操作方式为: 根据不等式约束 $g_i(x)≤0$ 与等式约束 $\max \{ 0, g_{i}(x)\}=0 $的等价性, 构造增广目标函数(也称为罚函数) 89 | $$T(x, M)=f(x)+M \sum_{i=1}^{m}\left[\max \{0, g_{i}(x)\}\right]+M \sum_{j=1}^{l}\left[h_{j}(x)\right]^{2}$$ 90 | 91 | 92 | ## 非线性规划的python求解 93 | 94 | ### **1.用scipy.optimize模块的minimize函数求解** 95 | 96 | scipy.optimize.minimize 模块具体内容介绍: 97 | 98 | ```kotlin 99 | fun:目标函数,返回单值, 100 | x0:初始迭代值, 101 | args:要输入到目标函数中的参数 102 | method:求解的算法,目前可选的有 103 | ‘Nelder-Mead’ 104 | ‘Powell’ 105 | ‘CG’ 106 | ‘BFGS’ 107 | ‘Newton-CG’ 108 | ‘L-BFGS-B’ 109 | ‘TNC’ 110 | ‘COBYLA’ 111 | ‘SLSQP’ 112 | ‘dogleg’ 113 | ‘trust-ncg’ 114 | 以及在 version 0.14.0,还能自定义算法 115 | 以上算法的解释和相关用法见 minimize 函数的官方说明文档,一般求极值多用 'SLSQP'算法 116 | jac:目标函数的雅可比矩阵。可选项,仅适用于CG,BFGS,Newton-CG,L-BFGS-B,TNC,SLSQP,dogleg,trust-ncg。如果jac是布尔值并且为True,则假定fun与目标函数一起返回梯度。如果为False,将以数字方式估计梯度。jac也可以返回目标的梯度。此时,它的参数必须与fun相同。 117 | hess,hessp:可选项,目标函数的Hessian(二阶导数矩阵)或目标函数的Hessian乘以任意向量p。仅适用于Newton-CG,dogleg,trust-ncg。 118 | bounds:可选项,变量的边界(仅适用于L-BFGS-B,TNC和SLSQP)。以(min,max)对的形式定义 x 中每个元素的边界。如果某个参数在 min 或者 max 的一个方向上没有边界,则用 None 标识。如(None, max) 119 | constraints:约束条件(只对 COBYLA 和 SLSQP)。dict 类型。 120 | type : str, ‘eq’ 表示等于0,‘ineq’ 表示不小于0 121 | fun : 定义约束的目标函数 122 | jac : 函数的雅可比矩阵 (只用于 SLSQP),可选项。 123 | args : fun 和 雅可比矩阵的入参,可选项。 124 | tol:迭代停止的精度。 125 | callback(xk):每次迭代要回调的函数,需要有参数 xk 126 | options:其他选项 127 | maxiter : 最大迭代次数 128 | disp : 是否显示过程信息 129 | 以上参数更具体的介绍见官网相关页面 130 | https://docs.scipy.org/doc/scipy-0.18.1/reference/optimize.html 131 | ``` 132 | 133 | 134 | 135 | 求解非线性规划问题: 136 | 137 | **Example 1.** 计算 $\frac{2+x_1}{1+x_2} - 3x_1+4x_3$ 的最小值, x1,x2,x3 都处于[0.1, 0.9] 区间内 138 | 139 | 140 | **Program:** 141 | ```python 142 | from scipy.optimize import minimize 143 | from numpy import ones 144 | def obj(x): 145 | x1,x2,x3=x 146 | return (2+x1)/(1+x2)-3*x1+4*x3 147 | LB=[0.1]*3; UB=[0.9]*3 148 | bound=tuple(zip(LB, UB)) #生成决策向量界限的元组 149 | res=minimize(obj,ones(3),bounds=bound) #第2个参数为初值 150 | print(res.fun,'\n',res.success,'\n',res.x) #输出最优值、求解状态、最优解 151 | ``` 152 | 153 | **Outcome:** 154 | 155 | `` 156 | -0.7736842105263159 157 | True 158 | [0.9 0.9 0.1] 159 | `` 160 | 161 | **Example2** 求解下列规划问题 162 | $$ 163 | \text{max} \ \ z=x_1^2+x_2^2+3x_3^2+4x_4^2+2x_5^2-8x_1-2x_2-3x_3-x_4-2x_5, \\\text{s.t.} 164 | 165 | \begin{cases} 166 | x_1+x_2+x_3+x_4+x_5 \leq 400\\ 167 | x_1+2x_2+2x_3+x_4+6x_5 \leq 800\\ 168 | 2x_1+x_2+6x_3 \leq 200\\ 169 | x_3+x_4+5x_5 \leq 400\\ 170 | 0\leq x_i \leq 99,\ i=1,2,...,5 171 | \end{cases} 172 | $$ 173 | 174 | **Program:** 175 | 176 | 177 | ````python 178 | c1=np.array([1,1,3,4,2]); c2=np.array([-8,-2,-3,-1,-2]) 179 | A=np.array([[1,1,1,1,1],[1,2,2,1,6], 180 | [2,1,6,0,0],[0,0,1,1,5]]) 181 | b=np.array([400,800,200,200]) 182 | obj=lambda x: np.dot(-c1,x**2)+np.dot(-c2,x) 183 | cons={'type':'ineq','fun':lambda x:b-A@x} 184 | bd=[(0,99) for i in range(A.shape[1])] 185 | res=minimize(obj,np.ones(5)*90,constraints=cons,bounds=bd) 186 | print(res) #输出解的信息 187 | ```` 188 | **Outcome:** 189 | ```python 190 | 191 | fun: -51629.93000063647 192 | jac: array([ -93. , -196. , 3. , -791. , 193 | -78.79980469]) 194 | message: 'Optimization terminated successfully' 195 | nfev: 20 196 | nit: 4 197 | njev: 3 198 | status: 0 199 | success: True 200 | x: array([50.5, 99. , 0. , 99. , 20.2]) 201 | ``` 202 | 203 | 目标函数的最优值为51629.93。 204 | 205 | 206 | 207 | ### **2.用cvxopt.solvers模块求解** 208 | 209 | 第5章已经介绍利用cvxopt.solvers模块求解线性规划模型。这里介绍利用cvxopt.solvers模块求解二次规划模型。 210 | 211 | cvxopt.solvers模块中二次规划的标准型为: 212 | 213 | $$ 214 | \text{min}\ \ \frac{1}{2}x^TPx+q^Tx,\\ \text{s.t.} 215 | 216 | \begin{cases} 217 | Ax\leq b, \\ 218 | Aeq \cdot x=beq. 219 | \end{cases} 220 | $$ 221 | 222 | 223 | 224 | **Example3** 求解二次规划模型 225 | $$ 226 | \text{max} \ \ z=1.5x_1^2+x_2^2+0.85x_3^2+3x_1-8.2x_2-1.95x_3, \\\text{s.t.} 227 | 228 | \begin{cases} 229 | x_1+x_3\leq 2\\ 230 | -x_1+2x_2\leq 2\\ 231 | x_2+2x_3 \leq 3\\ 232 | x_1+x_2+x_3 =3\\ 233 | \end{cases} 234 | $$ 235 | 236 | **Solve:** 237 | 先化成标准型,其中 238 | $$ 239 | P= \left\{ \begin{matrix} 3&0&0\\ 0&2&0\\ 0&0&1.7 \end{matrix} \right\}, 240 | q= \left\{ \begin{matrix} 3\\ -8.2\\ -1.95 \end{matrix} \right\}, 241 | A= \left\{ \begin{matrix} 1&0&1\\ -1&2&0\\ 0&1&2 \end{matrix} \right\}, 242 | b= \left\{ \begin{matrix} 2\\ 2\\ 3 \end{matrix} \right\}\\ 243 | Aeq= [1,1,1], 244 | beq= [3]\\ 245 | $$ 246 | 247 | 248 | **Program:** 249 | ```python 250 | import numpy as np 251 | from cvxopt import matrix,solvers 252 | n=3; P=matrix(0.,(n,n)) 253 | P[::n+1]=[3,2,1.7]; q=matrix([3,-8.2,-1.95]) 254 | A=matrix([[1.,0,1],[-1,2,0],[0,1,2]]).T 255 | b=matrix([2.,2,3]) 256 | Aeq=matrix(1.,(1,n)); beq=matrix(3.) 257 | s=solvers.qp(P,q,A,b,Aeq,beq) #qp代表求解二次规划问题 258 | print("最优解为:",s['x']) 259 | print("最优值为:",s['primal objective']) 260 | ``` 261 | 262 | **Outcome:** 263 | 264 | pcost dcost gap pres dres 265 | 0: -1.3148e+01 -4.4315e+00 1e+01 1e+00 9e-01 266 | 1: -6.4674e+00 -7.5675e+00 1e+00 1e-16 1e-16 267 | 2: -7.1538e+00 -7.1854e+00 3e-02 1e-16 1e-15 268 | 3: -7.1758e+00 -7.1761e+00 3e-04 7e-17 4e-16 269 | 4: -7.1760e+00 -7.1760e+00 3e-06 6e-17 5e-16 270 | Optimal solution found. 271 | 最优解为: [ 8.00e-01] 272 | [ 1.40e+00] 273 | [ 8.00e-01] 274 | 275 | 最优值为: -7.175997768777275 276 | 277 | 278 | #### **3.用cvxpy库求解** 279 | 280 | **Example4:** 求解下列非线性整数规划问题 281 | 282 | $$ 283 | \text{max} \ \ z=x_1^2+x_2^2+3x_3^2+4x_4^2+2x_5^2-8x_1-2x_2-3x_3-x_4-2x_5, \\\text{s.t.} 284 | 285 | \begin{cases} 286 | x_1+x_2+x_3+x_4+x_5 \leq 400\\ 287 | x_1+2x_2+2x_3+x_4+6x_5 \leq 800\\ 288 | 2x_1+x_2+6x_3 \leq 200\\ 289 | x_3+x_4+5x_5 \leq 400\\ 290 | 0\leq x_i \leq 99,\ x_1 \in \mathbb{Z},\ \ i=1,2,...,5 291 | \end{cases} 292 | $$ 293 | 294 | **Program:** 295 | ```python 296 | import cvxpy as cp 297 | import numpy as np 298 | c1=np.array([1, 1, 3, 4, 2]) 299 | c2=np.array([-8, -2, -3, -1, -2]) 300 | a=np.array([[1, 1, 1, 1, 1], [1, 2, 2, 1, 6], [2, 1, 6, 0, 0], [0, 0, 1, 1, 5]]) 301 | b=np.array([400, 800, 200, 200]) 302 | x=cp.Variable(5,integer=True) 303 | obj=cp.Minimize(c1*x**2+c2*x) 304 | con=[0<=x, x<=99, a*x<=b] 305 | prob = cp.Problem(obj, con) 306 | prob.solve() 307 | print("最优值为:",prob.value) 308 | print("最优解为:\n",x.value) 309 | ``` 310 | 311 | **Outcome:** 312 | 313 | ````python 314 | 最优值为: -17.0 315 | 最优解为: 316 | [4. 1. 1. 0. 1.] 317 | ```` -------------------------------------------------------------------------------- /Python数学建模讨论班资料/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班资料/2022 寒假/寒假 2020MCM A/2020美赛A题.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/2022 寒假/寒假 2020MCM A/2020美赛A题.zip -------------------------------------------------------------------------------- /Python数学建模讨论班资料/2022 寒假/寒假 2021MCM B/2.8晚资料.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/2022 寒假/寒假 2021MCM B/2.8晚资料.zip -------------------------------------------------------------------------------- /Python数学建模讨论班资料/2022 寒假/寒假 讨论班01/第九章--综合评价方法.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/2022 寒假/寒假 讨论班01/第九章--综合评价方法.zip -------------------------------------------------------------------------------- /Python数学建模讨论班资料/2022 暑假/readme.md: -------------------------------------------------------------------------------- 1 | 2022 暑期讨论班同学们自己准备的资料 2 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班01/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班01/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班01/GreedSnake.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sun Oct 3 14:32:51 2021 4 | 5 | @author: UMR 6 | @read-me: 本程序没有在外观上下过多功夫,一方面为了节省时间,另一方面也避免喧宾夺主 7 | 键盘上下左右控制,q直接退出 8 | 在较高难度下,真实速度与电脑性能相关 9 | 10 | 拓展方向:添加墙,墙也可以动 11 | 改变规则:碰到边缘不是撞死而是传送到另一边 12 | 添加规则:限时大果,吃到增加3格长度 13 | """ 14 | import numpy as np 15 | import time #休眠 16 | import matplotlib.pyplot as plt 17 | import funs #外置函数,使代码更清晰 18 | import keyboard #检测键盘事件,控制上下左右 #pip install keyboard 19 | 20 | 21 | #游戏设定 22 | mapsize=20 #地图大小 23 | level=10 #速度等级 24 | winLength=25 #胜利长度 25 | increaseLevel=True #开启难度递增 26 | increaseSpeed=1.5 #难度增速 27 | 28 | speed=1/level 29 | 30 | #初始化 31 | direct='w' 32 | snakex=np.array([mapsize//2,mapsize//2+1]) 33 | snakey=np.array([mapsize//2]*2) 34 | flag=0 #游戏状态 0=正常 1=失败 2=胜利 3=直接退出 35 | lock=0 #锁定标记,确保一次move只允许改变一次方向 36 | #snakex=snakex*sec 37 | 38 | def callback(x): #检测键盘事件,确定移动方向 39 | global direct 40 | global flag 41 | global lock 42 | if x.name=='up' and lock==0: 43 | if direct!='s' : 44 | direct='w' #防止直接回头撞死 45 | lock=1 46 | elif x.name=='left' and lock==0: 47 | if direct!='d' : 48 | direct='a' 49 | lock=1 50 | elif x.name=='down' and lock==0: 51 | if direct!='w' : 52 | direct='s' 53 | lock=1 54 | elif x.name=='right' and lock==0: 55 | if direct!='a' : 56 | direct='d' 57 | lock=1 58 | if x.name=='q': 59 | flag=3 60 | keyboard.on_press(callback) #其实是另开启了一个线程,与主程序画图互不干扰 61 | 62 | 63 | plt.figure(figsize=(10,10),dpi=80,num="GREEDY snake") #确定画布大小,800*800 64 | #figsize是长宽(英寸)dpi=每英寸像素数 65 | 66 | fruitExist=1 #食物标记,1=存在,0=被吃,需要重新生成 67 | p=funs.genFruit(snakex, snakey,mapsize) #生成食物(坐标) 68 | while(True): 69 | if flag==3: #键盘终止(q键) 70 | break 71 | snakex,snakey,fruitExist=funs.updateSnake(snakex, snakey, direct, p) #更新蛇位置信息,并返回食物是否被吃掉 72 | lock=0 #解锁,现在到下一次更新位置,又可以进行一次变向 73 | flag=funs.checkWinOrLose(snakex, snakey,mapsize,winLength) #判定游戏状态:是否撞死,是否胜利 74 | if flag==1: #撞死 75 | print("gameover") 76 | break 77 | plt.cla() #删除上一张画面,重新画图 78 | #在只有一张图(一个axes)时cla(清除当前axes)和clf(清除当前figure)等效 79 | funs.drawMap(np.size(snakex),winLength,speed) #画出地图边缘以及显示文字 80 | funs.drawSnake(snakex, snakey,mapsize) #画出蛇 81 | if not fruitExist: #如果食物被吃,就再生成一个 82 | p=funs.genFruit(snakex, snakey,mapsize) 83 | fruitExist=1 84 | funs.drawFruit(p, mapsize) #画出食物 85 | plt.axis("equal") #设定x,y坐标轴单位长度相等 86 | plt.axis("off") #隐藏坐标轴 87 | if increaseLevel==True: #判断是否加速 88 | speed=1/(level+increaseSpeed*np.size(snakex)) 89 | if flag==2: #判断是否胜利 90 | print("you win!!!") 91 | break 92 | plt.pause(speed) #定格(暂停)图像,不适用show()是因为show完就结束了 93 | time.sleep(speed) #同步暂停更新(暂停主线程),等待一定时间让玩家反应,但是仍可以识别键盘(多线程) 94 | 95 | if flag==1: #游戏结束后,画出标语 96 | plt.text(0.3,0.5,"You Lost!",fontsize=80,fontweight='heavy',verticalalignment='center',color='r') 97 | 98 | if flag==2: 99 | plt.text(0.3,0.5,"You WIN!!!",fontsize=80,fontweight='heavy',verticalalignment='center',color='gold') 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班01/funs.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Wed Oct 6 09:30:56 2021 4 | 5 | @author: UMR 6 | """ 7 | 8 | 9 | 10 | def drawMap(length,winLength,speed): 11 | import numpy as np 12 | import matplotlib.pyplot as plt 13 | edgex=np.array([0,0,1,1,0])#用惯matlab的同学,记得不要用空格分隔 14 | edgey=np.array([0,1,1,0,0]) 15 | plt.plot(edgex,edgey,'dodgerblue',linewidth=5) 16 | plt.title('Length:'+str(length)+" Goal:"+str(winLength)+" Speed:"+str(1/speed*2//1/2),fontsize=20) 17 | 18 | def drawSnake(x,y,mapsize): 19 | import matplotlib.pyplot as plt 20 | sec=1/mapsize 21 | plt.scatter(x*sec-sec/2,y*sec-sec/2,marker=',',s=400) 22 | #plt.scatter(x*sec-sec/2,y*sec-sec/2,marker=',',s=400,c=x*y*2+x+y,cmap="cool") 23 | 24 | def genFruit(x,y,mapsize): 25 | import numpy as np 26 | 27 | p=np.ceil(np.random.rand(2)*mapsize)#推荐 28 | while checkColid(p, x, y): 29 | p=np.ceil(np.random.rand(2)*mapsize) 30 | return p 31 | 32 | def drawFruit(p,mapsize): 33 | import matplotlib.pyplot as plt 34 | sec=1/mapsize 35 | plt.scatter(p[0]*sec-sec/2,p[1]*sec-sec/2,marker='.',s=2500,c="orange") 36 | 37 | def checkColid(p,x,y): 38 | import numpy as np 39 | temp=x==p[0] 40 | temp=np.sum(y[temp]==p[1]) 41 | return True if temp>0 else False#3目运算符 42 | 43 | def moveSnake(x,y,direct): 44 | import numpy as np 45 | if direct=='w': 46 | x=np.insert(x,0,x[0]) 47 | y=np.insert(y,0,y[0]+1) 48 | elif direct=='a': 49 | x=np.insert(x,0,x[0]-1) 50 | y=np.insert(y,0,y[0]) 51 | elif direct=='s': 52 | x=np.insert(x,0,x[0]) 53 | y=np.insert(y,0,y[0]-1) 54 | elif direct=='d': 55 | x=np.insert(x,0,x[0]+1) 56 | y=np.insert(y,0,y[0]) 57 | return x,y 58 | 59 | def updateSnake(x,y,direct,p): 60 | import numpy as np 61 | x0,y0=moveSnake(x,y,direct) 62 | if checkColid(p,x0,y0): 63 | return x0,y0,0 64 | x0=np.delete(x0,np.size(x0)-1) 65 | y0=np.delete(y0,np.size(y0)-1) 66 | return x0,y0,1 67 | 68 | def checkWinOrLose(x,y,mapsize,winLength): 69 | import numpy as np 70 | if x[0]<=0 or x[0]>mapsize: 71 | return 1 72 | elif y[0]<=0 or y[0]>mapsize: 73 | return 1 74 | elif checkColid(np.array([x[0],y[0]]),np.delete(x,0),np.delete(y,0)): 75 | return 1 76 | elif np.size(x)>=winLength: 77 | return 2 78 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班01/matplotlibShow.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Fri Oct 8 09:06:10 2021 4 | 5 | @author: UMR 6 | """ 7 | 8 | import numpy as np 9 | import matplotlib.pyplot as plt 10 | 11 | #一共分4级,figure,axes,axis,trick,常用前三个 12 | #figure=整张图表、显示的一切、画板 13 | #axes=一张完整的图,一个figure可以画任意张图 14 | #axis=一张图的坐标与网格 15 | #trick=刻度 16 | a=np.random.rand(50) 17 | b=plt.figure()#缺省原则,自动plt.figure(1) 18 | c=plt.subplot(121)#缺省,自动plt.subplot(111) 19 | #一行,两列,第一个位置 20 | #如果只画了一张图,就算定义了多行多列,还是只会显示一张,因为显示区域只显示有内容的部分 21 | #直接subplot默认给上一个figure添加 22 | #subplot是一种便捷地生成axes地方式,否则需要手动指定axes的顶点坐标 23 | print(b.axes) 24 | b.add_subplot(122)#也可以显式地指定给目标添加axes 25 | print(b.axes) 26 | 27 | #当只有一个figure时,其实可以全部缺省 28 | #使用gcf() gca()获取当前对象 29 | figure=plt.gcf() #get current figure 30 | axes=plt.gca() #get current axes 31 | axes.plot(a) 32 | 33 | fig = plt.figure() #定义新的三维坐标轴,默认figure 2了 34 | ax3 = plt.axes(projection='3d')#3D画图模式 35 | 36 | #定义三维数据 37 | x = np.arange(-5,5,0.5) 38 | y = np.arange(-5,5,0.5) 39 | X, Y = np.meshgrid(x, y)#便捷拉网,相当于生成了一个网,将网每个点的x,y坐标储存在X,Y中 40 | Z = np.sin(X)+np.cos(Y) 41 | 42 | 43 | #作图 44 | ax3.plot_surface(X,Y,Z,cmap='rainbow')#需要什么功能就现查吧 45 | ax3.contour(X,Y,Z,offset=-2,cmap='rainbow') #等高线图,要设置offset,为Z的最小值 46 | plt.show()#show了,这张figue就不改了,所以最后show 47 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班01/numpyShow.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sun Oct 3 15:16:45 2021 4 | 5 | @author: UMR 6 | """ 7 | 8 | import numpy as np 9 | import time #休眠 10 | import matplotlib.pyplot as plt 11 | import keyboard #检测键盘事件,控制上下左右 #pip install keyboard 12 | 13 | #只介绍常用的,其他的随用随查 14 | #低频使用,不要追求全知全能 15 | 16 | #有些拼写并不是单词,注意 17 | #常用生成方式展示 18 | a=np.array(([1,2],[2,3])) 19 | b1=np.arange(1,10,1)#起始,终止(不含),步长 20 | b2=np.linspace(1,10,5)#起始,终止(含),总个数 21 | c=np.zeros((2,2)) 22 | d=np.ones((3,2),dtype="int") 23 | e=np.eye(3) 24 | f=np.empty((2,4)) 25 | g=np.random.rand(2,2)#有时候传一个元组,有时候传多个参数 26 | #真随机,非正态分布,推荐 27 | #0~1分布 28 | #多个参数来表示维度时,参数只能是维度,而用元组表示维度时,可以有其他参数(ep:dtye) 29 | g1=np.ceil(np.random.rand()*5)#等可能生成1-5 #不要用round,思考原因 30 | g2=np.floor(np.random.rand(2,2)*3) 31 | g3=np.round(0.5)#3种取整 32 | g4=np.round(1.5)#舍入遵循偶数原则,不用知道 33 | 34 | #常用特性展示 理解 35 | h=np.array(([2,3],[1,3])) 36 | h1=h*3#对每一个数*3 37 | h2=h*h#对应位置的数相乘,因此要求形状相同 38 | h3=np.dot(h,h)#内积 39 | h4=h.dot(h)#内积 40 | h5=np.sin(h) 41 | 42 | h6=np.array((1,2)) 43 | h7=h6#直接等于没有经过计算,就是浅拷贝,相当于起小名,指向同一对象 44 | h8=h6.copy()#深拷贝,互相独立 45 | h6+=1#h7也+1了 46 | 47 | #常用属性读取展示 即用即查即可 48 | i=np.size(d)#大小,=所有元素个数 49 | it=d.size #另一种方式 50 | i1=np.size(d,0)#生成时第一个参数大小,即“行数” 51 | i2=np.size(d,1)#“列数” 52 | i3=np.shape(d) 53 | i4=d.dtype 54 | i5=np.ndim(d) 55 | 56 | #常用操作展示 57 | #变形 58 | j=np.linspace(1,10,10) 59 | j1=j.reshape(2,5)#不改变原数组,返回变形后数组 60 | j2=np.linspace(1,6,6) 61 | j_empty=j2.resize(3,2)#改变原数组,返回空 62 | j3=np.resize(j,(5,2))#another写法 63 | #增删改查 64 | k=np.array([[1,3,2,4,5],[1,1,1,1,1]])#之后的操作都不会改变k 65 | k1=np.append(k,99) #append会把数据拉成1维 66 | 67 | k2=np.insert(k,3,99)#不指定第四个参数(axis)就先拉平,再插入 68 | k3=np.insert(k,0,99,axis=0)#按行插入,若只有一个插入值,则改行全部等于此值 69 | k4=np.insert(k,4,[99,66],axis=1)#按列插入,也可以直接指定插入的所有值,以元组或列表的形式 70 | 71 | k5=np.delete(k,3)#一样,不指定axis就先拉平 72 | k6=np.delete(k,1,0)#指定后,删掉一整行/一整列 73 | 74 | ka=np.arange(1,10,1) 75 | kb=np.linspace(-np.pi,np.pi,12).reshape(3,4) 76 | ka1=ka[1:3] 77 | ka2=ka[5:] 78 | ka3=ka[:-3] 79 | ka4=ka[1:10:2]#缺省第一,第二个参数,则默认选到一端结束,缺省第三个参数默认步长为1,步长可为负 80 | ka5=ka[::-1]#反向 81 | ka6=ka[[1,2,4,7]]#选出第2,3,5,8个数,注意:必须以列表的形式传参,否则会被理解成多维取数而报错 82 | 83 | kb1=kb[1]#对多维数组,第一个参数是按行选取 84 | kb2=kb[:,2]#这是按列 85 | kb3=kb[1,2]#选出一个 86 | kb4=kb[1:3,2:4]#选出一块,别忘了左闭右开 87 | 88 | kc=np.linspace(-10,10,20).reshape(4,5) 89 | kc1=kc[kc>3] 90 | kc2=kc[kc*2>5] 91 | kc3=kc/3<-1#直接给出bool矩阵,使用此矩阵可以直接取值,以及对其他形状相同的矩阵取值 92 | kc4=kc[kc3] 93 | kd=kc**2#乘方 matlab是^ 94 | kd1=kd[kc3] 95 | 96 | #次常用操作演示 97 | la=np.arange(1,7,1).reshape(2,3) 98 | lb=-la 99 | l1=np.concatenate((la,lb),0)#axis=0:按行拼接 100 | l2=np.concatenate((la,lb),axis=1)#1:按列 101 | l3=np.concatenate((la,la,la,lb),1)#concatenate属实万能,可以同时拼接多个,只需记忆这一个即可 102 | 103 | l4=np.split(la,3,1)#分谁,分几块,按行/列分 0=行 1=列 104 | print(l4) 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班02/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班02/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班02/data1.csv: -------------------------------------------------------------------------------- 1 | ,a,b,c,d,e,f 2 | A,1,1,2,3,4,5 3 | B,2,2,3,4,5,6 4 | C,3,3,4,5,6,dm 5 | D,4,4,5,6,7,8 6 | E,5,5,6,7,8,9 7 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班02/trypandas.py: -------------------------------------------------------------------------------- 1 | #pandas封装在numpy之上,主要作为数据分析工具 2 | 3 | import pandas as pd 4 | import numpy as np 5 | import math 6 | 7 | ##文件读取与数据 8 | df2=pd.read_csv('./data1.csv') #读取csv数据 9 | #也有read_excel等 10 | #print(df2.head()) #可以读取默认前5条数据,括号内值可以指定读取数量 11 | #df2.info() #可以返回当前的信息 12 | #print(df2.index) #调取索引 13 | #print(df2.columns) #调取列名 14 | #print(df2.dtypes) #dtypes值 15 | #print(df2.values) #调取数值 16 | 17 | 18 | ##Series和DataFrame 19 | a=pd.Series(data=[1,2,3],index=["i","love","u"]) 20 | #print(a[2]) 21 | #print(a["love"]) 22 | 23 | b=np.arange(1,7).reshape(3,2) 24 | df=pd.DataFrame(b,index=['a','b','c'],columns=['x1','x2'])#直接建立 25 | print(df) 26 | 27 | da={'data1':['a','b','c','d'],'data2':[1,2,3,4],'data3':['alpha','beta','gamma','zeta']} 28 | df_da=pd.DataFrame (da) #字典和DataFrame的转换 29 | #print(df_da) 30 | da_2=df_da ['data2'] 31 | #print(da_2) 32 | #print(da_2[1:2]) 33 | 34 | 35 | ##索引 36 | #print(df_da[['data1','data2']]) #可以同时找出多列的数据,注意要把列名作为整体来索引 37 | 38 | #loc按照label索引 39 | #iloc按照position索引 40 | #print(df_da[0]) 41 | #print(df_da.iloc[0]) 42 | #print(df_da.iloc[0:2]) 43 | #print(df_da.iloc[0:2,0:2])#切片 44 | 45 | da_1=df_da.set_index('data1') #可以不用编号索引,可用DataFrame里面的一列作为索引 46 | #print(da_1) 47 | #print(da_1['data1']) #此时已经没有data1这一列 48 | #print(da_1['data2']) #会出现自己指定的索引 49 | #print(da_1['data2']['b']) 50 | #print(da_1['b']['data2']) 51 | #上面为普通索引,先取列,再取行;下面为loc通过位置索引,先取行再取列 还有哪些区别? 52 | # 取出一个值的方式 53 | # print(da_1.loc['b','data2']) 54 | # print(da_1.iloc[1,0]) 55 | 56 | # print(da_1.loc['a':'c','data2':'data3']) #与上面取切片相同,不过‘:’可以取到最后一位 57 | 58 | # print(da_1[da_1['data2']>2]) #bool类型的索引 59 | # print(da_1[da_1['data2']==1]['data2'].mean()) 60 | 61 | 62 | ##运算 63 | df_da['data2']+=10 #加减 64 | #print(df_da['data2']) 65 | da1=pd.Series(data=[1,1,1,1,1],index=['a','b','c','d','e']); 66 | da2=pd.Series(data=[1,1,1,1,1],index=['c','d','e','f','g']); 67 | #print(da1+da2); #会按照当前索引进行加减操作 68 | 69 | df_da['data2']*=10 #乘除 70 | #print(df_da['data2'] ) 71 | #print(df_da['data2'].mean()) #平均值 72 | #print(df_da['data2'].max()) #最大值 73 | #print(math.sin(df_da['data2'])) #? 74 | # print(list(map(math.sin,df_da['data2']))) #map前要加list 75 | 76 | 77 | #print(df_da.describe()) #直接给出统计数据,但是只有数值的列统计 78 | 79 | ##groupby 80 | dff={'key':['A','B','C','A','B','C','A','B','C'],'data1':[1,2,3,4,5,6,6,6,6],'data2':[100,110,120,130,140,150,160,170,180]} 81 | df3=pd.DataFrame(dff) 82 | # print(df3) 83 | # print(df3.groupby('key').describe()) 84 | # print(df3.groupby('key')['data2'].sum()) 85 | print(df3.groupby('data1').describe()) -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班03/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班03/.keep -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班03/第三次讨论班__python在高等数学中的应用(1).zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班03/第三次讨论班__python在高等数学中的应用(1).zip -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班04/04.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班04/04.rar -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班06/线性规划/05第5章 线性规划.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班06/线性规划/05第5章 线性规划.pptx -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班06/线性规划/Pdata.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班06/线性规划/Pdata.xlsx -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班06/线性规划/线性规划.md: -------------------------------------------------------------------------------- 1 | # 线性规划 2 | ## 一. 线性规划的概念和理论 3 | ### 1.线性规划问题的概述 4 | > 线性规划(Linear Programming)是运筹学的一个重要分支,数学上它用来确定多变量线性函数在变量满足线性约束条件下的最优值。线性规划模型通常由三个要素--**决策变量**、**目标函数**和**约束条件**构成。 5 | 6 | ​ 一般模型: 7 | 8 | ​ $max(min)z=sum_{j=1}^n c_jx_j$ 9 | 10 | ​ $s.t. sum_{j=1}^n a_{ij}x_j≤(≥,=)b_i ,i=1,2,...,m$ 且 $x_j≥0, j=1,2,...,n$ 11 | 12 | ​ 矩阵形式: 13 | 14 | ​ $max(min)z=c^Tx$ , 15 | 16 | ​ $s.t.Ax≤(≥,=)b, 且 x≥0$ 17 | 18 | ​ 向量形式: 19 | 20 | ​ $max(min)z=c^Tx,$ 21 | 22 | ​ $s.t.sum_{j=1}^n p_jx_j ≤(≥,=)b, 且 x≥0$ 23 | 24 | ​ 数学上,规定线性规划的标准型为 $max z=c^Tx, s.t. Ax=b 且 x≥0$ 25 | 26 | ### 2.线性规划解的概念和性质 27 | * 可行域:满足全部约束条件的决策向量$x\in R^n$​构成的集合,且为**凸集* 28 | * 最优解:使得目标函数得到最优值(并且有界)的可行解 29 | * 定理: **当有最优解时,一定可以在可行域的某个顶点上取到。当有唯一解时,最优解就是可行域的某个顶点。当有无穷多个最优解时,其中至少有一个解是可行域的一个顶点。** 30 | 31 | ### 3.可转化为线性规划的问题 32 | 33 | ​ 如问题 $min |x_1|+|x_2|+...+|x_n|, s.t. Ax≤b$ 34 | 35 | ​ 只要取$u_i=\frac{|x_i|+x_i}{2},v_i=\frac{|x_i|-x_i}{2}$就可以满足线性规划的条件 36 | 37 | ​ 问题自然转化为$min sum_{i=1}^n (u_i+v_i), s.t.[A,-A]$$\begin{bmatrix} u \\ v \ \end{bmatrix}$$≤b 且 u,v≥0$ 38 | 39 | ## 二. 线性规划的Python求解 40 | 41 | ### 1.用scipy.optimize模块求解 42 | 43 | ​ scipy中线性规划的标准型:$min z=c^Tx,s.t.Ax≤b, Aeq·x=beq,Lb≤x≤Ub$ 44 | 45 | ```python 46 | from scipy.optimize import linprog 47 | res=linprog(c,A,b,Aeq,beq,bounds,method='***') 48 | res.fun 目标函数最小值(最优解) 49 | res.x 最优解的解向量 50 | ``` 51 | 52 | 53 | 54 | ### 2. 用cvxopt.solvers模块求解 55 | 56 | ​ cvxopt.solvers中线性规划的标准型:$min z=c^Tx,s.t.Ax≤b,Aeq·x=beq$ 57 | 58 | ```python 59 | import numpy as np 60 | from cvxopt import matrix,solvers 61 | sol=solvers.lp(c,A,b,Aeq,beq) 62 | print(sol['x']) 63 | print(sol['primal objective']) 64 | ``` 65 | 66 | ​ **在程序中虽然没有直接使用NumPy库中的函数,也必须加载,数据必须写成浮点型数据** 67 | 68 | ### 3. 用cvxpy模块求解 69 | 70 | ​ 属于可以计算导入数据的线性规划最优解的方法 71 | 72 | ```python 73 | import cvxpy as cp 74 | import numpy as np 75 | import pandas as pd 76 | obj=cp.Minimize(cp.sum(cp,multiply(c,x)))#∑X(i,j) C*X 77 | con=[cp.sum(x,axis=1,keepdims=True)<=e, 78 | cp.sum(x,axis=0,keepdims=True)==d,x>=0]#1是按行相加,0是按列相加 79 | prob=cp.Problem(obj,con)#obj是目标函数,con是约束条件 80 | prob.solve(solver='GLPK_MI',verbose=True) 81 | print(prob.value) 82 | print(x.value) 83 | ``` 84 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班06/线性规划/线性规划.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班06/线性规划/线性规划.pdf -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班07/07/test.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from scipy.optimize import linprog 3 | z1 = np.array([-100, -90, -80, -70]) 4 | z2 = np.array([0, 3, 0, 2]) 5 | A = np.matrix([[-1,0,3,0], [-1,0,0,3], [0,-1,2,0], [0,-1,0,2]]).T 6 | b = np.matrix([-30, -30, 120, 48]).T 7 | resp1 = linprog(z1, A_ub=A, b_ub=b, method="simplex") 8 | resp2 = linprog(z2, A_ub=A, b_ub=b, method="simplex") 9 | print(f"z1:\n{resp1}\n z2:\n{resp2}") 10 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班07/07/第七次讨论班.md: -------------------------------------------------------------------------------- 1 | # 第七次讨论班 2 | 3 | 分享人:王云申 4 | 5 | ## 一. 灵敏度分析 6 | 7 | ### 1.含义 8 | 9 | 灵敏度分析是指对系统因为周围条件变化显示出来的敏感程度的分析。在上次所讲的线性规划问题中,$a_{ij}$ 常随加工工艺的改变而变化,$c_i$常随市场因素的改变而改变,$b_i$则因为决策方案的改变而变化。 10 | 11 | ### 2. 要解决的问题 12 | 13 | > * a,b,c 的变化对最优方案的影响 14 | > * 将参数的变化限制在什么范围内,最优方案不变 15 | 16 | 在实际应用中,常给定参变量步长重复求解线性规划问题,被称为数值解法。 17 | 18 | ### 3. 例题 19 | 20 | ![image-20211120165622579](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120165622579.png) 21 | 22 | ![image-20211120165656287](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120165656287.png) 23 | 24 | 解: 25 | 26 | 设每天用$x_1$桶牛奶生产A,用$x_2$桶牛奶生产B,每天获利$z$元,则建立数学模型如下: 27 | $$ 28 | max z = 72x_1 + 64x_2 \\ 29 | s.t.\begin{cases} 30 | x_1 + x_2 \leq 50 \\ 31 | 12x_1 + 8x_2 \leq 480 \\ 32 | 3x_1 \leq 100\\ 33 | x_1 \geq 0, x_2 \geq 0 34 | \end{cases} 35 | $$ 36 | 代码 37 | 38 | ```python 39 | from scipy.optimize import linprog as Li 40 | c = [-72, -64] 41 | A = [[1,1], [12,8]] 42 | b = [[50], [480]] 43 | bound = ((0,100/3.0), (0,None)) 44 | resp = Li(c=c,A_ub=A,b_ub=b,bounds=bound,method='simplex',options={"disp":True}) 45 | print(resp) 46 | 47 | #输出 48 | Optimization terminated successfully. 49 | Current function value: -3360.000000 50 | Iterations: 4 51 | con: array([], dtype=float64) 52 | fun: -3360.0 53 | message: 'Optimization terminated successfully.' 54 | nit: 4 55 | slack: array([0., 0.]) # 松弛量 56 | status: 0 57 | success: True 58 | x: array([20., 30.]) 59 | 因松弛量为0,所以不改变分配方案,参数变化后最优解不变,最优收益为3720元。 60 | ``` 61 | 62 | [linprog参数详解](https://blog.csdn.net/weixin_45288557/article/details/109139303) 63 | 64 | ## 二. 投资的收益与风险 65 | 66 | ## 1. 例题 67 | 68 | ![image-20211120172350857](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172350857.png) 69 | 70 | ![image-20211120172406829](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172406829.png) 71 | 72 | ![image-20211120172752863](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172752863.png) 73 | 74 | ## 2. 符号规定与基本假设 75 | 76 | ### 符号规定 77 | 78 | ![image-20211120172847985](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172847985.png) 79 | 80 | ### 基本假设 81 | 82 | ![image-20211120172946458](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120172946458.png) 83 | 84 | ## 3. 模型分析与建立 85 | 86 | ### 分析 87 | 88 | ![image-20211120173041311](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173041311.png) 89 | 90 | ![image-20211120173052284](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173052284.png) 91 | 92 | ### 三种简化模型建立 93 | 94 | #### (1) 95 | 96 | ![image-20211120173228627](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173228627.png) 97 | 98 | ![image-20211120173242106](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173242106.png) 99 | 100 | #### (2) 101 | 102 | ![image-20211120173305190](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173305190.png) 103 | 104 | ![image-20211120173333029](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173333029.png) 105 | 106 | #### (3) 107 | 108 | #### ![image-20211120173440688](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173440688.png) 109 | 110 | ![image-20211120173457330](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173457330.png) 111 | 112 | ## 4. 求解 113 | 114 | #### (1) 115 | 116 | ![image-20211120173600944](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120173600944.png) 117 | 118 | 由于a因人而异,从$a=0$开始以步长为0.001开始求解 119 | 120 | 代码 121 | 122 | ```python 123 | import matplotlib.pyplot as plt 124 | from numpy import ones, diag, c_, zeros 125 | from scipy.optimize import linprog 126 | plt.rc('text',usetex=True); plt.rc('font',size=16) 127 | c = [-0.05,-0.27,-0.19,-0.185,-0.185] 128 | A = c_[zeros(4),diag([0.025,0.015,0.055,0.026])] 129 | Aeq =[[1,1.01,1.02,1.045,1.065]]; beq = [1] 130 | a=0; aa=[]; ss=[] 131 | while a<0.05: 132 | b = ones(4)*a 133 | res = linprog(c,A,b,Aeq,beq) 134 | x = res.x; Q = -res.fun 135 | aa.append(a); ss.append(Q) #把最优值都保存起来 136 | a = a+0.001 137 | plt.plot(aa,ss,'r*') 138 | plt.xlabel('$a$'); plt.ylabel('$Q$',rotation=90) 139 | plt.show() 140 | 141 | ``` 142 | 143 | 输出 144 | 145 | ![figure5_1_1](https://gitee.com/mr_asd/taolunban-img/raw/master/images/figure5_1_1.png) 146 | 147 | #### (2) 148 | 149 | ![image-20211120175508120](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120175508120.png) 150 | 151 | 代码 152 | 153 | ```python 154 | # 程序文件Pan5_1_2.py 155 | import pylab as plt 156 | import numpy as np 157 | import cvxpy as cp 158 | 159 | plt.rc('text', usetex=True) 160 | plt.rc('font', size=16) 161 | x = cp.Variable(6, pos=True) 162 | obj = cp.Minimize(x[5]) 163 | a1 = np.array([0.025, 0.015, 0.055, 0.026]) 164 | a2 = np.array([0.05, 0.27, 0.19, 0.185, 0.185]) 165 | a3 = np.array([1, 1.01, 1.02, 1.045, 1.065]) 166 | k = 0.05 167 | kk = [] 168 | ss = [] 169 | while k < 0.27: 170 | con = [cp.multiply(a1, x[1:5]) - x[5] <= 0, 171 | a2 @ x[:-1] >= k, a3 @ x[:-1] == 1] 172 | prob = cp.Problem(obj, con) 173 | prob.solve(solver='GLPK_MI') 174 | kk.append(k) 175 | ss.append(prob.value) 176 | k = k + 0.005 177 | plt.plot(kk, ss, 'r*') 178 | plt.xlabel('$k$') 179 | plt.ylabel('$R$', rotation=90) 180 | plt.show() 181 | 182 | ``` 183 | 184 | 输出 185 | 186 | ![figure5_1_2](https://gitee.com/mr_asd/taolunban-img/raw/master/images/figure5_1_2.png) 187 | 188 | #### (3) 189 | 190 | image-20211120183358662 191 | 192 | 193 | 194 | 代码 195 | 196 | ```python 197 | 198 | # 程序文件Pan5_1_2.py 199 | import matplotlib.pyplot as plt 200 | import numpy as np 201 | import cvxpy as cp 202 | 203 | # plt.rc('text', usetex=True) 204 | plt.rc('font', size=16) 205 | x = cp.Variable(6, pos=True) 206 | a1 = np.array([0.025, 0.015, 0.055, 0.026]) 207 | a2 = np.array([0.05, 0.27, 0.19, 0.185, 0.185]) 208 | a3 = np.array([1, 1.01, 1.02, 1.045, 1.065]) 209 | s = 0.00 210 | ss = [] 211 | ff = [] 212 | while s <= 1: 213 | obj = cp.Minimize(s*x[5] - (1-s)*sum(cp.multiply(a2,x[:-1]))) 214 | con = [cp.multiply(a1, x[1:5]) - x[5] <= 0, 215 | a3 @ x[:-1] == 1] 216 | prob = cp.Problem(obj, con) 217 | prob.solve(solver='GLPK_MI') 218 | ss.append(s) 219 | ff.append(prob.value) 220 | s = s + 0.01 221 | plt.plot(ss, ff, 'r*') 222 | plt.xlabel('s') 223 | plt.ylabel('R', rotation=90) 224 | plt.show() 225 | 226 | ``` 227 | 228 | 输出 229 | 230 | ![image-20211120205901226](https://gitee.com/mr_asd/taolunban-img/raw/master/images/image-20211120205901226.png) 231 | 232 | -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班08/07-2.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班08/07-2.rar -------------------------------------------------------------------------------- /Python数学建模讨论班资料/讨论班09/非线性规划代码.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/Python数学建模讨论班资料/讨论班09/非线性规划代码.rar -------------------------------------------------------------------------------- /README.en.md: -------------------------------------------------------------------------------- 1 | # 数学建模协会 2 | 3 | #### Description 4 | 上海交通大学数学建模协会资料 5 | 6 | #### Software Architecture 7 | Software architecture description 8 | 9 | #### Installation 10 | 11 | 1. xxxx 12 | 2. xxxx 13 | 3. xxxx 14 | 15 | #### Instructions 16 | 17 | 1. xxxx 18 | 2. xxxx 19 | 3. xxxx 20 | 21 | #### Contribution 22 | 23 | 1. Fork the repository 24 | 2. Create Feat_xxx branch 25 | 3. Commit your code 26 | 4. Create Pull Request 27 | 28 | 29 | #### Gitee Feature 30 | 31 | 1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md 32 | 2. Gitee blog [blog.gitee.com](https://blog.gitee.com) 33 | 3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) 34 | 4. The most valuable open source project [GVP](https://gitee.com/gvp) 35 | 5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) 36 | 6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 数学建模协会 2 | 3 | #### 介绍 4 | 上海交通大学数学建模协会资料 5 | 6 | #### 协会介绍 7 | 上海交通大学数学建模协会是一个专注于数学建模竞赛与数模知识科普的科技类协会。协会集聚了大量的建模竞赛获奖选手,旨在服务全体交大学生,给各学科领域的、对数学建模感兴趣的同学提供一个学习入门、技能提高和组队参赛的平台。 8 | 9 | 10 | #### 主要活动 11 | 12 | 1. 协会每年都会协助举办面向全体学生的建模培训,包括:寒假的美国大学生数学建模竞赛、暑假的全国大学生数学建模竞赛和“华为杯”研究生数学建模竞赛以及“深圳杯”数学建模挑战赛。 13 | 2. 对于协会成员,我们有定期开展的数学模型和算法研讨班,通过成员间相互交流借鉴,共同学习数学模型、编程、论文写作与排版,以老带新,为每一位同学今后的科研、就业打下坚实的基础。 14 | 3. 协助举办上海交通大学数学建模校内赛。 15 | 16 | 17 | #### 参与贡献 18 | 19 | 1. Fork 本仓库 20 | 2. 新建 Feat_xxx 分支 21 | 3. 提交代码 22 | 4. 新建 Pull Request 23 | 24 | 25 | #### 特技 26 | 27 | 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 28 | 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 29 | 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 30 | 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 31 | 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 32 | 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) 33 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 |

Hello

2 | -------------------------------------------------------------------------------- /协会-LaTeX 学习资料/LaTeX 学习资料.md: -------------------------------------------------------------------------------- 1 | https://jbox.sjtu.edu.cn/l/41GEPY (提取码:bdfa) -------------------------------------------------------------------------------- /协会-LaTeX 学习资料/LaTeX入门刘海洋.md: -------------------------------------------------------------------------------- 1 | ## Latex 学习文档 2 | - latex入门-刘海洋 3 | - 百度网盘:https://pan.baidu.com/s/1-ZTmfGxN4uhtpxEusuNYBA (提取码:pp1p) 4 | - jbox:https://jbox.sjtu.edu.cn/l/Y1orci 5 | -------------------------------------------------------------------------------- /协会-LaTeX 学习资料/readme.md: -------------------------------------------------------------------------------- 1 | 这个文件夹下是协会关于LaTeX的一些学习资料 2 | -------------------------------------------------------------------------------- /协会-MATLAB 学习资料/MATLAB学习资料.md: -------------------------------------------------------------------------------- 1 | https://jbox.sjtu.edu.cn/l/S1Q6pl (提取码:ngpx) -------------------------------------------------------------------------------- /协会-MATLAB 学习资料/readme.md: -------------------------------------------------------------------------------- 1 | 这个文件夹下是协会关于MATLAB的一些学习资料 2 | -------------------------------------------------------------------------------- /协会-模型学习材料/readme.md: -------------------------------------------------------------------------------- 1 | 这个文件夹下是协会关于模型的一些学习资料 2 | -------------------------------------------------------------------------------- /协会-模型学习材料/数学建模教材.md: -------------------------------------------------------------------------------- 1 | https://jbox.sjtu.edu.cn/l/h1IkG9 (提取码:asri) -------------------------------------------------------------------------------- /协会宣传/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会宣传/.keep -------------------------------------------------------------------------------- /协会宣传/数学建模协会制作推送不完全统计.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会宣传/数学建模协会制作推送不完全统计.pdf -------------------------------------------------------------------------------- /协会活动照片/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/.DS_Store -------------------------------------------------------------------------------- /协会活动照片/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/.keep -------------------------------------------------------------------------------- /协会活动照片/20-21下/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/20-21下/.keep -------------------------------------------------------------------------------- /协会活动照片/20-21下/分享会1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/20-21下/分享会1.jpg -------------------------------------------------------------------------------- /协会活动照片/20-21下/宣传单1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/20-21下/宣传单1.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/20210925部长团.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/20210925部长团.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.10/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.10/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.10/听讲.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.10/听讲.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.10/大合照.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.10/大合照.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/33efdf3d8cda9f4b1aff9fa9b6dcf80.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/33efdf3d8cda9f4b1aff9fa9b6dcf80.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/3ecc1e9d70d7815cafd95b80ea82815.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/3ecc1e9d70d7815cafd95b80ea82815.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/4156111e55010869d980ab2d3671575.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/4156111e55010869d980ab2d3671575.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/7bf74a2c7a151c3a415adf5d51b7d0f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/7bf74a2c7a151c3a415adf5d51b7d0f.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/81502ffe7526e5a6bd26fc271913856.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/81502ffe7526e5a6bd26fc271913856.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/b054720604e3a7d2b3f0fc19b7d6569.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/b054720604e3a7d2b3f0fc19b7d6569.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/d8e0c8f980e9d269b99726fcebd795a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/d8e0c8f980e9d269b99726fcebd795a.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.16/dad62357efa8d169a58877666459af2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.16/dad62357efa8d169a58877666459af2.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.23/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.23/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.23/38e173d3e9962247fd402621258bee1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.23/38e173d3e9962247fd402621258bee1.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.23/d4584ca1c1117e5ddeb2e457d97a728.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.23/d4584ca1c1117e5ddeb2e457d97a728.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/0fdcfa54273f761cdc664404e216658.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/0fdcfa54273f761cdc664404e216658.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/187e1d4fc0631a823985411d455932a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/187e1d4fc0631a823985411d455932a.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/24a59be1089dfd9c2dbfe7e0767402a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/24a59be1089dfd9c2dbfe7e0767402a.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/320f2ce79127a28e7156c2c29d0b436.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/320f2ce79127a28e7156c2c29d0b436.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/3718100e528fffd83465ebe7d7505bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/3718100e528fffd83465ebe7d7505bc.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/6f9f060ceb8e64e9e88f2d15eb47a98.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/6f9f060ceb8e64e9e88f2d15eb47a98.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/df405f6415275fc8b59c893dc2700df.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/df405f6415275fc8b59c893dc2700df.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班10.30/f1cc2bcb3cfcf27021cc44668efac79.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班10.30/f1cc2bcb3cfcf27021cc44668efac79.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.14/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.14/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.14/0675f1cfa71621d87691067baf89e83.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.14/0675f1cfa71621d87691067baf89e83.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.14/1449e9f2687586d6ddab6ffade97aba.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.14/1449e9f2687586d6ddab6ffade97aba.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.14/8a01618a051a0739ad71ea0cfd72984.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.14/8a01618a051a0739ad71ea0cfd72984.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.14/93b48af91fbf293d6809422831d6edc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.14/93b48af91fbf293d6809422831d6edc.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.14/a48374f999d526c34cc079efd51c6ae.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.14/a48374f999d526c34cc079efd51c6ae.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.14/c4c0382501a6a55191f7421aa1f02d4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.14/c4c0382501a6a55191f7421aa1f02d4.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.20/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.20/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.20/15bd3806875f8d7ebafef624fe3f0c0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.20/15bd3806875f8d7ebafef624fe3f0c0.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.20/af824c8784c5b70839b4603425261b7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.20/af824c8784c5b70839b4603425261b7.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.20/c9e6a982d9f2c33f9a31860c449a633.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.20/c9e6a982d9f2c33f9a31860c449a633.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.6/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.6/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.6/438bb0be27e9a91a8b4592913023e96.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.6/438bb0be27e9a91a8b4592913023e96.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.6/67cbb16797b44dfe8dfe6780bc2ef24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.6/67cbb16797b44dfe8dfe6780bc2ef24.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班11.6/77a9b0cb967fe5cb71bf7cdf3c0079f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班11.6/77a9b0cb967fe5cb71bf7cdf3c0079f.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班12.5/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班12.5/.keep -------------------------------------------------------------------------------- /协会活动照片/21-22上/讨论班12.5/58a463161ab920d705bab3e233242d3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22上/讨论班12.5/58a463161ab920d705bab3e233242d3.jpg -------------------------------------------------------------------------------- /协会活动照片/21-22下/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/21-22下/.keep -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0723 讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221907.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221907.png -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221910.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221910.png -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221914.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221914.jpg -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221920.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0723 讨论班/微信图片_20220727221920.jpg -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0723 讨论班/截屏2022-07-23 21.05.31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0723 讨论班/截屏2022-07-23 21.05.31.png -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0730 讨论班/1b8897df26ec6d091b7599c12ce7829.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0730 讨论班/1b8897df26ec6d091b7599c12ce7829.jpg -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0730 讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0806讨论班/0806讨论班.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0806讨论班/0806讨论班.jpg -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0806讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0820 讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0827讨论班/0827讨论班.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0827讨论班/0827讨论班.png -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0827讨论班/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0903/0903讨论班.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22 暑假/0903/0903讨论班.jpg -------------------------------------------------------------------------------- /协会活动照片/22 暑假/0903/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/22 暑假/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/22-23上/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/.DS_Store -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/.DS_Store -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/374241C6F8D0E4749B6B11785762C7E3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/374241C6F8D0E4749B6B11785762C7E3.jpg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/4F1BF9D255D2076236221F793E8C1DD1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/4F1BF9D255D2076236221F793E8C1DD1.jpg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/9FA0FA2D68B40E58F32B7A526C1B1A8F.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/9FA0FA2D68B40E58F32B7A526C1B1A8F.jpg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/9FDD20A7B8995E1F552435963FAACB52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/9FDD20A7B8995E1F552435963FAACB52.jpg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/C31B6A986E058766376C989CD9922EEF.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/C31B6A986E058766376C989CD9922EEF.jpg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/QQ20221113-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/QQ20221113-0.jpg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/WechatIMG450.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/WechatIMG450.jpeg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1113会议/WechatIMG451.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1113会议/WechatIMG451.jpeg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1203会议/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1203会议/1.jpg -------------------------------------------------------------------------------- /协会活动照片/22-23上/1203会议/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/22-23上/1203会议/2.jpg -------------------------------------------------------------------------------- /协会活动照片/协会内建/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/协会内建/宣传部/220714-破冰大会/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /协会活动照片/协会内建/宣传部/220714-破冰大会/微信图片_20220725150935.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/协会内建/宣传部/220714-破冰大会/微信图片_20220725150935.png -------------------------------------------------------------------------------- /协会活动照片/协会内建/宣传部/220714-破冰大会/微信图片_20220725150940.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/协会活动照片/协会内建/宣传部/220714-破冰大会/微信图片_20220725150940.png -------------------------------------------------------------------------------- /协会活动照片/协会内建/宣传部/readme.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /数模国赛/readme.md: -------------------------------------------------------------------------------- 1 | 这个文件夹下是协会关于全国大学生数学建模竞赛的资料 -------------------------------------------------------------------------------- /数模国赛/国赛近十年赛题与优秀论文.md: -------------------------------------------------------------------------------- 1 | 分享内容: 近十年国赛赛题与优秀论文 2 | 链接地址: https://jbox.sjtu.edu.cn/l/u1f8kZ 3 | 提取码: sjtu 4 | 提示:需要交大VPN -------------------------------------------------------------------------------- /数模校内赛/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/数模校内赛/.keep -------------------------------------------------------------------------------- /数模校内赛/上海交通大学第一届数学建模校内赛优秀论文展.md: -------------------------------------------------------------------------------- 1 | # 上海交通大学第一届数学建模校内赛优秀论文展 2 | 3 | ## 一、问题重述 4 | 5 | (简单描述对问题的理解,从问题中抓住主干,切勿直接复制原题,**必填**) 6 | 7 | 8 | 9 | 10 | ## 二、建模思路 11 | 12 | (对每一问问题的分析,所采用的建模思路与方法,流程图,有无对方法加以改进,**必填**) 13 | 14 | 此处可以插入公式 15 | $$x_1 + x_2 = x_3$$ 16 | 17 | 18 | 19 | ## 三、结果展示 20 | 21 | (问题结果的图表,描述清楚图像的横纵坐标,图的意义,**必填**) 22 | 23 | 24 | ![此处插入图片](https://images.gitee.com/uploads/images/2021/1009/091954_d496d102_9125377.png "屏幕截图.png") 25 | 26 | 27 | 28 | ## 四、总结 29 | 30 | (自评分析,是否达到目标预期,可能改进的方向,建模过程中遇到的困难,模型的优缺点,从哪些方面可以改进模型,模型的假设是否合理等,**必填**) 31 | 32 | 33 | 34 | 35 | 36 | 37 | ## 五、代码 38 | 39 | (解决问题中的核心代码,体现创新的算法代码等,**选填**) 40 | ```python 41 | import numpy as np 42 | ``` -------------------------------------------------------------------------------- /数模研赛/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZhiweiBai/MathModeling/66d4947afecd3e8d45713759b1a5962a505fa58c/数模研赛/.keep -------------------------------------------------------------------------------- /数模研赛/readme.md: -------------------------------------------------------------------------------- 1 | 这个文件夹下是协会关于研究生数学建模竞赛的资料 -------------------------------------------------------------------------------- /数模研赛/研赛资料.md: -------------------------------------------------------------------------------- 1 | ## 1 研赛真题论文下载 2 | 请点击 [数模知识库](https://www.shumo.com/wiki/doku.php?id=%E5%85%A8%E5%9B%BD%E7%A0%94%E7%A9%B6%E7%94%9F%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1%E7%AB%9E%E8%B5%9B_npmcm_%E5%8E%86%E5%B9%B4%E8%AF%95%E9%A2%98) 下载 3 | ## 2 研赛优秀论文下载 4 | 链接:https://pan.baidu.com/s/1x59Yzfi-vT2Vb9VLenNIuw 5 | 提取码:wgc7 6 | -------------------------------------------------------------------------------- /数模美赛/readme.md: -------------------------------------------------------------------------------- 1 | 这个文件夹下是协会关于美国大学生数学建模竞赛的资料 -------------------------------------------------------------------------------- /数模美赛/历年优秀论文.md: -------------------------------------------------------------------------------- 1 | # 美赛历年优秀论文 2 | 3 | ## jbox下载链接(需要交大VPN) 4 | https://jbox.sjtu.edu.cn/l/91oy8o 5 | 6 | ## GitHub下载链接 7 | https://github.com/dick20/MCM-ICM --------------------------------------------------------------------------------