数学建模代码汇总复习进程
数学建模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代码,当然,数学建模的过程非常复杂,需要综合运用多种技术和工具。
matlab数学建模程序代码
matlab数学建模程序代码【实用版】目录1.MATLAB 数学建模概述2.MATLAB 数学建模程序代码的基本结构3.常用的 MATLAB 数学建模函数和命令4.MATLAB 数学建模程序代码的编写流程5.MATLAB 数学建模程序代码的示例正文一、MATLAB 数学建模概述MATLAB(Matrix Laboratory)是一款强大的数学软件,广泛应用于数学建模、数据分析、可视化等领域。
通过 MATLAB,用户可以方便地进行数学计算、编写程序以及绘制图表等。
在数学建模领域,MATLAB 为研究人员和工程师提供了丰富的工具箱和函数,使得数学模型的构建、求解和分析变得更加简单高效。
二、MATLAB 数学建模程序代码的基本结构MATLAB 数学建模程序代码通常分为以下几个部分:1.导入 MATLAB 库:在建模过程中,可能需要使用 MATLAB 提供的某些库或工具箱,需要在代码开头进行导入。
2.定义变量和参数:在建模过程中,需要定义一些变量和参数,用于表示模型中的各个要素。
3.建立数学模型:根据实际问题,编写相应的数学表达式或方程,构建数学模型。
4.求解模型:通过调用 MATLAB 内置函数或使用自定义函数,对数学模型进行求解。
5.分析结果:对求解结果进行分析,提取所需的信息,例如计算均值、方差等统计量。
6.可视化结果:使用 MATLAB 绘制图表,将结果以直观的形式展示出来。
三、常用的 MATLAB 数学建模函数和命令MATLAB 提供了丰富的数学建模函数和命令,例如:1.线性规划:使用`linprog`函数求解线性规划问题。
2.非线性规划:使用`fmincon`或`fsolve`函数求解非线性规划问题。
3.优化问题:使用`optimize`函数求解优化问题。
4.数据处理:使用`mean`、`std`等函数对数据进行统计分析。
5.图表绘制:使用`plot`、`scatter`等函数绘制各种图表。
数学建模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大于零,则方程有两个实根。
●然后,根据判别式的值,分别计算出方程的根。
数学建模计算代码
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 =(根据您的最大公约数改编的这个程序结果是零,不知道什么原因)。
数学建模代码
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以上代码只是简单示例,实际应用中可能需要根据具体问题进行调整和扩展。
数学建模常用算法程序
假设图G 权的邻接矩阵为0A ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=nn n n nn a a a a a a a a a A2122221112110 来存放各边长度,其中:0=ii a n i ,,2,1 =;∞=ij a j i ,之间没有边,在程序中以各边都不可能达到的充分大的数代替; ij ij w a = ij w 是j i ,之间边的长度,n j i ,,2,1, =。
对于无向图,0A 是对称矩阵,ji ij a a =。
Floyd 算法的基本思想是:递推产生一个矩阵序列n k A A A A ,,,,,10 ,其中),(j i A k 表示从顶点i v 到顶点j v 的路径上所经过的顶点序号不大于k 的最短路径长度。
计算时用迭代公式:)),(),(),,(min(),(111j k A k i A j i A j i A k k k k ---+=k 是迭代次数,n k j i ,,2,1,, =。
最后,当n k =时,n A 即是各顶点之间的最短通路值。
例10 用Floyd 算法求解例1。
矩阵path 用来存放每对顶点之间最短路径上所经过的顶点的序号。
Floyd 算法的Matlab 程序如下: clear; clc;M=10000;a(1,:)=[0,50,M,40,25,10];a(2,:)=[zeros(1,2),15,20,M,25]; a(3,:)=[zeros(1,3),10,20,M]; a(4,:)=[zeros(1,4),10,25]; a(5,:)=[zeros(1,5),55]; a(6,:)=zeros(1,6);b=a+a';path=zeros(length(b)); for k=1:6 for i=1:6 for j=1:6if b(i,j)>b(i,k)+b(k,j)b(i,j)=b(i,k)+b(k,j); path(i,j)=k; end end end endb, pathFloyd 最短路算法的MATLAB 程序 %floyd.m%采用floyd 算法计算图a 中每对顶点最短路 %d 是矩离矩阵 %r 是路由矩阵function [d,r]=floyd(a) n=size(a,1); d=a; for i=1:n for j=1:n r(i,j)=j; end end rfor k=1:n for i=1:n for j=1:nif d(i,k)+d(k,j)<d(i,j) d(i,j)=d(i,k)+d(k,j); r(i,j)=r(i,k) end end end k d r end两个指定顶点之间的最短路径问题如下:给出了一个连接若干个城镇的铁路网络,在这个网络的两个指定城镇间,找一条最短铁路线。
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)```以上是数学建模与数学实验第五版中介绍的一些数学建模方法和对应的代码示例。
数学建模算法的matlab代码
二,hamiton回路算法提供一种求解最优哈密尔顿的算法---三边交换调整法,要求在运行jiaohuan3(三交换法)之前,给定邻接矩阵C和节点个数N,结果路径存放于R中。
bianquan.m文件给出了一个参数实例,可在命令窗口中输入bianquan,得到邻接矩阵C和节点个数N以及一个任意给出的路径R,,回车后再输入jiaohuan3,得到了最优解。
由于没有经过大量的实验,又是近似算法,对于网络比较复杂的情况,可以尝试多运行几次jiaohuan3,看是否能到进一步的优化结果。
%%%%%%bianquan.m%%%%%%%N=13;for i=1:Nfor j=1:NC(i,j)=inf;endendfor i=1:NC(i,i)=0;endC(1,2)=6.0;C(1,13)=12.9;C(2,3)=5.9;C(2,4)=10.3;C(3,4)=12.2;C(3,5)=17.6;C(4,13)=8.8;C(4,7)=7.4;C(4,5)=11.5;C(5,2)=17.6;C(5,6)=8.2;C(6,9)=14.9;C(6,7)=20.3;C(7,9)=19.0;C(7,8)=7.3;C(8,9)=8.1;C(8,13)=9.2;C(9,10)=10.3;C(10,11)=7.7;C(11,12)=7.2;C(12,13)=7.9;for i=1:Nfor j=1:Nif C(i,j) < infC(j,i)=C(i,j);endendendfor i=1:NC(i,i)=0;endR=[4 7 6 5 3 2 1 13 12 11 10 9 8];<pre name="code" class="plain">%%%%%%%%jiaohuan3.m%%%%%%%%%%n=0;for I=1:(N-2)for J=(I+1):(N-1)for K=(J+1):Nn=n+1;Z(n,:)=[I J K];endendendR=1:Nfor m=1:(N*(N-1)*(N-2)/6)I=Z(m,1);J=Z(m,2);K=Z(m,3); r=R;if J-I~=1&K-J~=1&K-I~=N-1 for q=1:(J-I)r(I+q)=R(J+1-q);endfor q=1:(K-J)r(J+q)=R(K+1-q);endendif J-I==1&K-J==1r(K)=R(J);r(J)=R(K);endif J-I==1&K-J~=1&K-I~=N-1 for q=1:(K-J)r(I+q)=R(I+1+q); endr(K)=R(J);endif K-J==1&J-I~=1&K~=Nfor q=1:(J-I)r(I+1+q)=R(I+q); endr(I+1)=R(K);endif I==1&J==2&K==Nfor q=1:(N-2)r(1+q)=R(2+q);endr(N)=R(2);endif I==1&J==(N-1)&K==Nfor q=1:(N-2)r(q)=R(1+q);endr(N-1)=R(1);endif J-I~=1&K-I==N-1for q=1:(J-1)r(q)=R(1+q);endr(J)=R(1);endif J==(N-1)&K==N&J-I~=1r(J+1)=R(N);for q=1:(N-J-1)r(J+1+q)=R(J+q);endendif cost_sum(r,C,N)<cost_sum(R,C,N)R=rendendfprintf('总长为%f\n',cost_sum(R,C,N))%%%%%%cost_sum.m%%%%%%%%functiony=cost_sum(x,C,N)y=0;for i=1:(N-1)y=y+C(x(i),x(i+1));endy=y+C(x(N),x(1));三,灰色预测代码<pre name="code" class="plain">clearclcX=[136 143 165 152 165 181 204 272 319 491 571 605 665 640 628];x1(1)=X(1);X1=[];for i=1:1:14x1(i+1)=x1(i)+X(i+1);X1=[X1,x1(i)];endX1=[X1,X1(14)+X(15)]for k=3:1:15p(k)=X(k)/X1(k-1);p1(k)=X1(k)/X1(k-1);endp,p1clear kZ=[];for k=2:1:15z(k)=0.5*X1(k)+0.5*X1(k-1);Z=[Z,z(k)];endZB=[-Z',ones(14,1)]Y=[];clear ifor i=2:1:15Y=[Y;X(i)];endYA=inv(B'*B)*B'*Yclear ky1=[];for k=1:1:15y(k)=(X(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1); y1=[y1;y(k)];endy1clear kX2=[];for k=2:1:15x2(k)=y1(k)-y1(k-1);X2=[X2;x2(k)];endX2=[y1(1);X2]e=X'-X2m=abs(e)./X's=e'*en=sum(m)/13clear ksyms ky=(X(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1)Y1=[];for j=16:1:21y11=subs(y,k,j)-subs(y,k,j-1);Y1=[Y1;y11];endY1%程序中的变量定义:alpha是包含α、μ值的矩阵;%ago是预测后累加值矩阵;var是预测值矩阵;%error是残差矩阵; c是后验差比值function basicgrey(x,m) %定义函数basicgray(x)if nargin==1 %m为想预测数据的个数,默认为1 m=1;endclc; %清屏,以使计算结果独立显示if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换x=x';endn=length(x); %取输入数据的样本量x1(:,1)=cumsum(x); %计算累加值,并将值赋及矩阵be for i=2:n %对原始数列平行移位 Y(i-1,:)=x(i,:);endfor i=2:n %计算数据矩阵B的第一列数据z(i,1)=0.5*x1(i-1,:)+0.5*x1(i,:);endB=ones(n-1,2); %构造数据矩阵BB(:,1)=-z(2:n,1);alpha=inv(B'*B)*B'*Y; %计算参数α、μ矩阵for i=1:n+m %计算数据估计值的累加数列,如改n+1为n+m可预测后m个值ago(i,:)=(x1(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1, :)*(i-1))+alpha(2,:)/alpha(1,:);endvar(1,:)=ago(1,:);f or i=1:n+m-1 %可预测后m个值var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下m个预测值end[P,c,error]=lcheck(x,var); %进行后验差检验[rela]=relations([x';var(1:n)']); %关联度检验ago %显示输出预测值的累加数列alpha %显示输出参数α、μ数列var %显示输出预测值error %显示输出误差P %显示计算小残差概率 c %显示后验差的比值crela %显示关联度judge(P,c,rela) %评价函数显示这个模型是否合格<pre name="code" class="plain">function judge(P,c,rela) %评价指标并显示比较结果if rela>0.6'根据经验关联度检验结果为满意(关联度只是参考主要看后验差的结果)'else'根据经验关联度检验结果为不满意(关联度只是参考主要看后验差的结果)'endif P>0.95&c<0.5'后验差结果显示这个模型评价为“优”'else if P>0.8&c<0.5'后验差结果显示这个模型评价为“合格”'else if P>0.7&c<0.65'后验差结果显示这个模型评价为“勉强合格”' else'后验差结果显示这个模型评价为“不合格”' endendendfunction [P,c,error]=lcheck(x,var)%进行后验差检验n=length(x);for i=1:nerror(i,:)=abs(var(i,:)-x(i,:)); %计算绝对残差c=std(abs(error))/std(x); %调用统计工具箱的标准差函数计算后验差的比值cs0=0.6745*std(x);ek=abs(error-mean(error));pk=0;for i=1:nif ek(i,:)<s0pk=pk+1;endendP=pk/n; %计算小残差概率%附带的质料里有一部分讲了关联度function [rela]=relations(x)%以x(1,:)的参考序列求关联度[m,n]=size(x);for i=1:mfor j=n:-1:2x(i,j)=x(i,j)/x(i,1);endfor i=2:mx(i,:)=abs(x(i,:)-x(1,:)); %求序列差endc=x(2:m,:);Max=max(max(c)); %求两极差Min=min(min(c));p=0.5; %p称为分辨率,0<p<1,一般取p=0.5for i=1:m-1for j=1:nr(i,j)=(Min+p*Max)/(c(i,j)+p*Max); %计算关联系数endendfor i=1:m-1rela(i)=sum(r(i,:))/n; %求关联度end四,非线性拟合function f=example1(c,tdata)f=c(1)*(exp(-c(2)*tdata)-exp(-c(3)*tdata));<pre name="code" class="plain">function f=zhengtai(c,x) f=(1./(sqrt(2.*3.14).*c(1))).*exp(-(x-c(1)).^2./(2.*c( 2)^2));x=1:1:12;y=[01310128212]';c0=[2 8];for i=1:1000c=lsqcurvefit(@zhengtai,c0,x,y);c0=c;endy1=(1./(sqrt(2.*3.14).*c(1))).*exp(-(x-c(1)).^2./(2.*c (2)^2));plot(x,y,'r-',x,y1);legend('实验数据','拟合曲线')x=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]';y=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4]';f=@(c,x)c(1)*(exp(-c(2)*x)-exp(-c(3)*x));c0=[114 0.1 2]';for i=1:50opt=optimset('TolFun',1e-3);[c R]=nlinfit(x,y,f,c0,opt)c0=c;hold onplot(x,c(1)*(exp(-c(2)*x)-exp(-c(3)*x)),'g')endt=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16];y=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4];c0=[1 1 1];for i=1:50 c=lsqcurvefit(@example1,c0,t,y);c0=c;endy1=c(1)*(exp(-c(2)*t)-exp(-c(3)*t));plot(t,y,' +',t,y1);legend('实验数据','拟合曲线')五,插值拟合相关知识在生产和科学实验中,自变量及因变量间的函数关系有时不能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表达式过于复杂而需要较大的计算量。
python在数学建模中常见算法及代码
python在数学建模中常见算法及代码在数学建模中,Python 是一种流行的编程语言,有许多用于解决不同数学建模问题的库和算法。
以下是一些在数学建模中常见的算法及其对应的 Python 代码示例:1.线性规划:•使用scipy库中的linprog函数:pythonfrom scipy.optimize import linprog c = [-3, 5] # 目标函数的系数 A = [[-1, 2], [4, 3]] # 不等式约束的系数 b = [8, 15] # 不等式约束的右侧值result = linprog(c, A_ub=A, b_ub=b) print("最小值:", result.fun) print("优化变量:", result.x)2.整数规划:•使用PuLP库:pythonfrom pulp import LpMaximize, LpProblem, LpVariable # 创建问题model = LpProblem(name="integer_programming_example",sense=LpMaximize) # 创建变量 x = LpVariable(name="x", lowBound=0, cat="Integer") y = LpVariable(name="y", lowBound=0, cat="Integer") # 添加目标函数和约束model += (2 * x + 4 * y <= 8, "constraint_1") model+= (5 * x + 3 * y <= 15, "constraint_2") model += (3 * x + 2 * y <= 7, "constraint_3") model += (4 * x + 2 * y <= 8, "constraint_4") model += (x + y >= 3, "constraint_5") model += 4 * x + 6 * y # 目标函数 # 解决问题model.solve() print("最优值:", model.objective.value()) print("最优解:") for var in model.variables(): print(f"{}: {var.value()}")3.数值积分:•使用scipy库中的quad函数:pythonfrom scipy.integrate import quad def integrand(x): return x**2 result, error = quad(integrand, 0, 1) print("数值积分结果:", result)这只是数学建模中一些常见问题的示例,具体问题和应用场景可能需要不同的算法和工具。
数学建模python代码
数学建模python代码下面将介绍几种常用的数学建模方法和对应的Python代码实现:1. 线性规划线性规划是一种通过线性目标函数和一组线性不等式或等式约束条件对决策变量进行优化的方法。
在Python中,可以使用pulp库实现线性规划模型的建立和求解。
例如,下面是一个简单的线性规划模型:```import pulp# 创建问题problem = pulp.LpProblem('linear programming', pulp.LpMaximize)# 创建目标函数problem += 3*x1 + 5*x2# 创建约束条件problem += x1 + x2 <= 100problem += 2*x1 + x2 <= 120# 解决问题status = problem.solve()# 输出结果print('x1 =', pulp.value(x1))print('x2 =', pulp.value(x2))print('最大值为:', pulp.value(problem.objective))``````import numpy as npfrom scipy.optimize import minimize# 定义目标函数def objective(x):return -np.log(x[0]) - np.log(x[1])# 定义初始值x0 = [0.5, 0.5]3. 插值插值是一种通过已知点来构造函数的方法。
在Python中,可以使用scipy库中的interpolate模块来实现插值。
例如,下面是一个简单的插值模型:# 定义已知函数x_known = np.array([0, 1, 2, 3, 4])y_known = np.array([0, 1, 4, 9, 16])# 定义插值函数f = interp1d(x_known, y_known, kind='linear')# 求解问题x_new = np.array([1.5, 2.5])y_new = f(x_new)# 输出结果print('插值结果为:', y_new)```4. 最小二乘法# 定义已知数据x_data = np.linspace(0, 2*np.pi, 50)y_data = 2*np.sin(2*x_data) + np.random.normal(0, 0.1, 50)# 拟合数据popt, pcov = curve_fit(func, x_data, y_data)。
数学建模常用模型及代码
数学建模常用模型及代码
一.规划模型
1.线性规划
线性规划与非线性规划问题一般都是求最大值和最小值,都是利用最小的有限资源来求最大利益等,一般都利用lingo工具进行求解。
点击进入传送门
2.整数规划
求解方式类似于线性规划,但是其决策变量x1,x2等限定都是整数的最优化问题。
传送门
3. 0-1规划
决策变量只能为0或者为1的一类特殊的整数规划。
n个人指派n项工作的问题。
传送门
4.非线性规划
目标函数或者存在约束条件函数是决策变量的非线性函数的最优化问题。
传送门
5.多目标规划
研究多于一个的目标函数在给定区域上的最优化。
把求一个单目标,在此单目标最优的情况下将其作为约束条件再求另外一个目标。
传送门
6.动态规划
运筹学的一个分支。
求解决策过程最优化的过程。
传送门
二. 层次分析法
是一种将定性和定量相结合的,系统化的,层次化的分析方法,主要有机理分析法和统计分析法。
传送门
三.主成分分析
指标之间的相关性比较高,不利于建立指标遵循的独立性原则,指标之间应该互相独立,彼此之间不存在联系。
传送门。
数学建模算法的matlab代码
数学建模算法的matlab代码句柄图形(图形窗口)二,hamiton回路算法提供一种求解最优哈密尔顿的算法---三边交换调整法,要求在运行jiaohuan3(三交换法)之前,给定邻接矩阵C和节点个数N,结果路径存放于R 中。
bianquan.m文件给出了一个参数实例,可在命令窗口中输入bianquan,得到邻接矩阵C和节点个数N以及一个任意给出的路径R,,回车后再输入jiaohuan3,得到了最优解。
由于没有经过大量的实验,又是近似算法,对于网络比较复杂的情况,可以尝试多运行几次jiaohuan3,看是否能到进一步的优化结果。
%%%%%%bianquan.m%%%%%%%N=13;for i=1:Nfor j=1:NC(i,j)=inf;endendfor i=1:NC(i,i)=0;endC(1,2)=6.0;C(1,13)=12.9;C(2,3)=5.9;C(2,4)=10.3;C(3,4)=12.2;C(3,5)=17.6;C(4,13)=8.8;C(4,7)=7.4;C(4,5)=11.5;C(5,2)=17.6;C(5,6)=8.2;C(6,9)=14.9;C(6,7)=20.3;C(7,9)=19.0;C(7,8)=7.3;C(8,9)=8.1;C(8,13)=9.2;C(9,10)=10.3;C(10,11)=7.7;C(11,12)=7.2;C(12,13)=7.9;for i=1:Nfor j=1:Nif C(i,j) < infC(j,i)=C(i,j);endendendfor i=1:NC(i,i)=0;endR=[4 7 6 5 3 2 1 13 12 11 10 9 8]; %%%%%%%%jiaohuan3.m%%%%%%%%%% n=0; for I=1:(N-2)for J=(I+1):(N-1)for K=(J+1):Nn=n+1;Z(n,:)=[I J K];endendendR=1:Nfor m=1:(N*(N-1)*(N-2)/6)I=Z(m,1);J=Z(m,2);K=Z(m,3);r=R;if J-I~=1&K-J~=1&K-I~=N-1for q=1:(J-I)r(I+q)=R(J+1-q);endfor q=1:(K-J)r(J+q)=R(K+1-q);endendif J-I==1&K-J==1r(K)=R(J);r(J)=R(K);endif J-I==1&K-J~=1&K-I~=N-1 for q=1:(K-J)r(I+q)=R(I+1+q);endr(K)=R(J);endif K-J==1&J-I~=1&K~=N for q=1:(J-I)r(I+1+q)=R(I+q);endr(I+1)=R(K);endif I==1&J==2&K==Nfor q=1:(N-2)r(1+q)=R(2+q);endr(N)=R(2);endif I==1&J==(N-1)&K==N for q=1:(N-2)r(q)=R(1+q);endr(N-1)=R(1);endif J-I~=1&K-I==N-1for q=1:(J-1)r(q)=R(1+q);endr(J)=R(1);endif J==(N-1)&K==N&J-I~=1r(J+1)=R(N);for q=1:(N-J-1)r(J+1+q)=R(J+q);endendif cost_sum(r,C,N)<cost_sum(r,c,n)< p="">R=rendendfprintf('总长为%f\n',cost_sum(R,C,N))%%%%%%cost_sum.m%%%%%%%%functiony=cost_sum(x,C,N)y=0;for i=1:(N-1) y=y+C(x(i),x(i+1));endy=y+C(x(N),x(1));三,灰色预测代码clearclcX=[136 143 165 152 165 181 204 272 319 491 571 605 665 640 628];x1(1)=X(1);X1=[];for i=1:1:14x1(i+1)=x1(i)+X(i+1);X1=[X1,x1(i)];endX1=[X1,X1(14)+X(15)]for k=3:1:15p(k)=X(k)/X1(k-1);p1(k)=X1(k)/X1(k-1);endp,p1clear kZ=[];for k=2:1:15z(k)=0.5*X1(k)+0.5*X1(k-1);Z=[Z,z(k)];endZB=[-Z',ones(14,1)]Y=[];clear ifor i=2:1:15Y=[Y;X(i)];endYA=inv(B'*B)*B'*Yclear ky1=[];for k=1:1:15y(k)=(X(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1); y1=[y1;y(k)];endy1clear kX2=[];for k=2:1:15x2(k)=y1(k)-y1(k-1);X2=[X2;x2(k)];endX2=[y1(1);X2]e=X'-X2m=abs(e)./X's=e'*en=sum(m)/13clear ksyms ky=(X(1)-A(2)/A(1))*exp(-A(1)*(k-1))+A(2)/A(1)Y1=[];for j=16:1:21y11=subs(y,k,j)-subs(y,k,j-1);Y1=[Y1;y11];endY1%程序中的变量定义:alpha是包含α、μ值的矩阵;%ago是预测后累加值矩阵;var是预测值矩阵;%error是残差矩阵; c是后验差比值function basicgrey(x,m) %定义函数basicgray(x)if nargin==1 %m 为想预测数据的个数,默认为1 m=1;endclc; %清屏,以使计算结果独立显示if length(x(:,1))==1 %对输入矩阵进行判断,如不是一维列矩阵,进行转置变换x=x';endn=length(x); %取输入数据的样本量x1(:,1)=cumsum(x); %计算累加值,并将值赋与矩阵be for i=2:n %对原始数列平行移位Y(i-1,:)=x(i,:);endfor i=2:n %计算数据矩阵B的第一列数据z(i,1)=0.5*x1(i-1,:)+0.5*x1(i,:);endB=ones(n-1,2); %构造数据矩阵BB(:,1)=-z(2:n,1);alpha=inv(B'*B)*B'*Y; %计算参数α、μ矩阵for i=1:n+m %计算数据估计值的累加数列,如改n+1为n+m可预测后m个值ago(i,:)=(x1(1,:)-alpha(2,:)/alpha(1,:))*exp(-alpha(1,:)*(i-1))+alpha(2,:)/alpha(1,:);endvar(1,:)=ago(1,:);for i=1:n+m-1 %可预测后m个值var(i+1,:)=ago(i+1,:)-ago(i,:); %估计值的累加数列的还原,并计算出下m个预测值end[P,c,error]=lcheck(x,var); %进行后验差检验[rela]=relations([x';var(1:n)']); %关联度检验ago %显示输出预测值的累加数列alpha %显示输出参数α、μ数列var %显示输出预测值error %显示输出误差P %显示计算小残差概率 c %显示后验差的比值crela %显示关联度judge(P,c,rela) %评价函数显示这个模型是否合格function judge(P,c,rela)%评价指标并显示比较结果if rela>0.6'根据经验关联度检验结果为满意(关联度只是参考主要看后验差的结果)' else'根据经验关联度检验结果为不满意(关联度只是参考主要看后验差的结果)' endif P>0.95&c<0.5'后验差结果显示这个模型评价为“优”'else if P>0.8&c<0.5'后验差结果显示这个模型评价为“合格”'else if P>0.7&c<0.65'后验差结果显示这个模型评价为“勉强合格”'else'后验差结果显示这个模型评价为“不合格”'endendendfunction [P,c,error]=lcheck(x,var)%进行后验差检验n=length(x);for i=1:nerror(i,:)=abs(var(i,:)-x(i,:)); %计算绝对残差endc=std(abs(error))/std(x); %调用统计工具箱的标准差函数计算后验差的比值cs0=0.6745*std(x);ek=abs(error-mean(error));pk=0;for i=1:nif ek(i,:)<s0< p="">pk=pk+1;endendP=pk/n; %计算小残差概率%附带的质料里有一部分讲了关联度function [rela]=relations(x)%以x(1,:)的参考序列求关联度[m,n]=size(x);for i=1:mfor j=n:-1:2x(i,j)=x(i,j)/x(i,1);endendfor i=2:mx(i,:)=abs(x(i,:)-x(1,:)); %求序列差endc=x(2:m,:);Max=max(max(c)); %求两极差Min=min(min(c));p=0.5; %p称为分辨率,0<p< p="">for i=1:m-1for j=1:nr(i,j)=(Min+p*Max)/(c(i,j)+p*Max); %计算关联系数endendfor i=1:m-1rela(i)=sum(r(i,:))/n; %求关联度end四,非线性拟合function f=example1(c,tdata)f=c(1)*(exp(-c(2)*tdata)-exp(-c(3)*tdata));function f=zhengtai(c,x)f=(1./(sqrt(2.*3.14).*c(1))).*exp(-(x-c(1)).^2./(2.*c(2)^2));x=1:1:12;y=[01310128212]';c0=[2 8];for i=1:1000c=lsqcurvefit(@zhengtai,c0,x,y);c0=c;endy1=(1./(sqrt(2.*3.14).*c(1))).*exp(-(x-c(1)).^2./(2.*c(2)^2));plot(x,y,'r-',x,y1);legend('实验数据','拟合曲线')x=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16]';y=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 18 15 12 10 7 7 4]';f=@(c,x)c(1)*(exp(-c(2)*x)-exp(-c(3)*x));c0=[114 0.1 2]';for i=1:50opt=optimset('TolFun',1e-3);[c R]=nlinfit(x,y,f,c0,opt)c0=c;hold onplot(x,c(1)*(exp(-c(2)*x)-exp(-c(3)*x)),'g')endt=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 1314 15 16];y=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 25 1815 12 10 7 7 4];c0=[1 1 1];for i=1:50 c=lsqcurvefit(@example1,c0,t,y);c0=c;endy1=c(1)*(exp(-c(2)*t)-exp(-c(3)*t));plot(t,y,'+',t,y1);legend('实验数据','拟合曲线')五,插值拟合相关知识在生产和科学实验中,自变量与因变量间的函数关系有时不能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表达式过于复杂而需要较大的计算量。
2023年数模c题代码
2023年数模c题代码2023年,数学建模竞赛已经成为了学生们最为热衷的比赛之一。
在这一年的数模竞赛中,C题成为了最具挑战性的题目之一。
这道题目要求参赛者设计一个代码,用于解决一个复杂的实际问题。
下面是一份2023年数模C题的代码示例:```pythonimport numpy as npimport pandas as pd# 读取数据data = pd.read_csv('data.csv')# 数据预处理# 去除缺失值data = data.dropna()# 特征工程# 提取特征feature1 = data['feature1']feature2 = data['feature2']feature3 = data['feature3']# 特征归一化feature1 = (feature1 - np.mean(feature1)) / np.std(feature1)feature2 = (feature2 - np.mean(feature2)) / np.std(feature2)feature3 = (feature3 - np.mean(feature3)) / np.std(feature3)# 构建模型# 初始化参数theta0 = 0theta1 = 0theta2 = 0theta3 = 0# 定义损失函数def loss_function(theta0, theta1, theta2, theta3):loss = 0for i in range(len(feature1)):loss += (theta0 + theta1 * feature1[i] + theta2 * feature2[i] + theta3 * feature3[i] - data['label'][i]) ** 2return loss / (2 * len(feature1))# 定义梯度下降函数def gradient_descent(theta0, theta1, theta2, theta3, learning_rate):new_theta0 = 0new_theta1 = 0new_theta2 = 0new_theta3 = 0for i in range(len(feature1)):new_theta0 += theta0 + theta1 * feature1[i] + theta2 * feature2[i] + theta3 * feature3[i] - data['label'][i]new_theta1 += (theta0 + theta1 * feature1[i] + theta2 * feature2[i] + theta3 * feature3[i] - data['label'][i]) * feature1[i]new_theta2 += (theta0 + theta1 * feature1[i] + theta2 * feature2[i] + theta3 * feature3[i] - data['label'][i]) * feature2[i]new_theta3 += (theta0 + theta1 * feature1[i] + theta2 * feature2[i] + theta3 * feature3[i] - data['label'][i]) * feature3[i]new_theta0 /= len(feature1)new_theta1 /= len(feature1)new_theta2 /= len(feature1)new_theta3 /= len(feature1)theta0 -= learning_rate * new_theta0theta1 -= learning_rate * new_theta1theta2 -= learning_rate * new_theta2theta3 -= learning_rate * new_theta3return theta0, theta1, theta2, theta3# 模型训练learning_rate = 0.01num_iterations = 1000for i in range(num_iterations):theta0, theta1, theta2, theta3 = gradient_descent(theta0, theta1, theta2, theta3, learning_rate)loss = loss_function(theta0, theta1, theta2, theta3)print('Iteration', i+1, ': Loss =', loss)# 输出模型参数print('theta0 =', theta0)print('theta1 =', theta1)print('theta2 =', theta2)print('theta3 =', theta3)```以上是一份用于解决2023年数模C题的代码示例。
数学建模中30道经典MATLAB程序
编程1、编写一程序,要求输入五个整数,然后由小到大排序再输出。
%输入n个数,然后由小到大输出a=input('输入数据:')n=length(a); %输入数据的长度i=1;j=1; %赋初值for i=1:n %需要进行n次比较for j=2:n %与相邻的进行n-1次比较if a(j-1)>a(j)b=a(j-1);a(j-1)=a(j);a(j)=b; %比较前者是否比后者大,大的就互换endendendfprintf(' %d',a) ;2、将一个整型数组的元素按逆序重新存放(如原序为:8,6,5,4改为4,5,6,8)。
function lin5a=input('输入数据:')n=length(a);%求输入a的长度for i=1:n/2b=a(i);a(i)=a(n+1-i);a(n+1-i)=b;endfprintf(' %d',a)3、输入一个字符,如果是大写字母,则将其转换成小写并输出,若是小写,则直接输出;若是非字母字符则打印:‘datarror’.function xin2a=input('输入数据:','s')if a>=65&a<=90fprintf('shuchu is %c\n',a+32);elseif a>=97&a<=122fprintf('shuchu is %c\n',a);elsea='dataerror';fprintf('shuchu is %s',a);end4、输入一个整数,写一程序输出它是几位数。
function lin6a=input('输入数据:','s')n=length(a)%求输入a的长度b=n;fprintf('weishu %d',b);end5、写一程序求1!+2!+ (10)function wi=1;j=1;s=0; %赋初值while i<=10j=j*i;s=s+j;i=i+1;endfprintf('s is %d\n',s);6、从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+……(共n项)的和。
数学建模中常用的模型,及程序
数学建模中常用的模型,及程序数学建模中常用的模型及程序:1灰色预测:程序一:先建立M文件:function GM1=fungry1(x0)T=input('T=');x1=zeros(1,length(x0));B=zeros(length(x0)-1,2);yn=zeros(length(x0)-1,1);Hatx0=zeros(1,length(x0)+T);Hatx00=zeros(1,length(x0));Hatx1=zeros(1,length(x0)+T);epsilon=zeros(length(x0),1);omega=zeros(length(x0),1);for i=1:length(x0)for j=1:ix1(i)=x1(i)+x0(j);endendfor i=1:length(x0)-1B(i,1)=(-1/2)*(x1(i)+x1(i+1));B(i,2)=1;yn(i)=x0(i+1);endHatA=(inv(B'*B))*B'*ynfor k=1:length(x0)+THatx1(k)=(x0(1)-HatA(2)/HatA(1))*exp(-HatA(1)*(k-1))+HatA(2)/HatA(1); endHatx0(1)=Hatx1(1);for k=2:length(x0)+THatx0(k)=Hatx1(k)-Hatx1(k-1);endfor i=1:length(x0)epsilon(i)=x0(i)-Hatx0(i);omega(i)=(epsilon(i)/x0(i))*100;end%x0,Hatx1,Hatx0,epsilon,omega,c=std(epsilon)/std(x0);p=0;for i=1:length(x0)if abs(epsilon(i)-mean(epsilon))<0.6745*std(x0)p=p+1;endendp=p/length(x0)if p>0.95 & c<0.35disp('The model is good and the forecast is :'), disp (Hatx0(length(x0)+T))elseif p>0.85 & c<0.5disp('The model is eligibility and the forecast is :'), disp (Hatx0(length(x0)+T))elseif p>0.70 & c<0.65disp('The model is not good and the forecast is :'), disp (Hatx0(length(x0)+T))else p<=0.70 & c>0.65disp('The model is bad and try again ')endfor i=1:length(x0)Hatx00(i)= Hatx0(i);endz=1:length(x0);plot(z,x0,'-',z,Hatx00,':')text(2,x0(2),'History data :real line')text(length(x0)/2,Hatx00(length(x0))/2,'Simulationdata :broken line')end在matlab命令窗口中输入:>> x0=[。
数学建模代码汇总复习进程
数学建模代码汇总复习进程数学建模代码汇总插值% 产生原始数据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.2 0.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.2 0.2;0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.30.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2;0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.30.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4;0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.20.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4;0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.20.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5;0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.40.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.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.8 0.4;0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.40.3 0.5 0.5 0.8 1.1 0.8 1.1 0.9 0.3;0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.40.6 0.6 0.3 0.6 1.2 0.8 1 0.8 0.5;0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.60.4 0.5 0.4 1 1.3 0.9 0.9 1 0.8;0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.50.5 0.8 0.6 0.9 1 0.5 0.8 0.8 0.9;0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.30.6 0.4 0.6 1 1 0.6 0.9 1 0.7;0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.40.4 0.5 0.4 1.1 1.3 0.7 1 0.7 0.6;0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.30.5 0.5 0.3 0.9 1.2 0.8 1 0.8 0.4;0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.50.4 0.2 0.5 0.5 1.3 0.6 1 0.9 0.3;0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.80.3 0.2 0.2 0.8 1.3 0.9 0.8 0.8 0.4;0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.40.3 0.2 0.4 0.3 0.8 0.6 0.7 0.4 0.4;0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.20.2 0.2 0.2 0.5 0.7 0.4 0.4 0.3 0.3;0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.10.2 0.4 0.3 0.6 0.5 0.3 0.3 0.3 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.20.2 0.2 0.4 0.7 0.4 0.2 0.4 0.5 0.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时模型成立< p="">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','logs ig','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表示迭代次数</a时模型成立<>。
数学建模常用程序
常用程序1.与矩阵有关的程序例1:a=[1 2 0;2 5 -1;4 10 -1];b=det(a)b =1例2:x=[3 10 5 6 19];y=[6 2 9 12 9];z=x+yz =9 12 14 18 28例3:x=[5 9;2 7;1 10];y=[3 11;5 9;5 2];z=x-yz =2 -2-3 -2-4 8例4:x=[1 3;4 6];y=[6 1;9 3];z=x*y; x=[1 3;4 6];y=[6 1;9 3];z=x*yz =33 1078 22注意:矩阵相乘使用“*”运算符;如果只是将两个矩阵中相同位置的元素相乘,使用“.*”运算符。
如,m=x.*ym =6 336 18矩阵除法有左除和右除的区别,分别使用“\”和“/”运算符。
右除运算速度要慢一点,而左除运算可以避免奇异矩阵的影响。
另外,与“\”和“/”运算符相对应,也有“.\”和“./”运算符,分别用于将两个矩阵中的对应元素相除。
例5:x=[1 3;4 6];y=[6 1;9 3];z=x\yz =-1.5000 0.50002.5000 0.1667m=x.\ym =6.0000 0.33332.2500 0.5000矩阵与常数的运算用的也很多,可以直接使用上面的各种运算符。
例如,对于上面的矩阵X:n=x+5n =6 89 112.矩阵的幂和平方根例6:b=[21 34 20;78 20 21;17 34 31];c=b^2c =3433 2074 17543555 3766 26313536 2312 2015d=b^-2d =0.0023 -0.0002 -0.00170.0032 0.0011 -0.0042-0.0077 -0.0009 0.0083用sqrtm函数求取矩阵的平方根。
该函数的语法格式为:X=sqrtm(A):求矩阵A的平方根X,即X*X=A。
X是唯一的平方根,此时每个特征值具有非负的实部。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.20.1 0.2 0.2 0.4 0.3 0.2 0.2 0.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.20.2 0.2 0.2 0.4 0.4 0.4 0.3 0.2 0.2;0.2 0.3 0.3 0.2 0.3 1 0.4 0.5 0.3 0.3 0.3 0.30.2 0.2 0.2 0.6 0.5 0.4 0.4 0.2 0.2;0.2 0.2 0.4 0.2 1 1.1 0.9 0.4 0.3 0.3 0.5 0.30.2 0.2 0.2 0.7 0.3 0.6 0.6 0.3 0.4;0.2 0.2 0.9 0.7 1 1 1 0.7 0.5 0.3 0.2 0.20.2 0.6 0.2 0.8 0.7 0.9 0.5 0.5 0.4;0.2 0.3 1 1 1 1.2 1 1.1 0.8 0.3 0.2 0.20.2 0.5 0.3 0.6 0.6 0.8 0.7 0.6 0.5;0.2 0.4 1 1 1.1 1.1 1.1 1.1 0.6 0.3 0.4 0.40.2 0.7 0.5 0.9 0.7 0.4 0.9 0.8 0.3;0.2 0.2 0.9 1.1 1.2 1.2 1.1 1.1 0.6 0.3 0.5 0.30.2 0.4 0.3 0.7 1 0.7 1.2 0.8 0.4;0.2 0.3 0.4 0.9 1.1 1 1.1 1.1 0.7 0.4 0.4 0.40.3 0.5 0.5 0.8 1.1 0.8 1.1 0.9 0.3;0.3 0.3 0.5 1.2 1.2 1.1 1 1.2 0.9 0.5 0.6 0.40.6 0.6 0.3 0.6 1.2 0.8 1 0.8 0.5;0.3 0.5 0.9 1.1 1.1 1 1.2 1 0.8 0.7 0.5 0.60.4 0.5 0.4 1 1.3 0.9 0.9 1 0.8;0.3 0.5 0.6 1.1 1.2 1 1 1.1 0.9 0.4 0.4 0.50.5 0.8 0.6 0.9 1 0.5 0.8 0.8 0.9;0.4 0.5 0.4 1 1.1 1.2 1 0.9 0.7 0.5 0.6 0.30.6 0.4 0.6 1 1 0.6 0.9 1 0.7;0.3 0.5 0.8 1.1 1.1 1 0.8 0.7 0.7 0.4 0.5 0.40.4 0.5 0.4 1.1 1.3 0.7 1 0.7 0.6;0.3 0.5 0.9 1.1 1 0.7 0.7 0.4 0.6 0.4 0.4 0.30.5 0.5 0.3 0.9 1.2 0.8 1 0.8 0.4;0.2 0.3 0.6 0.9 0.8 0.8 0.6 0.3 0.4 0.5 0.4 0.50.4 0.2 0.5 0.5 1.3 0.6 1 0.9 0.3;0.2 0.3 0.3 0.7 0.6 0.6 0.4 0.2 0.3 0.5 0.8 0.80.3 0.2 0.2 0.8 1.3 0.9 0.8 0.8 0.4;0.2 0.3 0.3 0.6 0.3 0.4 0.3 0.2 0.2 0.3 0.6 0.40.3 0.2 0.4 0.3 0.8 0.6 0.7 0.4 0.4;0.2 0.3 0.4 0.4 0.2 0.2 0.2 0.3 0.2 0.2 0.2 0.20.2 0.2 0.2 0.5 0.7 0.4 0.4 0.3 0.3;0.2 0.2 0.3 0.2 0.2 0.3 0.2 0.2 0.2 0.2 0.2 0.10.2 0.4 0.3 0.6 0.5 0.3 0.3 0.3 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.20.2 0.2 0.4 0.7 0.4 0.2 0.4 0.5 0.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==1returnamount=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);end% 残缺棋盘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==8total=total+1mazeelse[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)==0 end % 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);% 记录从对角线的使用情况number=0;[chess,main,deputy,number]=justtry (1,n,chess,main,deputy,number);。