数学建模代码汇总

合集下载

数学建模python代码

数学建模python代码

数学建模python代码数学建模是一种通过数学方法解决实际问题的过程,而Python 是一种强大的编程语言,可以用于数学建模中的数据分析、模型构建和可视化等方面。

本文将介绍数学建模中常用的Python代码。

1. 数据读取和处理在数学建模中,数据的处理是非常重要的一步。

Python有丰富的数据处理库,如Pandas和Numpy,可以非常方便地进行数据读取和处理。

例如,如下代码可以将csv文件读取为Pandas的DataFrame 对象。

import pandas as pddata = pd.read_csv('data.csv')2. 统计分析在数据处理完之后,我们需要对数据进行统计分析,以便更好地理解问题。

Python的Scipy和Statsmodels库提供了各种统计分析工具,如假设检验、方差分析和回归分析等。

例如,如下代码可以进行线性回归分析。

from scipy import statsx = [1, 2, 3, 4, 5]y = [2, 4, 6, 8, 10]slope, intercept, r_value, p_value, std_err =stats.linregress(x, y)3. 数学建模在统计分析的基础上,我们可以开始进行数学建模。

Python有很多数学建模库,如SymPy和Matplotlib。

SymPy提供了符号计算和求解方程的工具,而Matplotlib则可以用于绘制数据和模型的可视化图形。

例如,如下代码可以绘制一个三角函数的图像。

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(0, 2*np.pi, 100)y = np.sin(x)plt.plot(x, y)plt.show()以上是一些常用的数学建模Python代码,当然,数学建模的过程非常复杂,需要综合运用多种技术和工具。

数学建模源代码

数学建模源代码

