2015研究生数学建模MATLAB程序(完整版)
- 格式:docx
- 大小:15.55 KB
- 文档页数:1
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`等函数绘制各种图表。
实验一:MATLAB 软件入门一、 实验目的及意义[1] 熟悉MATLAB 软件的用户环境;[2] 了解MATLAB 软件的一般目的命令;[3] 掌握MATLAB 数组操作与运算函数;[4] 掌握MATLAB 软件的基本绘图命令;[5] 掌握MATLAB 语言的几种循环、条件和开关选择结构。
通过该实验的学习,使学生能灵活应用MATLAB 软件解决一些简单问题,能借助MATLAB 软件的绘图功能,对函数的特性进行探讨,广泛联想,大胆猜想,发现进而证实其中的规律。
二、实验内容1.MATLAB 软件的数组操作及运算练习;2.直接使用MATLAB 软件进行作图练习;3.用MATLAB 语言编写命令M-文件和函数M-文件。
三、实验步骤1. 在D 盘建立一个自己的文件夹;2.开启软件平台——MATLAB ,将你建立的文件夹加入到MATLAB 的搜索路径中。
3.利用帮助了解函数max, min, sum, mean, sort, length ,rand, size 和diag 的功能和用法。
4.开启MATLAB 编辑窗口,键入你编写的M 文件(命令文件或函数文件);5.保存文件(注意将文件存入你自己的文件夹)并运行;6.若出现错误,修改、运行直到输出正确结果;7.写出实验报告,并浅谈学习心得体会。
四、实验要求与任务根据实验内容和步骤,完成以下具体实验,要求写出实验报告(实验目的→问题→算法与编程→计算结果或图形→心得体会)1.设有分块矩阵⎥⎦⎤⎢⎣⎡=⨯⨯⨯⨯22322333S O R E A ,其中E,R,O,S 分别为单位阵、随机阵、零阵和对角阵,试通过数值计算验证⎥⎦⎤⎢⎣⎡+=22S 0RS R E A 。
2.某零售店有9种商品的单件进价(元)、售价(元)及一周的销量如表1.1,问哪种商品的利润最大,哪种商品的利润最小;按收入由小到大,列出所有商品及其收入;求这一周该10种商品的总收入和总利润。
function 为函数定义的关键字y 为输出变量,x 为输入变量当函数具有多个输出变量时,则以方括号括起;当函数具有多个输入变量时,则直接用圆括号括起。
矩阵是MATLAB最基本的数据对象,MATLAB的大部分运算或命令都是在矩阵运算的意义下执行的。
在MATLAB中,不需对矩阵的维数和类型进行说明,MATLAB 会根据用户所输入的内容自动进行配置。
1.建立矩阵建立矩阵可以用:直接输入法、利用函数建立矩阵和利用M文件建立矩阵。
直接输入法:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。
(也可以用回车键代替分号)利用函数建立数值矩阵:MATLAB提供了许多生成和操作矩阵的函数,可以利用它们去建立矩阵。
例如:reshape函数和diag函数等。
reshape函数用于建立数值矩阵。
diag函数用于产生对角阵。
利用M文件建立矩阵:对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。
其步骤为:第一步:使用编辑程序输入文件内容。
第二步:把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。
第三步:在MATLAB命令窗口中输入mymatrix,就会自动建立一个名为AM的矩阵,可供以后显示和调用。
利用M文件建立矩阵:对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。
其步骤为:第一步:使用编辑程序输入文件内容。
第二步:把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。
第三步:在MATLAB命令窗口中输入mymatrix,就会自动建立一个名为AM的矩阵,可供以后显示和调用。
在MATLAB中,冒号是一个重要的运算符。
利用它可以产生向量,还可用来拆分矩阵。
冒号表达式的一般格式是:e1:e2:e3其中e1为初始值,e2为步长,e3为终止值。
冒号表达式可产生一个由e1开始到e3结束,以步长e2自增的行向量。
建立矩阵的函数常用函数有:eye(size(A)) 产生与A矩阵同阶的单位矩阵zeros(m,n) 产生0矩阵ones(m,n) 产生幺矩阵rand (m,n) 产生随机元素的矩阵Size(a) 返回包含两个元素的向量。
参赛密码第十二届“中关村青联杯”全国研究生数学建模竞赛学校西安工程大学参赛队号10709012队员姓名1.卞京红2.张茜3.张永强参赛密码第十二届“中关村青联杯”全国研究生数学建模竞赛题目:旅游路线规划问题摘要随着我国国民经济的快速发展,人们生活水平得到很大提升,越来越多的人积极参与有益于身心健康的旅游活动,其已逐步成为全球经济发展的重要动力之一。
本文针对旅游路线的规划问题,进行了多方面研究,设计了可行有效的旅游方案。
针对问题一,首先依据TSP优化理论,建立了数学模型,其次利用DIJKSTRA算法求得任意两省会之间的最短距离,运用LINGO编写程序进行模型求解,运用MATLAB编写程序。
在旅游费用不限的情况下,设计出了畅游全国5A级景区的较佳旅游路线,并得出最短旅游年限约为13年。
针对问题二,采用聚类分析的方法按省会城市的离散程度进行分类,借助MATLAB软件对数据进行处理,同时,假定以西安为中心,综合考虑飞机,高铁和自驾租车等交通方式,依据题中所给的各种费用和时间限定信息,设计出了每一天具体的出行方式、出发地、费用、路途时间、游览景区和每个景区的游览时间。
最终算出总费用为4.7193e+006元。
针对问题三,在第二问的基础上,以北京市为中心,以自驾为主,费用最低为目标,进行旅游线路设计,规划出了更适合十年旅游计划的自驾游爱好者的旅游路线;根据旅游景区的现状及旅游者的兴趣,提供了相应的建议,以便于旅游者更好的游玩,同时也方便相关部门为游客提供更好的服务。
针对问题四,根据5A级旅游景区的评定信息,结合周边的4A级景区,利用遗传算法,根据其离散程度对全国进行分区,共分为7个区域,分别为华北地区,东北地区,华东地区,华中地区,华南地区,西北地区,西南地区。
依据分区结果,更合理的安排旅游者的十年旅游计划。
关键字:旅游线路,MATLAB,DIJKSTRA算法,聚类分析,最优线路问题一、问题重述1、背景随着科技的进步和社会的发展,旅游已成为人们的一种生活方式,是提高人们生活质量的重要活动。
matlab数学建模程序代码摘要:1.MATLAB 简介2.MATLAB 数学建模应用领域3.MATLAB 数学建模程序代码实例4.总结正文:一、MATLAB 简介MATLAB(Matrix Laboratory)是一款广泛应用于科学计算、数据分析和可视化的软件,尤其擅长矩阵运算。
自1984 年问世以来,MATLAB 已经成为了全球数百万工程师、科学家和研究人员的得力工具。
MATLAB 具有丰富的函数库和强大的编程能力,为用户提供了从数据获取、数据处理、数据分析到结果可视化等一站式解决方案。
二、MATLAB 数学建模应用领域MATLAB 在数学建模领域的应用非常广泛,涵盖了诸如优化、控制、信号处理、图像处理、概率论和统计等众多学科。
以下是一些典型的应用场景:1.优化问题求解:线性规划、整数规划、非线性规划等。
2.控制系统设计:线性时不变系统、线性时变系统、非线性系统等。
3.信号处理:滤波、信号生成、频域分析等。
4.图像处理:图像增强、图像分割、特征提取等。
5.概率论与统计:概率分布计算、假设检验、回归分析等。
三、MATLAB 数学建模程序代码实例下面以一个简单的线性规划问题为例,展示如何使用MATLAB 进行数学建模。
问题描述:给定如下线性规划问题:```maximize: c" * xsubject to: A * x <= b and x >= 0```其中,c"表示目标函数的系数向量,A 表示不等式约束矩阵,b 表示不等式约束向量,x 表示决策变量向量。
MATLAB 代码如下:```matlab% 定义参数c = [1, 2, 3]; % 目标函数系数向量A = [1, 0; 0, 2; 0, 1]; % 不等式约束矩阵b = [2; 4; 1]; % 不等式约束向量x = linprog(c, [], [], A, b); % 求解线性规划问题disp(x); % 输出最优解```运行上述代码,可以得到最优解x = [1.5; 2.5; 1]。
matlab数学建模程序代码摘要:1.引言2.Matlab数学建模简介3.Matlab数学建模程序代码实例a.线性规划模型b.非线性规划模型c.动态规划模型d.排队论模型e.图论模型f.神经网络模型4.结论正文:Matlab是一种广泛应用于科学计算和数据分析的编程语言。
在数学建模领域,Matlab也发挥着重要的作用。
本文将介绍Matlab数学建模的基本知识,并通过实例代码展示不同类型的数学建模问题的解决方法。
首先,我们需要了解Matlab数学建模的基本概念。
Matlab提供了一系列用于解决各种数学建模问题的工具箱和函数。
例如,线性规划(LP)、非线性规划(NLP)、动态规划(DP)、排队论(QT)、图论(GT)和神经网络(NN)等。
这些工具箱和函数可以帮助我们快速地构建和求解数学模型。
接下来,我们将通过实例代码展示如何使用Matlab解决不同类型的数学建模问题。
1.线性规划模型线性规划是一种常见的优化问题,它的基本形式可以表示为:$minimize quad c^Tx$$subject quad to:$$Ax leq b$$x geq 0$在Matlab中,我们可以使用intlinprog函数求解线性规划问题。
下面是一个实例:```matlabf = [-1, 1, 1; -1, 2, 1; -1, 1, 2]; % 目标函数系数向量A = [1, 1, 1; 1, 1, 1; 1, 1, 1]; % 约束条件系数矩阵b = [3, 3, 3]; % 约束条件右端向量lb = [0, 0, 0]; % 变量下限[x, fval] = intlinprog(f, [], [], A, b, lb);disp(x);disp(fval);```2.非线性规划模型非线性规划问题的一般形式为:$minimize quad g(x)$$subject quad to:$$h_i(x) leq 0, i = 1, ..., m$$x in X$在Matlab中,我们可以使用fmincon函数求解非线性规划问题。
Matlab实验作业及答案作业1:建立函数M文件2.建立下面函数的M文件,并求f(x)值.(1)f(x)=log(x1+x22),x=(1,2)(2)f(x)=sin(x2)+exp(2x3),x=2(1)function f = fun1(x1,x2)f = log(x1 +x2^2);end(2)function f = fun2( x)f = sin(x^2) + exp(2*x^3);end3.试编写同时求sin(x),cos(x),exp(x),abs(x)的M函数文件.function f = fun3(x)f = [sin(x) cos(x) exp(x) abs(x)];end4.建立符号函数的M文件:当输入的变量为负数时,返回值-1;当输入的变量为正数时,返回值1;而输入0时,返回值0.function f = fun4(x)if x>0f = 1;else if x == 0f = 0;elsef = -1;endendend5.建立函数 的M 文件。
function f = fun5(x)if x>0f = exp(x-1);elsef = x^2;endend6.通过帮助系统查询roots,poly,polyval,poly2str 的用法,用这些命令解下面的问题:已知一多项式的零点为{-1,1,2,3},写出该多项式,并且计算多项式在点x=2.5处的值。
root = [-1 1 2 3];p = poly(root);x = 2.5;a = polyval(p,x);eig(a)计算多项式y=x 3-3x+2的零点P = [1 0 -3 2];a = company(p); eig(a)7.查询sum,length 的用法,建立一个求向量的平均值的M 文件a = [1 2 3 4];b = sum(a);⎪⎩⎪⎨⎧≤>=-0,0,21x x x e f xc = length(a);d = b/c;eig(d)8.查询input,disp 的用法,建立M 文件:输入x,y 的值将其互换后输出x = input('x=');y = input('y=');disp ([x,y]);t=x;x=y;y=t;disp ([x,y]);作业题2:MATLAB 矩阵的处理1. 创建矩阵A = [1 2 -1 3 5;1 -2 9 0 -6;-3 3 -4 7 1;9 8 0 7 6];disp(A);2.取A 的1,2行与2,3列的交叉元素作子矩阵A1.A([1,2],[2,3])3.取A 的1,3行,然后按行形成矩阵A2A2 = A([1,3],:);4.逆序提取A 的1,2,3行,形成列矩阵A3.A3 = [A(3,:) A(2,:) A(1,:)]’;(“’”为转置符号)5.取A2的绝对值大于3的元素构成向量A4.A4 = find(A>3);6.求出A 的最大值a 及其所处的位置. 12135129063347198076A -⎛⎫ ⎪-- ⎪= ⎪-- ⎪⎝⎭a = max(max(A));[row col v] = find(a);disp([row col v]);7、设用三种方法(克拉姆法则、矩阵的除法、逆矩阵)解方程组AX=bA = [10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10];b = [32;23;33;31];逆矩阵法:x = inv(A)*b;disp(x);矩阵的除法x =A\b;克拉姆法则for n=1:4B = A;B(:,n) = b;x(n) = det(B)/det(A);enddisp(x);作业题3:Matlab 语法控制结构的使用(1) 用起泡法对10个数由小到大排序.即将相邻两个数比较,将小的调到前头.a = [0 9 7 8 6 5 4 3 2 1];1078775658610975910A ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭32233331b ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭n = length(a);for i = 1:nfor j = 1:n-iif a(j)>a(j+1)t = a(j);a(j) = a(j+1);a(j+1) = t;endendenddisp(a)(2) 取任意数组,如[8 9 11 -9 0 2 -82 42 3 5]等的绝对值大于数3的元素构成向量(编程实现).a = [8 9 11 -9 0 2 -82 42 3 5];a = abs(a);b = find(a>3);a1 = a(b);disp(a1);(3)一球从h (比如100米)高度自由落下,每次落地后反跳回原高度的一半,再落下. 求它在第10次落地时,共经过多少米?第10次反弹有多高?h = 100;for i = 1:10h = h/2;enddisp(h) (4)有一函数 写一程序,输入自变量的值,输出函数值.function fun34 = f(x,y)x = input('x=');y = input('y=');if x < 2f = x+1;elseif x >= 2 &&x <= 8f = 3*x;elseif x>8 && x<=20f = 4*x -5;elseif x>201,23,28(,)45,820cos()sin(),20x x x x f x y x x x x x +<⎧⎪≤≤⎪=⎨-<≤⎪⎪+>⎩f = cos(x)+sin(x);enddisp(f);end(5)从1到多少的自然数的和小于或等于1000,此时的和是多少?sum = 0;n = 1;while sum <= 1000sum = sum+n;n = n+1;enddisp(n - 1);disp(sum -n );(6) 已知 当m=100时,求y 的值。
数学建模matlab编程三水仙花数水仙花数是指一个3位自然数,其各位数字的立方和等于该数本身,输出1000以内的水仙花数,并求其个数。
y=[];%空矩阵count=0;for i=100:999a=rem(i,10);b=rem(fix(i/10),10);c=fix(i/100);if(a^3+b^3+c^3==i)y=[y,i];%不断扩充count=count+1;endendy,count突变素数当一个素数(只有两个正因数(1和自己)的自然数即为素数)与其前一个素数的差值大于等于5时,将其称之为“突变素数”(2不是“突变素数”),求10000以内的“突变素数”的个数.y=[];k=0;count=0;for i=1:10000if isprime(i)==1if (i-k)>=5y=[y,i];count=count+1;endk=i;endendy,count结果:count=820方差分析1试验3种猪饲料的饲养效果,得到9头猪的增重(单位:kg)如下:用matlab编程做作方差分析,估计各个总体的未知参数μi 和μ。
(不允许用anova1工具箱)先用sas得到结果方便后面检验:data ex;do a=1 to 3;input n@@;do i=1 to n;input x@@;output;end;end;cards;4 51 40 43 483 23 25 262 23 28;proc anova data=ex;class a;model x=a;run;sst——(每个因素的均值-总均值)^2的和ssa——每个水平的个数*(每个水平的均值-总均值)^2的和sse=sst-ssaf=(ssa/(r-1))/(sse/(n-r)) r为水平个数a1=[51,40,43,48];a2=[23,25,26];a3=[23,28];a=[a1,a2,a3];n=length(a);b=[1 1 1 1 2 2 2 3 3];sst=0;for i=1:nsst=sst+(a(i)-mean(a))^2;endssa=0;for i=1:3an=a(b==i);num=length(an);ssa=ssa+num*(mean(an)-mean(a))^2;endsse=sst-ssa;f=(ssa/2)/(sse/(n-3));p=1-fcdf(f,2,n-3);ssa,sse,sst,f,p可以看出和sas所得结果一样方差分析2测定4种种植密度下金皇后玉米的千粒重(单位:g)如下:用matlab编程做作方差分析,估计各个总体的未知参数mi和μ。
使用Matlab进行数学建模的基本流程引言数学建模作为一门交叉学科,旨在将实际问题转化为数学模型,并通过数学方法求解问题。
而Matlab作为一种常见且强大的数学软件,为数学建模提供了便捷的工具和平台。
本文将介绍使用Matlab进行数学建模的基本流程,包括问题提出、模型建立、求解分析等方面。
一、问题提出在进行数学建模之前,首先需要明确问题的提出。
问题可以来源于实际生活、工程技术、自然科学等领域。
在提出问题时,需要明确问题的背景、目标和约束条件。
以一个实际问题为例,假设我们需要优化某个生产过程的生产能力,而该过程中不同工序的生产速度会受到各种因素的影响。
我们的目标是最大化总产量,同时要满足资源约束和质量要求。
二、模型建立在问题提出的基础上,开始建立数学模型。
数学模型是问题实质的抽象和化简,它可以通过数学语言和符号来描述问题。
在建立模型时,需要关注以下几个方面:1. 变量的选择:根据问题的特点和目标,确定需要考虑的变量。
例如,在我们的生产过程优化问题中,可以考虑生产速度、资源利用率等变量。
2. 建立关系:通过分析问题,确定变量之间的关系。
关系可以是线性的、非线性的,也可以是概率性的。
在我们的例子中,我们可以根据生产速度和资源利用率的关系建立数学表达式。
3. 假设和简化:在建立模型时,为了简化问题,可以进行一些假设和简化。
但是需要保证这些假设和简化对问题求解的结果不会产生重大影响。
基于以上步骤,我们可以建立一个数学模型,例如使用线性规划模型来最大化总产量,并满足资源和质量约束。
三、求解分析模型建立完毕后,需要使用Matlab进行求解分析。
Matlab提供了丰富的函数和工具箱,可以方便地进行数学计算、模拟仿真、优化求解等操作。
在求解分析阶段,我们可以进行以下几个步骤:1. 数据处理:将实际问题中获取的数据导入Matlab,并进行必要的预处理和清洗。
例如,我们可以将生产速度和资源利用率的数据导入Matlab,进行统计分析和数据可视化。
2015研究生数学建模MATLAB程序(完整版)代码一:% 解密过程及破译密文统计clearclcfid1=fopen('mingwen1.txt','r');str1=fgets(fid1);fclose(fid1);fid2=fopen('jiemihou1.txt','r');str2=fgets(fid2);fclose(fid2);% 删去单词之间的间隔和标点符号ad=find(str2==',');str2(ad)='';ad=find(str2=='.');str2(ad)='';a d=find(s tr2==';');str2(ad)='';ad=find(str2=='''');str2(ad)='';ad=find(str2=='?');str2(ad)=''; ad=find( str2==':');str2(ad)='';ad=find(str2=='"');str2(ad)='';ad=find(str2=='-');str2(ad)='';ad=find(s tr2=='/');str2(ad)='';ad=find(str2==' ');str2(ad)='';for i=0:25;ad=find(str1=='A'+i);str1(ad)='a'+i;endfor i=0:25;ad=find(str2=='A'+i);str2(ad)='a'+i;endn1(1,26)=0;n2(1,26)=0;n1(1)=sum(str1=='a');n2(1)=sum(str2=='a');n1(2)=sum(str1=='b');n2(2)=sum(str2=='b');n1(3)=sum(str1=='c');n2(3)=sum(str2=='c');n1(4)=sum(str1=='d');n2(4)=sum(str2=='d');n1(5)=sum(str1=='e');n2(5)=sum(str2=='e');n1(6)=sum(str1=='f');n2(6)=sum(str2=='f');n1(7)=sum(str1=='g');n2(7)=sum(str2=='g');n1(8)=sum(str1=='h');n2(8)=sum(str2=='h');n1(9)=sum(str1=='i');n2(9)=sum(str2=='i');n1(10)=sum(str1=='j');n2(10)=sum(str2=='j');n1(11)=sum(str1=='k');n2(11)=sum(str2=='k');n1(12)=sum(str1=='l');n2(12)=sum(str2=='l');n1(13)=sum(str1=='m');n2(13)=sum(str2=='m');n1(14)=sum(str1=='n');n2(14)=sum(str2=='n');n1(15)=sum(str1=='o');n2(15)=sum(str2=='o');n1(16)=sum(str1=='p');n2(16)=sum(str2=='p'); n1(17)=sum(str1=='q');n2(17)=sum(str2=='q');n1(18)=sum(str1=='r');n2(18)=sum(str2=='r');n1(19)=sum(str1=='s');n2(19)=sum(str2=='s');n1(20)=sum(str1=='t');n2(20)=sum(str2=='r');n1(21)=sum(str1=='u');n2(21)=sum(str2=='u');n1(22)=sum(str1=='v');n2(22)=sum(str2=='v');n1(23)=sum(str1=='w');n2(23)=sum(str2=='w');n1(24)=sum(str1=='x');n2(24)=sum(str2=='x');n1(25)=sum(str1=='y');n2(25)=sum(str2=='y');n1(26)=sum(str1=='z');n2(26)=sum(str2=='z');[N1,IX1]=sort(n1,'descend')[N2,IX2]=sort(n2,'descend')% 频率对应idx=find(str2=='v');str2(idx)='E';idx=find(str2=='g');str2(idx)='T';idx=find(str2=='l');str2(idx)='A';idx=find(str2=='m');str2(idx)='N';idx=find(str2=='z');str2(idx)='I';idx=find(str2=='h');str2(idx)='S';idx=find(str2=='r');str2(idx)='O';idx=find(str2=='t');str2(idx)='R';idx=find(str2=='i');str2(idx)='D';idx=find(str2=='s');str2(idx)='L';idx=find(str2=='o');str2(idx)='H';idx=find(str2=='w');str2(idx)='F';idx=find(str2=='x');str2(idx)='U';idx=find(str2=='f');str2(idx)='C';idx=find(str2=='u');str2(idx)='G';idx=find(str2=='k');str2(idx)='P';idx=find(str2=='d');str2(idx)='Y';idx=find(str2=='n');str2(idx)='M';idx=find(str2=='y');str2(idx)='B';idx=find(str2=='e');str2(idx)='K';idx=find(str2=='b');str2(idx)='W';idx=find(str2=='p');str2(idx)='V';idx=find(str2=='q');str2(idx)='Q';idx=find(str2=='a');str2(idx)='J';idx=find(str2=='c');str2(idx)='X';idx=find(str2=='j');str2(idx)='Z'; %%%%%%%% for i=0:25;ad=find(str2=='A'+i);str2(ad)='a'+i; endn3(1,26)=0;for i=0:25;n3=sum(str2=='a'+i);end%破译得到的明文及频率disp(str2)[N3,IX3]=sort(n3,'descend')N3/(sum(N3))代码二:% 基于频率分析,寻找最佳修改位置% p1-----传输过程中每个字符出现丢失的概率% p2-----传输过程中每个字符出现篡改的概率% p3-----传输过程中每个字符出现被添加的概率% derta-----各字母间频率差异% derta_n-----各字母需要改变的数目l2=size(str2);syms p1p2p3p1=0.1;p2=0.1;p3=0.1;A=n1./sum(n1);B=n3./sum(n3);derta=A-B;derta_n=round(sum(n3).*derta.*p1+sum(n3).*derta.*p2);% l(i)-----某一字符左侧可能连接的字符% r(i)-----某一字符右侧可能连接的字符% count_l-----统计某一字符左侧可能连接的字符总数% count_r-----统计某一字符右侧可能连接的字符总数% max_l-----某一字符左侧出现最多的字符% max_r-----某一字符右侧出现最多的字符% ad-----字符所在位置length_str2=length(str2);for i=1:26if derta_n(i)<0z=zeros(length_str2,1);n0=find(str2=='a'+i-1);n1=sum(str2=='a'+i-1);ll=zeros(n1,1);rr=zeros(n1,1);for j=1:n1for t=1:n1l1(j)=str2(n0(t)-1);r1(j)=str2(n0(t)+1);endendl1_i=l1(:);r1_i=r1(:);for m1=1:26;n1(m1)=sum(str1=='a'+m1); end[r,c]=max(n1)for ii=1:size(str2)ad=find(str2=='a'+c-1)endfor k1=1:derta_n(i)str2(ad(k1))=([c 'a'+i]);endelseif derta_n(i)>0z=zeros(length_str2,1);n0=find(str2=='a'+i-1);n1=sum(str2=='a'+i-1);ll=zeros(n1,1);rr=zeros(n1,1);for j=1:n1l2(j)=str2(n0(j)-1);r2(j)=str2(n0(j)+1);endl2_i=l2(:);r2_i=r2(:);for m1=1:26;n1(m1)=sum(str1=='a'+m1);end[r,c]=min(n1)for k1=1:derta_n(i)ad(k1)=find(str2=='a'+c-1); str2(ad(k1))=([ ]); endendendenddisp(str2)for m1=1:26;n1(m1)=sum(str2=='a'+m1-1);end[N3,IX3]=sort(n3,'descend')N3/(sum(N3))。