数学建模代码汇总复习进程

合集下载

数学建模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代码,当然,数学建模的过程非常复杂,需要综合运用多种技术和工具。

matlab数学建模程序代码

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题代码以下是一个数学建模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 =(根据您的最大公约数改编的这个程序结果是零,不知道什么原因)。

数学建模代码

数学建模代码
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代码) 数学建模中使用的算法涉及多个领域,包括优化、统计、机器学习等。

以下是一些在数学建模中常用的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进行一维线性回归建模:
```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);
```
此代码生成了一些示例数据,然后使用一维线性回归对数据进行建模。

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

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

  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.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);。

相关文档
最新文档