灰色系统理论建模源代码function GM1_1(X0)%format long ;[m,n]=size(X0);X1=cumsum(X0); %累加X2=[];for i=1:n-1X2(i,:)=X1(i)+X1(i+1);endB=-0.5.*X2 ;t=ones(n-1,1);B=[B,t] ; % 求B矩阵YN=X0(2:end) ;P_t=YN./X1(1:(length(X0)-1)) %对原始数据序列X0进行准光滑性检验,%序列x0的光滑比P(t)=X0(t)/X1(t-1)A=inv(B.'*B)*B.'*YN.' ;a=A(1)u=A(2)c=u/a ;b=X0(1)-c ;X=[num2str(b),'exp','(',num2str(-a),'k',')',num2str(c)];strcat('X(k+1)=',X)%syms k;for t=1:length(X0)k(1,t)=t-1;endkY_k_1=b*exp(-a*k)+c;for j=1:length(k)-1Y(1,j)=Y_k_1(j+1)-Y_k_1(j);endXY=[Y_k_1(1),Y] %预测值CA=abs(XY-X0) ; %残差数列Theta=CA %残差检验绝对误差序列XD_Theta= CA ./ X0 %残差检验相对误差序列AV=mean(CA); % 残差数列平均值R_k=(min(Theta)+0.5*max(Theta))./(Theta+0.5*max(Theta)) ;% P=0.5 R=sum(R_k)/length(R_k) %关联度Temp0=(CA-AV).^2 ;Temp1=sum(Temp0)/length(CA);S2=sqrt(Temp1) ; %绝对误差序列的标准差%----------AV_0=mean(X0); % 原始序列平均值Temp_0=(X0-AV_0).^2 ;Temp_1=sum(Temp_0)/length(CA);S1=sqrt(Temp_1) ; %原始序列的标准差TempC=S2/S1*100; %方差比C=strcat(num2str(TempC),'%') %后验差检验%方差比%----------SS=0.675*S1 ;Delta=abs(CA-AV) ;TempN=find(Delta<=SS);N1=length(TempN);N2=length(CA);TempP=N1/N2*100;P=strcat(num2str(TempP),'%') %后验差检验%计算小误差概率调用例子:X0=[2.874,3.278,3.337,3.39,3.679];GM1_1(X0)主题:自学MATLAB很好的资料【MATLAB下载、安装、使用】matlab 7.0 完整版 iso [0.99G] 下载!/viewthread.php?tid=6Matlab绿色迷你版.rar(仅6M大小)/viewthread.php?tid=142Matlab中asv文件到底是什么东西?/viewthread.php?tid=31Matlab 启动后一直初始化不动,cpu 90%以上的解决/viewthread.php?tid=33安装matlab 7.0 时缺少mwinstall.dll的解决方法/viewthread.php?tid=32解决MATLAB符号工具箱与安全卫士冲突方法/viewthread.php?tid=30Matlab2009a下载地址/viewthread.php?tid=29Matlab R2009a安装注册方法(图文版)/viewthread.php?tid=28AMD处理器上安装MATLAB,打开之后一闪自动关闭的解决办法/viewthread.php?tid=7MATLAB 基础应用哈工大matlab基础及应用讲义PPT /viewthread.php?tid=173《MATLAB 7.0基础教程》-清华大学出版社/viewthread.php?tid=174Matlab实用程序百例源程序/viewthread.php?tid=5Matlab官方教程《Learn Matlab7.0(学生版本)》/viewthread.php?tid=164张志涌《精通matlab6.5 (北航)》pdf电子书下载/viewthread.php?tid=119《MATLAB基础与应用实例集粹》源程序打包下载/viewthread.php?tid=2精通MATLAB综合辅导与指南-西安交大(word版)/viewthread.php?tid=133MATLAB基础知识入门(ppt),对新手应该很有用的!/viewthread.php?tid=101王丽萍-matlab课件(包含许多M文件代码)/viewthread.php?tid=36自学Matlab必备的60个小程序代码/viewthread.php?tid=35我也来发点东西:《精通 MATLAB 科学计算》/viewthread.php?tid=34MATLAB 数学运算Matlab偏微分方程工具箱应用简介/viewthread.php?tid=179MATLAB数据分析与多项式计算 ppt讲义/viewthread.php?tid=146王能超《计算方法:算法设计及其MATLAB实现》pdf电子书/viewthread.php?tid=118数值分析及其MATLAB实现(附光盘MATLAB6.X\7.X版)随书光盘下载/viewthread.php?t id=117Matlab求解微分方程——个人总结/viewthread.php?tid=58微分方程转换为一阶显示微分方程组方法/viewthread.php?tid=57Matlab中几个数值积分函数的比较和优缺点/viewthread.php?tid=56MATLAB GUI应用用GUIDE创建GUI视频教程简单明了/viewthread.php?tid=182GUI演示实例:自制简易计算器/viewthread.php?tid=114基于Matlab GUI的扫雷游戏/viewthread.php?tid=149很好的GUI学习开发经验/viewthread.php?tid=148GUI中各种控件的特征属性的意义和应用/viewthread.php?tid=115GUI演示实例:主成分分析GUI代码---很经典/viewthread.php?tid=113Matlab GUI 编程(适用于Matlab的初学者)/viewthread.php?tid=95MATLAB GUI新手备忘录/viewthread.php?tid=23GUI新手之教你读懂GUI的M文件/viewthread.php?tid=22MATLAB 图像处理MATLAB图像处理命令(pdf)(很全,很有用)/viewthread.php?tid=98MATLAB在数字水印技术研究的应用/viewthread.php?tid=169《Matlab6.5图形图像处理》一书中所有源程序/viewthread.php?tid=105利用snake算法实现数字图像的边缘检测,图像分割以及特征提取/viewthread.php?ti d=107Matlab中图例注释函数legend详解/viewthread.php?tid=8基于matlab的车牌定位的源程序/viewthread.php?tid=53MATLAB 拟合、样条最小二乘法曲线拟合的程序/viewthread.php?tid=180Matlab非线性拟合工具箱cftool /viewthread.php?tid=145MATLAB拟合函数源代码合集/viewthread.php?tid=88拉格朗日(Lagrange)多项式插值算法源代码/viewthread.php?tid=89MATLAB实现牛顿插值(Newton's Interpolation )算法源代码/viewthread.php?tid =87三次B样条插值曲面及其实现/viewthread.php?tid=60Matlab中插值函数汇总和使用说明/viewthread.php?tid=59MATLAB 信号处理MATLAB下的数字信号处理实现示例pdf /viewthread.php?tid=183基于MATLAB的FIR滤波器设计与滤波/viewthread.php?tid=153《MATLAB在电子信息课程中的应用》例题及习题代码/viewthread.php?tid=166自适应滤波器LMS算法(去噪)/viewthread.php?tid=154基于FFT的频谱分析实例/viewthread.php?tid=150快速傅里叶变换函数/viewthread.php?tid=147《MATLAB 信号处理详解》/陈亚勇 pdf电子书/viewthread.php?tid=100时频分布,调频小波分析和分数阶傅里叶变换的程序/viewthread.php?tid=91连续信号及其MATLAB实现/viewthread.php?tid=9MATLAB 通信系统基于Matlab的多功能通信信号源仿真/viewthread.php?tid=168瑞利衰落信道仿真Rayleigh Fading Channel Simulation /viewthread.php?tid=156基于Matlab的CDMA通信系统仿真/viewthread.php?tid=152《通信系统仿真原理与无线应用》的所有仿真代码/viewthread.php?tid=151matlab通信仿真psk误码分析/viewthread.php?tid=108MATLAB通信仿真与应用(作者:刘敏)电子书下载/viewthread.php?tid=121生成随机高斯样本的程序/viewthread.php?tid=94MATLAB软件及二进制调制原理/viewthread.php?tid=102MATLAB实现M-QAM调制解调演示源代码/viewthread.php?tid=93MATLAB实现ASK, OOK, FSK, BPSK, QPSK, 8PSK调制源代码/viewthread.php?tid=92通信原理—基于Matlab仿真计算 pdf下载/viewthread.php?tid=12《MATLAB通信仿真及应用实例详解》.pdf免费下载/viewthread.php?tid=11作者:miniyao发表时间:2009-6-5 23:38:00第1楼MATLAB 神经网络《面向MATLAB工具箱的神经网络理论与应用》pdf下载/viewthread.php?tid=167Gabor变化直方图序列的人脸描述与识别/viewthread.php?tid=162利用主元分析与神经网络进行人脸识别/viewthread.php?tid=161基于BP 神经网络的数字识别研究/viewthread.php?tid=158关于神经网络(matlab)归一化的整理/viewthread.php?tid=157陈继光《Matlab与自适应神经网络模糊推理系统》pdf电子书/viewthread.php?tid=12基于Matlab神经网络的字符识别/viewthread.php?tid=52RBF神经网络用于函数拟合与模式识别的Matlab示例程序/viewthread.php?tid=51BP神经网络用于函数拟合与模式识别的Matlab示例程序/viewthread.php?tid=50基于Matlab神经网络工具的BP网络实例(注释很详细)/viewthread.php?tid=49Neural Network Design Demonstrations(神经网络设计代码演示) /viewthread.php?tid=48基于神经网络工具箱实现三层BP网络代码(注释很详细) /viewthread.php?tid=47BP网络与RBF径向基网络对比(傻瓜教程,10秒学会神经网络)/viewthread.php?tid=46关于神经网络几个初始化函数之间的联系总结/viewthread.php?tid=45MATLAB 遗传算法遗传算法MATLB程序/viewthread.php?tid=104英国Sheffield遗传算法工具箱(GATBX)基本函数介绍与编程方法/viewthread.php?tid =74遗传算法的原理与应用/viewthread.php?tid=73遗传算法的收敛性与编码/viewthread.php?tid=72一种改进的自适应遗传算法-金晶苏勇/viewthread.php?tid=71遗传算法的编码机制研究/viewthread.php?tid=70遗传算法研究综述/viewthread.php?tid=69基于Matlab的四个遗传工具箱的比较/viewthread.php?tid=68遗传算法的编码研究/viewthread.php?tid=67遗传算法的现状及发展动向/viewthread.php?tid=66遗传算法在MATLAB 环境中的实现/viewthread.php?tid=65《GAOT遗传算法优化工具箱》的使用讲解/viewthread.php?tid=64用MATLAB实现遗传算法程序(含直接Matlab代码)/viewthread.php?tid=63Matlab遗传算法工具箱函数及应用实例/viewthread.php?tid=62MATLAB 混合编程Matlab、Mathematica编程.doc /viewthread.php?tid=178怎样把excel中的数据导入matlab中?/viewthread.php?tid=177Matlab、Mathematica编程(word讲义)/viewthread.php?tid=143《MATLAB 7.0编程基础基础》一书全部源程序/viewthread.php?tid=141一步步学如何使用VC调用matlab engine编程/viewthread.php?tid=138建模中的MATLAB程序在C语言下的实现/viewthread.php?tid=137《VC++与Matlab混合编程的快速实现》pdf下载/viewthread.php?tid=136唐昌建《Matlab编程基础及应用》(四川大学网络教育学院) /viewthread.php?tid=112基于MATLAB2008B与VS 2003生成独立可执行的程序/viewthread.php?tid=13MATLAB 建模优化数学建模工具箱(内含安装方法)/viewthread.php?tid=135Dijkstra最短路径算法/viewthread.php?tid=127Matlab优化源代码全集[线性回归非线性回归模型] /viewthread.php?tid=90数学建模个人经验谈—如何查找文献资料/viewthread.php?tid=85Matlab多目标规划讲义/viewthread.php?tid=38最优化方法的Matlab实现(pdf转word文档)/viewthread.php?tid=37MATLAB 控制系统模糊PID控制程序的源码,有解释/viewthread.php?tid=106先进PID控制及其MATLAB仿真(教材+程序)刘金琨/viewthread.php?tid=126应用MATLAB控制系统仿真PPT /viewthread.php?tid=99MATLAB控制系统仿真与实例详解(附书光盘)(M文件)免费下载/viewthread.php?ti d=14。

数学建模c题代码

数学建模c题代码

数学建模c题代码以下是一个数学建模C题的代码:●include<stdio.h>●include<math.h>●int main{●double a,b,c,x1,x2●输入参数●printf(请输入一元二次方程的三个系数:a,b,c:)●scanf(%lf%lf%lf,&a,&b,&c)●计算根●if(a==0){●if(b==0){●printf(方程无解。

\n)}else{x1=-c/b●printf(方程有唯一解:x=%.2lf。

\n,x1)}●}else{double delta=b*b-4*a*c●if(delta<0){printf(方程无实根。

\n)●else if(delta==0){x1=-b/(2*a)●printf(方程有唯一实根:x=%.2lf。

\n,x1)}else{●x1=(-b+sqrt(delta))/(2*a)●x2=(-b-sqrt(delta))/(2*a)●printf(方程有两个实根:x1=%.2lf,x2=%.2lf。

\n,x1,x2)●return 0该代码使用了C语言的标准库函数sqrt来计算平方根。

该代码的输出结果如下:●请输入一元二次方程的三个系数:1 2 1●方程有两个实根:x1=-0.50,x2=-2.50●这个代码可以用来求解一元二次方程。

该方程的一般形式为:ax^2+bx+c=0该代码的具体步骤如下:●首先判断系数a是否为零。

如果a为零,则方程为一次方程,可以直接求解。

●如果a不为零,则方程为二次方程。

可以计算判别式delta。

●如果delta小于零,则方程无实根。

●如果delta等于零,则方程有唯一实根。

●如果delta大于零,则方程有两个实根。

●然后,根据判别式的值,分别计算出方程的根。

数学建模常用MATLAB程序代码

数学建模常用MATLAB程序代码

V1到V11的最短路径及其长度:P53>> a(2,3)=6;a(2,5)=1;a(3,4)=7;a(3,5)=5;a(3,6)=1;a(3,7)=2;a(4,7)=9;a(5,6)=3;a(5,8)=2;a(5,9)=9;a(6,7)=4;a(6,9)=6;a(7,9)=3;a(7,10)=1;a(8,9)=7;a(8,11)=9;a(9,10)=1;a(9,11)=2;a(10,11)=4;a=a';[i,j,v]=find(a);b=sparse(i,j,v,11,11);[x,y,z]=graphshortestpath(b,1,11,'Directed',false)x =13y =1 2 5 6 3 7 10 9 11z =0 1 6 1 2 5 3 5 10 7 9灰色预测GM(1,1)模型程序代码:P375x0=[71.1 72.4 72.4 72.1 71.4 72 71.6]';n=length(x0);lamda=x0(1:n-1)./x0(2:n);range=minmax(lamda');x1=cumsum(x0)B=[-0.5*(x1(1:n-1)+x1(2:n)),ones(n-1,1)]Y=x0(2:n);u=B\Yx=dsolve('Dx+a*x=b','x(0)=x0')x=subs(x,{'a','b','x0'},{u(1),u(2),x0(1)})yuce1=subs(x,'t',[0:n-1])y=vpa(x,n-1)yuce=[x0(1),diff(yuce1)]epsilon=x0'-yucedelta=abs(epsilon./x0')rho=1-(1-0.5*u(1))/(1+0.5*u(1))*lamda'x1 =71.1143.5215.9288359.4431.4503B =-107.3 1-179.7 1-251.95 1-323.7 1-395.4 1-467.2 1u =0.002343872.657x =(b - exp(-a*t)*(b - a*x0))/ax =41884064296049311744/1351100916648171 - (41788001020875628544*exp(-(1351100916648171*t)/576460752303423488))/135110091664 8171yuce1 =71.1 143.51 215.74 287.81 359.71 431.44 503y =31000.0 - 30928.9*exp(-0.00234379*t)yuce =71.1 72.406 72.236 72.067 71.898 71.73 71.562epsilon =0 -0.0057414 0.16376 0.032871 -0.49842 0.2699 0.037824delta =0 7.9302e-05 0.0022619 0.00045592 0.0069806 0.0037486 0.00052827rho =0.020255 0.002341 -0.0018101 -0.0074399 0.010655 -0.0032325用Krusksl算法求最小生成树的Matlab程序代码:P47-48a(1,2)=50;a(1,3)=60;a(2,4)=65;a(2,5)=40;a(3,4)=52;a(3,7)=45;a(4,5)=50;a(4,6)=30;a(4,7)=42;a(5,6)=70;>> [i,j,b]=find(a);>> data=[i';j';b'];index=data(1:2,:);>> loop=length(a)-1;>> result=[];>> while length(result)<looptemp=min(data(3,:));flag=find(data(3,:)==temp);flag=flag(1);v1=index(1,flag);v2=index(2,flag);if v1~=v2result=[result,data(:,flag)];endindex(find(index==v2))=v1;data(:,flag)=[];index(:,flag)=[];end>> resultresult =6 57 7 2 54 2 4 3 1 430 40 42 45 50 50求得最小生成树的边集为{v6v4, v5v2, v7v4, v7v3, v2v1, v5v4}。

数学建模计算代码

数学建模计算代码

1、function s=f2s=1.369^2+sin(7/10*pi)*sqrt(26.48)/2.9 答案:s =3.3097ans =3.30972、(1)function y=f3(x)y=rat(sqrt(x+sqrt(x+sqrt(x)))/sqrt(2*x+1)) 答案:f3(2.43)y =1 + 1/(-8 + 1/(3 + 1/(-5 + 1/(-2 + 1/(-3))))) ans =1 + 1/(-8 + 1/(3 + 1/(-5 + 1/(-2 + 1/(-3)))))2、(2)function y=f4(x)y=rat(sqrt(sqrt(34*x))*log(35*x))答案:f4(2.43)y =13 + 1/(3 + 1/(-2 + 1/(-9 + 1/(-11))))ans =13 + 1/(3 + 1/(-2 + 1/(-9 + 1/(-11))))2、(4)function y=f5(x)y=rat(( exp(tan(x))-exp(sin(x)))/tan(x^3)) 答案:f5(2.43)y =0 + 1/(3 + 1/(10 + 1/(-3 + 1/(-2 + 1/(-3))))) ans =0 + 1/(3 + 1/(10 + 1/(-3 + 1/(-2 + 1/(-3))))) 2、(5)function y=f6(x)y=rat(2/sqrt(3+x^2)*atan(sqrt(((5+x^2)/x)*tan (x/2))))答案:f6(2.43)y =1 + 1/(-7 + 1/(-2 + 1/(-2 + 1/(-6 + 1/(4))))) ans =1 + 1/(-7 + 1/(-2 + 1/(-2 + 1/(-6 + 1/(4))))) 3、(1)(2)help magica=magic(5)c=a(2,3)d=a([2,3,4],[3,5])答案:a =17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9c =7d =7 1613 2219 33、help linspacelinspace(0,1,6)答案:ans =0 0.2000 0.4000 0.6000 0.8000 1.00005、function y=f8(x) if x>=-1&x<0y=x+1elseif x>=0&x<1y=1elseif x>=1&x<=2y=x^2end答案:f8(-1)y =ans =f8(0.5)y =1 ans =1f8(1.5)y =2.2500 ans =2.2500 6、s=1;for i=1:100s=s*i; ends答案:s =9.3326e+157 s=0;for i=1:100s=s+i; ends答案:s =5050 7、s=0 ;i=0; while i<=1000;i=i+2;s=s+i; endi;ss =251502 s=0 ;i=1; while i<=1000;i=i+2;s=s+i;endi;s答案:s =251000以下各题自己不会写程序,但能看懂程序的意思8、clearclcfor m=100:999m1=fix(m/100);m2=rem(fix(m/10),10);m3=rem(m,10);if m==m1^3+m2^3+m3^3disp(m)endend(网上搜索结果)(第二种方法)clearfor i=1:9for j=0:9for h=0:9if 100*i+j*10+h==i^3+j^3+h^3 s(k)= 100*i+j*10+h;k=k+1;endendendends(第三种方法)cleark=1;for x=100:999r=floor(x/100);t=floor((x-r*100)/10);s=floor(x-100*r-t*10);if x==r^3+t^3+s^3;w(k)=x;k=k+1;endw答案:w =153 370 371 40710、clearclck=1;for x=1:100r=floor(x/10);t=floor(x-r*10);if r*t>r+t;w(k)=x;k=k+1;endendw答案:w =Columns 1 through 1523 24 25 26 27 2829 32 33 34 35 36 37 38 39Columns 16 through 3042 43 44 45 46 47 48 49 52 53 54 55 56 57 58Columns 31 through 4559 62 63 64 65 66 67 68 69 72 73 74 75 76 77Columns 46 through 6078 79 82 83 84 85 86 87 88 89 92 93 94 95 96Columns 61 through 6397 98 99(参考例题自己写的程序)11、function m=gys(x)for i=1:min(x)if rem(x(1),i)==0&rem(x(2),i)==0m(i)=i;endendm=max(m);答案:x=[4 6]x =4 6>> gys(x)ans =2function m=gbs(x)for i=max(x):(x(1)*x(2));if rem(i,x(1))==0&rem(i,x(2))==0m(i)=i;endendm=min(m);答案:x=[4 6]x =4 6>> gbs(x)ans =(根据您的最大公约数改编的这个程序结果是零,不知道什么原因)。

数学建模代码

数学建模代码
x<=9.76;
y<=9.96;
数学建模6
model:
min=50*x1+0.2*x1^2+4*(x1-40)+50*x2+0.2*x2^2+4*(x1+x2-40-60)+50*x3+0.2*x3^2;
x1>=40;
x1<=180;
x2+x1-40<=180-40;
x2+x1-40>=60;
x3=180-x1-x2;
r=600 1000 800 1400 1200 700 600 800 1000 1200 1000 1100;
enddata min=@sum(s:r*@sqrt((x-x0)^2+(y-y0)^2));
end
数学建模5
model:
min=((x^2+y^2))^0.5*600+((x-8.20)^2+(y-0.50)^2)^0.5*1000+((x-0.5)^2+(y-4.90)^2)^0.5*800+((x-5.7)^2+(y-5)^2)^0.5*1400+((x-0.77)^2+(y-6.49)^2)^0.5*1200+((x-2.87)^2+(y-8.76)^2)^0.5*700+
数学建模代码 longo代码第一题: model: min=66.8*x11+57.2*x12+78*x13+70*x14+67.4*x15+75.6*x21+66*x22+67.8*x23+74.2*x24+7 1*x25+87*x31+66.4*x32+84.6*x33+69.6*x34+ 83.8*x35+58.6*x41+53*x42+59.4*x43+57.2*x44+62.4*x45; x11+x21+x31+x41+x51<=1; x12+x22+x32+x42+x52<=1; x13+x23+x33+x43+x53<=1; x14+x24+x34+x44+x54<=1; x15+x25+x35+x45+x55<=1; x11+x12+x13+x14+x15=1; x21+x22+x23+x24+x25=1; x31+x32+x33+x34+x35=1; x41+x42+x43+x44+x45=1; model: min=2*b11+3*b21+5*b31+3*b12+3*b22+6*b32; b11+b12=70; b31+b32=20; b21+b22=50; b11+2*b21+3*b31<80; b12+b22+3*b32<100;数学建模3.1 model: (9*a+15*b+4*c+3*d+2*e)/(a+b+c+d+e)<=5;@gin(a); @gin(b); @gin(c); @gin(d); @gin(e); end数学建模3.2 model: (9*a+15*b+4*c+3*d+2*e)/(a+b+c+d+e)<=5;@gin(a); @gin(b); @gin(c); @gin(d); @gin(e); end数学建模331 model: (9*a+15*b+4*c+3*d+2*e)/(a+b+c+d+e)<=5;@gin(a); @gin(b); @gin(c); @gin(d); @gin(e); end数学建模332 model: (9*a+15*b+4*c+3*d+2*e)/(a+b+c+d+e)<=5;@gin(a); @gin(b); @gin(c); @gin(d); @gin(e); end数学建模4 model: min=x12+x23+x34+x45+x56+x61; x12+x61>=60; x12+x23>=70; x23+x34>=60; x34+

数学建模常用的30个常用算法(python代码)

数学建模常用的30个常用算法(python代码) 数学建模中使用的算法涉及多个领域,包括优化、统计、机器学习等。

以下是一些在数学建模中常用的30个算法的简要说明和Python代码示例。

请注意,这只是一小部分,具体应用场景和需求可能需要使用其他算法。

1.线性规划(Linear Programming):from scipy.optimize import linprog2.整数规划(Integer Programming):from scipy.optimize import linprog3.非线性规划(Nonlinear Programming):from scipy.optimize import minimize4.蒙特卡洛模拟(Monte Carlo Simulation):import numpy as np5.差分方程(Difference Equations):import numpy as np6.梯度下降法(Gradient Descent):import numpy as np7.贪心算法(Greedy Algorithm):def greedy_algorithm(values, weights, capacity):n = len(values)ratio = [(values[i] / weights[i], i) for i in range(n)]ratio.sort(reverse=True)result = [0] * ntotal_value = 0current_weight = 0for _, i in ratio:if weights[i] + current_weight <= capacity: result[i] = 1current_weight += weights[i]total_value += values[i]return result, total_value8.动态规划(Dynamic Programming):def dynamic_programming(weights, values, capacity): n = len(values)dp = [[0] * (capacity + 1) for _ in range(n + 1)]for i in range(1, n + 1):for w in range(capacity + 1):if weights[i - 1] <= w:dp[i][w] = max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]])else:dp[i][w] = dp[i - 1][w]return dp[n][capacity]9.遗传算法(Genetic Algorithm):import numpy as np10.模拟退火算法(Simulated Annealing):import numpy as np11.马尔可夫链(Markov Chains):import numpy as np12.蒙特卡洛树搜索(Monte Carlo Tree Search):import numpy as np13.K均值聚类(K-means Clustering):from sklearn.cluster import KMeans14.主成分分析(Principal Component Analysis):from sklearn.decomposition import PCA15.支持向量机(Support Vector Machine):from sklearn.svm import SVC16.朴素贝叶斯分类器(Naive Bayes Classifier):from sklearn.naive_bayes import GaussianNB17.决策树(Decision Tree):from sklearn.tree import DecisionTreeClassifier18.随机森林(Random Forest):from sklearn.ensemble import RandomForestClassifier19.K最近邻算法(K-Nearest Neighbors):from sklearn.neighbors import KNeighborsClassifier20.多层感知器(Multilayer Perceptron):from sklearn.neural_network import MLPClassifier21.梯度提升机(Gradient Boosting):from sklearn.ensemble import GradientBoostingClassifier22.高斯混合模型(Gaussian Mixture Model):from sklearn.mixture import GaussianMixture23.时间序列分析(Time Series Analysis):import statsmodels.api as sm24.马尔科夫链蒙特卡洛(Markov Chain Monte Carlo):import pymc3 as pm25.局部最小二乘回归(Local Polynomial Regression):from statsmodels.nonparametric.kernel_regression import KernelReg26.逻辑回归(Logistic Regression):from sklearn.linear_model import LogisticRegression27.拉格朗日插值法(Lagrange Interpolation):from scipy.interpolate import lagrange28.最小二乘法(Least Squares Method):import numpy as np29.牛顿法(Newton's Method):def newton_method(f, df, x0, tol=1e-6, max_iter=100):x = x0for i in range(max_iter):x = x - f(x) / df(x)if abs(f(x)) < tol:breakreturn x30.梯度下降法(Gradient Descent):def gradient_descent(f, df, x0, learning_rate=0.01, tol=1e-6, max_iter=100):x = x0for i in range(max_iter):x = x - learning_rate * df(x)if abs(df(x)) < tol:breakreturn x以上代码只是简单示例,实际应用中可能需要根据具体问题进行调整和扩展。

数学建模比赛前准备的Matlab和lingo代码

Matlab和lingo代码Matlab 0基础知识 .............................................................. 错误!未定义书签。

Polyval (2)Polyfit (3)interrep1 (3)回归分析 (4)牛顿迭代法求解非线性方程组 (5)建模课上的代码 (11)lingo求解部分 (20)目标规划 (24)第10章数据的统计描述和分析 (29)!7个工人,7个工作的分配问题; (30)案例分析 (31)差分方程 (34)!三阶段面试模型; (36)装配线平衡模型 (38)露天矿生产的车辆安排(CMCM2003B) (40)Matlab基础知识相关系数矩阵的方式,通过Matlab 软件进行相关性分析,得到主成分种类与重要指标的线性组合:4321375.0395.0398.0375.01x x x x z +++= (10)prod 连乘积for k=1:100p(k)=1-prod(365-k+1:365)/365^k;endfplot('f(x)',[xmin,xmax,ymin,ymax]) syms xint(f(x), x,a,b)Polyval 计算对多项式p(x)=1+2*x+3*x^2,计算在x=5,7,9的值。

>> p = [3 2 1];>> x=[5,7,9];>> polyval(p,[5 7 9])%结果为ans =86 162 262Polyfit 拟合曲线x=[1,2,4,7,9,12,13,15,17]';F=[1.5,3.9,6.6,11.7,15.6,18.8,19.6,20.6,21.1]';plot(x,F,'.')%从图像上我们发现:前5个数据应与直线拟合,后5个数据应与二次曲线拟合。

于是键入 : a=polyfit(x(1:5),F(1:5),1); a=polyfit(x(5:9),F(5:9),2)生日概率模型for n=1:100p(n)=1-prod(365-n+1:365)/365^n;endplot(p)c5=polyfit(n,p,5)c5 =-0.0000 0.0000 -0.0001 0.0023 -0.0046 -0.0020该多项式即为:0020.00046.00023.00001.00023456524334251--+-+=+++++x x x x x c x c x c x c x c x c 在Matlab 环境下继续键入下列指令:>> p5=polyval(c5,n); ////////用多项式近似计算100个概率值>> plot(n,p,n,p5,'.') ////////画出拟合多项式的图象与概率曲线作比较interrep1x0=[0,3,5,7,9,11,12,13,14,15]';y0=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6]'plot(x0,y0) %完成第一步工作x=0:0.1:15;y=interp1(x0,y0,’x'); %用分段线性插值完成第二步工作plot(x,y)y=spline(x0,y0,’x');←plot(x,y) %用三次样条插值完成第二步工作指数模型t=1790:10:1980;x(t)=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 ];y=log(x(t));a=polyfit(t,y,1)r=a(1),x0=exp(a(2))x1=x0.*exp(r.*t);plot(t,x(t),'r',t,x1,'b')%%%%%%阻滞增长模型(或 Logistic 模型)%%%%%%%%%%建立函数文件curvefit_fun2.mfunction f=curvefit_fun2 (a,t)f=a(1)./(1+(a(1)/3.9-1)*exp(-a(2)*(t-1790)));在命令文件main.m中调用函数文件curvefit_fun2.m% 定义向量(数组)x=1790:10:1990;y=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76 ...92 106.5 123.2 131.7 150.7 179.3 204 226.5 251.4];plot(x,y,'*',x,y); % 画点,并且画一直线把各点连起来hold on;a0=[0.001,1]; % 初值% 最重要的函数,第1个参数是函数名(一个同名的m文件定义),第2个参数是初值,第3、4个参数是已知数据点a=lsqcurvefit('curvefit_fun2',a0,x,y);disp(['a=' num2str(a)]); % 显示结果% 画图检验结果xi=1790:5:2020;yi=curvefit_fun2(a,xi);plot(xi,yi,'r');% 预测2010年的数据x1=2010;y1=curvefit_fun2(a,x1)hold off回归分析←设回归模型为 y=β0+β1x,←在MATLAB命令窗口中键入下列命令进行回归分析(px_reg11.m)x=0.1:0.01:0.18;x=[x,0.2,0.21,0.23]';y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]';X=[ones(12,1),x]; %一元回归[b,bint,r,rint,stats]=regress(y,X,0.05);b,bint,stats,rcoplot(r,rint)←得结果和图←b =← 27.0269← 140.6194←bint =← 22.3226 31.7313← 111.7842 169.4546←stats =← 0.9219 118.0670 0.0000 3.1095←结果含义为←β0=27.0269 β1=140.6194←β0的置信区间是 [22.3226,31.7313]←β1的置信区间是 [111.7842,169.4546]←R2=0.9219 F=118.0670, p<10-4.←R是衡量y与x的相关程度的指标,称为相关系数。

matlab数学建模程序代码

matlab数学建模程序代码
当进行数学建模时,MATLAB是一个强大的工具,用于实现和测试模型。

下面是一个简单的MATLAB代码示例,演示如何使用MATLAB进行一维线性回归建模:
```matlab
%生成示例数据
x=[1,2,3,4,5];
y=[2.8,3.9,4.8,5.5,6.3];
%进行一维线性回归
coefficients=polyfit(x,y,1);
slope=coefficients(1);
intercept=coefficients(2);
%绘制原始数据和回归线
scatter(x,y,'o','DisplayName','原始数据');
hold on;
plot(x,polyval(coefficients,x),'r-','DisplayName','回归线');
hold off;
%添加标签和图例
xlabel('X轴');
ylabel('Y轴');
title('一维线性回归建模示例');
legend('show');
%输出回归方程的系数
fprintf('回归方程:y=%.2fx+%.2f\n',slope,intercept);
```
此代码生成了一些示例数据,然后使用一维线性回归对数据进行建模。

回归方程的系数将被计算,并且原始数据与回归线将在图上显示。

请注意,这只是一个简单的示例,实际上,你可能需要根据你的具体问题修改代码。

数学建模与数学实验第五版代码

数学建模与数学实验第五版代码数学建模与数学实验是一门重要的学科,它将数学方法应用于实际问题的解决过程中。

通过数学建模与数学实验的学习,我们可以培养创新思维、数学分析能力和计算能力等重要的数学技能。

在数学建模与数学实验第五版中,我们将学习到各种数学建模方法和相关的代码实现。

下面我将介绍一些常用的数学建模方法以及对应的代码示例。

第一种数学建模方法是线性规划,它是一种用于求解线性目标函数的优化问题的方法。

代码示例如下:```pythonfrom scipy.optimize import linprogc = [-1, -1] #目标函数的系数A = [[2, 1], [-1, 2], [0, 1]] #约束条件的系数矩阵b = [6, 4, 3] #约束条件的取值res = linprog(c, A_ub=A, b_ub=b)print(res)```第二种数学建模方法是最小二乘法,它是一种用于拟合实验数据的方法。

代码示例如下:```pythonimport numpy as npx = np.array([1, 2, 3, 4, 5]) #自变量y = np.array([2.1, 3.9, 6.1, 8.2, 9.9]) #因变量#拟合多项式函数coefficients = np.polyfit(x, y, 2)print(coefficients)#拟合指数函数coefficients = np.polyfit(x, np.log(y), 1)print(coefficients)```第三种数学建模方法是蒙特卡洛模拟,它是一种通过随机抽样的方法来估计概率分布或函数值的方法。

代码示例如下:```pythonimport numpy as np#生成服从正态分布的随机数mean = 0std = 1samples = np.random.normal(mean, std, 10000)print(samples)#计算样本均值和方差mean = np.mean(samples)variance = np.var(samples)print(mean, variance)```以上是数学建模与数学实验第五版中介绍的一些数学建模方法和对应的代码示例。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

插值% 产生原始数据x=0:0.1:1;y=(x.^2-3*x+7).*exp (-4*x).*sin (2*x);% 线性插值xx=0:0.01:1;y1=interp1 (x,y,xx,'linear');subplot (2,2,1)plot (x,y,'o',xx,y1);title ('线性插值');% 最邻近点插值y2=interp1 (x,y,xx,'nearest');subplot (2,2,2)plot (x,y,'o',xx,y2);title ('最邻近点插值');% 三次插值y3=interp1 (x,y,xx,'cubic');subplot (2,2,3)plot (x,y,'o',xx,y3);title ('三次插值');% 三次样条插值y4=interp1 (x,y,xx,'spline');subplot (2,2,4)plot (x,y,'o',xx,y4);title ('三次样条插值');% 插值基点为网格节点clear ally=20:-1:0;x=0:20;z=[0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.3 0.2 0.3 0.2 0.1 0.2 0.2 0.4 0.3 0.2 0.20.2 0.2;0.3 0.2 0.2 0.2 0.2 0.4 0.3 0.3 0.3 0.3 0.4 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.3 0.20.2;0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.6 0.5 0.4 0.4 0.20.2;0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.3 0.2 0.2 0.2 0.7 0.3 0.6 0.6 0.30.4;0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.2 0.2 0.6 0.2 0.8 0.7 0.9 0.5 0.50.4;0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.2 0.2 0.5 0.3 0.6 0.6 0.8 0.7 0.60.5;0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.4 0.2 0.7 0.5 0.9 0.7 0.4 0.9 0.80.3;0.2 0.2 0.9 1.1 1.2 1.2 1.1 1.1 0.6 0.3 0.5 0.3 0.2 0.4 0.3 0.7 1 0.7 1.2 0.80.4;0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.4 0.3 0.5 0.5 0.8 1.1 0.8 1.1 0.90.3;0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.4 0.6 0.6 0.3 0.6 1.2 0.8 1 0.80.5;0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.6 0.4 0.5 0.4 1 1.3 0.9 0.9 10.8;0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.5 0.5 0.8 0.6 0.9 1 0.5 0.8 0.80.9;0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.3 0.6 0.4 0.6 1 1 0.6 0.9 10.7;0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.4 0.4 0.5 0.4 1.1 1.3 0.7 1 0.70.6;0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.3 0.5 0.5 0.3 0.9 1.2 0.8 1 0.80.4;0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.5 0.4 0.2 0.5 0.5 1.3 0.6 1 0.90.3;0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.8 0.3 0.2 0.2 0.8 1.3 0.9 0.8 0.80.4;0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.4 0.3 0.2 0.4 0.3 0.8 0.6 0.7 0.40.4;0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.5 0.7 0.4 0.4 0.30.3;0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.2 0.4 0.3 0.6 0.5 0.3 0.3 0.30.2;0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.7 0.4 0.2 0.4 0.50.5];% 未插值直接画图figure (1) % 创建图形窗口1,并激活surf (x,y,z);shading flat % 用shading flat命令,使曲面变的光滑title ('未插值地形图')xlabel ('横坐标')ylabel ('纵坐标')zlabel ('高度')% 三次插值后画图% 画地形图figure (2)xi=0:0.05:20;yi=20:-0.05:0;zi=interp2 (x,y,z,xi',yi,'cubic'); %'cubic'三次插值surfc (xi,yi,zi); % 底面带等高线shading flattitle ('插值后地形图')xlabel ('横坐标')ylabel ('纵坐标')zlabel ('高度')% 画立体等高线图figure (3)contour3 (xi,yi,zi);title ('立体等高线图')xlabel ('横坐标')ylabel ('纵坐标')zlabel ('高度')% 画等高线图figure (4)[c,h]=contour (xi,yi,zi);clabel (c,h); % 用于为2维等高线添加标签colormap cool % 冷色调title ('平面等高线图')xlabel ('横坐标')ylabel ('纵坐标')ge回归拟合function yhat=Logisfun (beta,x)yhat=beta (1)./(1+(beta (1)/beta(2)-1).*exp (-beta(3).*x));clear ally=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9...76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4 281.4]';x=(1:22)';beta0=[400,3.0,0.20]';% 非线性回归'Logisfun'为回归模型[beta,r,j]=nlinfit (x,y,'Logisfun',beta0);% beta0为回归系数初始迭代点% beta为回归系数% r为残差% 输出拟合表达式:fprintf ('回归方程为y=%5 .4f/(1+%5 .4f*exp (-%5.4f*x))\n',beta (1),beta (1)/beta(2)-1,beta (3)) % 求均方误差根:精选文库rmse=sqrt (sum (r.^2)/22);rmse% 预测和误差估计:[Y,DELTA]=nlpredci ('Logisfun',x,beta,r,j);% DELTA为误差限% Y为预测值(拟合后的表达式求值)plot (x,Y,x,y,'o',x,Y+DELTA,':',x,Y-DELTA,':')% lny=lna+bxclear ally=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];% Y为列向量Y=log (y');x=1:12;% X为两列X=[ones (12,1),x'];[b,bint,r,rint,stats]=regress (Y,X);% b为参数的点估计disp ('b为参数的点估计')b% bint为参数的区间估计disp ('bint为参数的区间估计')bint% stats (1)为相关系数越接近1回归方程越显著disp ('stats (1)')stats (1)% stats (2)为F值越大回归越显著disp ('stats (2)')stats (2)% stats (3)为与F对应的概率P P<a时模型成立disp ('stats (3)')stats (3)% 求均方误差根RMSEa=exp (b (1));yy=a.*exp (b (2).*x);rmse=sqrt (sum ((yy-y).^2)/12);disp ('rmse')rmse% 写出表达式fprintf ('回归方程为y=%5 .4f*exp (%5 .4fx)',a,b (2))% 做回归图像figure (1)plot (x,y,'o',x,yy)% 做参差图精选文库figure (2)rcoplot (r,rint)% 先把所有的红线点蓝,再点All steps键,变红的量就是要剔除的量x1=[7 1 11 11 7 11 3 1 2 21 1 11 10]';x2=[26 29 56 31 52 55 71 31 54 47 40 66 68]';x3=[6 15 8 8 6 9 17 22 18 4 23 9 8]';x4=[60 52 20 47 33 22 6 44 22 26 34 12 12]';X=[x1 x2 x3 x4];Y=[78.5 74.3 104.3 87.6 95.9 109.2 102.7 72.5 93.1 115.9 83.8 113.3 109.4]';stepwise (X,Y)神经网络% 利用神经网络进行函数逼近clear allx=0:0.1*pi:4*pi;y=sin (x);% 设定迭代次数net.trainparam.epochs=10000;% 网络初始化net=newff ([0,4*pi],[8,8,8,8,1],{'tansig','logsig','logsig','tansig','tansig'});% 训练网络[net,tr,y1,e]=train (net,x,y);X=0:0.01*pi:4*pi;% 网络泛化y2=sim (net,X);subplot (2,1,2);plot (X,y2);title ('网络产生')grid onsubplot (2,1,1);plot (x,y,'o');title ('原始数据')grid on% 利用神经网络进行分类clear allx=[1.24 1.36 1.38 1.38 1.38 1.40 1.48 1.54 1.56 1.14 1.18 1.20 1.26 1.28 1.30;...1.72 1.74 1.64 1.82 1.90 1.70 1.82 1.822.08 1.78 1.96 1.86 2.0 2.0 1.96];y=[1 1 1 1 1 1 1 1 1 0 0 0 0 0 0;...0 0 0 0 0 0 0 0 0 1 1 1 1 1 1];xmin1=min (x (1,:));xmax1=max (x (1,:));xmin2=min (x (2,:));xmax2=max (x (2,:));% 设定迭代次数net.trainparam.epochs=10000;% 网络初始化net=newff ([xmin1,xmax1;xmin2,xmax2],[8,8,8,8,2],{'tansig','logsig','logsig','tansig','tansig'}); % 训练网络[net,tr,y1,e]=train (net,x,y);X=[1.24 1.28 1.40;...1.80 1.842.04];% 网络泛化y2=sim (net,X)plot (x (1,1:9),x (2,1:9),'o',x (1,10:15),x (2,10:15),'*',X (1,:),X (2,:),'v')grid on数值积分与函数极值实验% 一重积分% 求利用符号函数求理论值syms x;y=exp (-x^2); % 被积函数s=int (y,x,0,1); % 调用int函数v=vpa (s); % 将符号表达式转化为数值% 利用quad函数进行数值积分f1=inline ('exp (-x.^2)','x'); % 被积函数y1=quad (f1,0,1);% 二重积分f2=inline ('exp ((-x.^2)/2).*sin (x.^2+y)','x','y');y2=dblquad (f2,-2,2,-1,1);% 三重积分f3=inline ('4*x.*z.*exp (-(x.^2).*y-z.^2)','x','y','z');y3=triplequad (f3,0,2,0,pi,0,pi);clear allsyms x;y=(x^2-1)^3+1;y1=diff (y,x); % y对x求一阶导y2=diff (y,x,2); % y对x求二阶导subplot (3,1,1); % 把图形窗口分成3*1部分,并激活第1部分ezplot (y,[-1.5,1.5]); % 对符号函数在[-1.5,1.5]上绘图subplot (3,1,2);ezplot (y1,[-1.5,1.5]);subplot (3,1,3);ezplot (y2,[-1.5,1.5]);% 通过导数为0的点求最值x0=solve ('6*(x^2-1)^2*x=0','x'); % 求解一阶导数(从workspace中得到)为0的点y0=subs (y,x,x0); % 把x0带入y中的x[ymin1,n]=min (eval (y0)); % 求y0的最小值xmin1=x0 (n);% 通过fminbnd求函数最值f=inline ('(x^2-1)^3+1','x');xmin2=fminbnd (f,-1.5,1.5); % 在[-1.5,1.5]上求f函数的最小值点ymin2=f (xmin2);无约束优化clear all% 无约束优化的经典算法与非经典算法比较% 使用rosenbrock函数,理论极值为0if exist ('rosenbrock.m')==0disp ('没有为方程创建名为rosenbrock.m的函数文件,请建立它');end% 画图[x,y]=meshgrid (-1:0.05:1,-1:0.05:1);z=100*(y-x.^2).^2+(1-x).^2;surf (x,y,z)% 经典算法:[x1,fval1,exitflag1,output1]=fminunc ('rosenbrock',[0,0]);% 初始点为(0,0)% x为解% fval为目标函数x处的值% exitflag>0表示函数已收敛到x处% output中:Iterations表示迭代次数% Algorithm表示采用算法% FuncCount表示函数评价次数% 遗传算法% 调整最大允许的代数1万代,种群规模为200options=gaoptimset ('Generations',10000,'PopulationSize',200);% 设置两个变量,限制0<=x1,x2<=2[x2,fval2,exitflag2,output2]=ga (@rosenbrock,2,[1,0;0,1;-1,0;0,-1],[2;2;0;0],[],[],[],[],[],options); % exiflag>0表示求解成功function y=rosenbrock (x)y=100*(x (2)-x (1).^2).^2+(1-x (1)).^2;通用function [s,c]=circle (r) % 注意此文件名一定要为circle.m% CIRCLE 计算半径为r的圆面积与周长%[s,c]=circle (r)% r圆半径,s圆面积,c圆周长%2008 年9月19日编写s=pi*r*r;c=2*pi*r;function [s,c]=circle (r) % 注意此文件名一定要为circle.m% CIRCLE 计算半径为r的圆面积与周长%[s,c]=circle (r)% r圆半径,s圆面积,c圆周长%2008 年9月19日编写s=pi*r*r;c=2*pi*r;追击仿真function y=f (x)if x==1y=2;endif x==2y=3;endif x==3y=4;endif x==4y=1;end% 四人追逐问题实验% f.m文件用于调节追击次序即第一人追第二人,第二人追第三人,第三人追第四人,第四人追第五人D=2; % 最小距离v=10; % 速度dt=0.1; % 时间间隔x=zeros (4,103); % 四个人的横坐标y=zeros (4,103); % 四个人的纵坐标x (1,1)=100;y (1,1)=0; % 第一个人的初始坐标(100,0)x (2,1)=0;y (2,1)=0; % 第二个人的初始坐标(0,0)x (3,1)=0;y (3,1)=100; % 第三个人的初始坐标(0,100)x (4,1)=100;y (4,1)=100; % 第四个人的初始坐标(100,100)k=1;t=0;% 追击模拟while (sqrt ((x (1,k)-x (2,k))^2+(y (1,k)-y (2,k))^2)>D)k=k+1;t=t+dt;for i=1:4d=sqrt ((x (f (i),k-1)-x (i,k-1))^2+(y (f (i),k-1)-y (i,k-1))^2); % 两人距离cosx=(x (f (i),k-1)-x (i,k-1))/d;sinx=(y (f (i),k-1)-y (i,k-1))/d;x (i,k)=x (i,k-1)+v*cosx*dt; % 求新的x坐标y (i,k)=y (i,k-1)+v*sinx*dt; % 求新的y坐标endend% 描绘追击图像for i=1:kplot (x (1,i),y (1,i),'o',x (2,i),y (2,i),'*',x (3,i),y (3,i),'o',x (4,i),y (4,i),'*')pause (0.01);hold onend动态规划clear allclc% max z=g1 (x1)+g2 (x2)+g3 (x3)% x1+x2+x3=n;0<=xi<=n% 算法:突出阶段的动态规划% f1 (x)=g1 (x) 0<=x<=n% fi (x)=max {gi (y)+fi-1(x-y)} 0<=x<=n,0<=y<=n% 数据结构n=7;% 总金额m=3;% 阶段数income=[0,0.11,0.13,0.15,0.21,0.24,0.30,0.35;0,0.12,0.16,0.21,0.23,0.25,0.24,0.34;0,0.08,0.12,0.2,0.24,0.26,0.30,0.35];% 三个项目的收益income (k,i) k阶段投资i-1的收益f=zeros (3,8);% f (k,i) 当前投资i-1最大收益a=zeros (3,8);% a (i,j) 前i个工程投资j-1所获得最大利润时,给i项目的投资f (1,:)=income (1,:);a (1,:)=[0,1,2,3,4,5,6,7];% 动态规划for k=2:m % 阶段for j=0:n % 到本阶段为止总投资量for i=0:j % 前一阶段投资量if f (k-1,i+1)+income (k,j-i+1)>=f (k,j+1)f (k,j+1)=f (k-1,i+1)+income (k,j-i+1);a (k,j+1)=j-i;% 本阶段投资量end % ifend % forend % forend % for% 出结果f (m,n+1)out=n+1;for i=m:-1:1a (i,out)out=out-a (i,out);end % for残缺棋盘function [board,amount]=cover (i,j,k,l,board,size,amount)% (i,j)为左上角(k,l)残缺size为规模amount为片数if size==1returnendamount=amount+1;size=size/2;if (k<size+i)&(l<size+j)% 残缺位于左上棋盘board (size+i-1,size+j)=amount;board (size+i,size+j)=amount;board (size+i,size+j-1)=amount;% 放置[board,amount]=cover (i,j,k,l,board,size,amount);[board,amount]=cover (i,j+size,size+i-1,j+size,board,size,amount);[board,amount]=cover (size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover (i+size,j,i+size,j+size-1,board,size,amount);elseif (k>=size+i)&(l<size+j)% 残缺位于左下棋盘board (size+i-1,size+j)=amount;board (size+i,size+j)=amount;board (size+i-1,size+j-1)=amount;% 放置[board,amount]=cover (i+size,j,k,l,board,size,amount);[board,amount]=cover (i,j+size,size+i-1,j+size,board,size,amount);[board,amount]=cover (size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover (i,j,i+size-1,j+size-1,board,size,amount);elseif (k<size+i)&(l>=size+j)% 残缺位于右上棋盘board (size+i,size+j-1)=amount;board (size+i,size+j)=amount;board (size+i-1,size+j-1)=amount;% 放置[board,amount]=cover (i,j+size,k,l,board,size,amount);[board,amount]=cover (i,j,i+size-1,j+size-1,board,size,amount);精选文库[board,amount]=cover (size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover (i+size,j,i+size,j+size-1,board,size,amount);elseif (k>=size+i)&(l>=size+j)% 残缺位于右下棋盘board (size+i,size+j-1)=amount;board (size+i-1,size+j)=amount;board (size+i-1,size+j-1)=amount;% 放置[board,amount]=cover (size+i,size+j,k,l,board,size,amount);[board,amount]=cover (i,j+size,size+i-1,j+size,board,size,amount);[board,amount]=cover (i,j,i+size-1,j+size-1,board,size,amount);[board,amount]=cover (i+size,j,i+size,j+size-1,board,size,amount);endend% 残缺棋盘board=zeros (100,100);n=4;size=2^n;amount=0;[board,amount]=cover (1,1,2,5,board,size,amount);board (1:size,1:size)广度优先搜索function y=check (i,j,maze)if (i<=8)&(j<=8)&(i>=1)&(j>=1)y=1;elsey=0;returnendif maze (i,j)==1|maze (i,j)==-1y=0;returnendclear allclcmaze=[0,0,0,0,0,0,0,0;0,1,1,1,1,0,1,0;0,0,0,0,1,0,1,0;0,1,0,0,0,0,1,0;0,1,0,1,1,0,1,0;0,1,0,0,0,0,1,1;0,1,0,0,1,0,0,0;0,1,1,1,1,1,1,0];% 迷宫:0为路,1为墙,-1为遍历过fx (1:4)=[1,-1,0,0];fy (1:4)=[0,0,-1,1];精选文库sq.pre=zeros (1,100);sq.x=zeros (1,100);sq.y=zeros (1,100);qh=0;% 队头指针qe=1;% 队尾指针maze (1,1)=-1;% 第一个元素入队sq.pre(1)=0;sq.x(1)=1;sq.y(1)=1;while qh-qe~=0qh=qh+1;bb=0;for k=1:4i=sq.x(qh)+fx (k);j=sq.y(qh)+fy (k);if check (i,j,maze)==1qe=qe+1;% 入队sq.x(qe)=i;sq.y(qe)=j;sq.pre(qe)=qh;maze (i,j)=-1;if i==8&j==8% 如果为图最后一个点while qe~=0sq.x(qe)sq.y(qe)qe=sq.pre(qe);endbb=1;break;end % ifend % ifendif bb==1breakendend % while回溯n皇后function [chess,row,main,deputy,number]=justtry (i,n,chess,row,main,deputy,number);for k=1:8if row (k)==0&main (i-k+n)==0&deputy (i+k-1)==0% 此棋盘可继续放子chess (i,k)=1;row (k)=1;main (i-k+n)=1;deputy (i+k-1)=1;if i==8% 如果棋盘搜索结束number=number+1chesselse % 没有结束继续深搜[chess,row,main,deputy,number]=justtry (i+1,n,chess,row,main,deputy,number);% 递归endchess (i,k)=0;% 回溯row (k)=0;main (i-k+n)=0;deputy (i+k-1)=0;endendclear allclc% n皇后问题n=8;chess=zeros (n,n);row=zeros (1,n);% 记录n列被占用的情况main=zeros (1,2*n-1);% 记录主对角线的使用情况deputy=zeros (1,2*n-1);% 记录从对角线的使用情况number=0;[chess,row,main,deputy,number]=justtry (1,n,chess,row,main,deputy,number);密宫所有路clear allclcmaze=[0,0,0,0,0,0,0,0;0,1,1,1,1,0,1,0;0,0,0,0,1,0,1,0;0,1,0,0,0,0,1,0;0,1,0,1,1,0,1,0;0,1,0,0,0,0,1,1;0,1,0,0,1,0,0,0;0,1,1,1,1,1,1,0];% 迷宫:0为路,1为墙,2为遍历过total=0;maze (1,1)=2;[total,maze]=search (1,1,maze,total);function [total,maze]=search (i,j,maze,total);fx (1:4)=[1,0,-1,0];fy (1:4)=[0,1,0,-1];for k=1:4newi=i+fx (k);newj=j+fy (k);if (newi<=8)&(newj<=8)&(newi>=1)&(newj>=1)&maze (newi,newj)==0maze (newi,newj)=2;% 此点已走if newi==8&newj==8mazeelse[total,maze]=search (newi,newj,maze,total);end % if i+fx (k)==8&j+fy (y)==8maze (newi,newj)=0;% 回溯end % if (newi<=8)&(newj<=8)&(newi>=1)&(newj>=1)&maze (newi,newj)==0end % for k=1:4end排列树的回溯搜索function [chess,main,deputy,number]=justtry (i,n,chess,main,deputy,number);if i==9number=number+1chesselsefor k=i:8if main (i-chess (k)+n)==0&deputy (i+chess (k)-1)==0% 此棋盘可继续放子(主,副对角线可放子)t=chess (k);% 交换chess (k)=chess (i);chess (i)=t;main (i-chess (k)+n)=1;deputy (i+chess (k)-1)=1;[chess,main,deputy,number]=justtry (i+1,n,chess,main,deputy,number);% 递归t=chess (k);% 回溯chess (k)=chess (i);chess (i)=t;main (i-chess (k)+n)=0;deputy (i+chess (k)-1)=0;endendendend % functionclear allclc% n皇后问题n=8;chess=zeros (1,n);for i=1:n % 排列树chess (i)=i;endmain=zeros (1,2*n-1);% 记录主对角线的使用情况deputy=zeros (1,2*n-1);% 记录从对角线的使用情况[chess,main,deputy,number]=justtry (1,n,chess,main,deputy,number);。

相关文档
最新文档