41种数学建模常用matlab代码包无偿分享,由国一学长吐血整理,是参加国赛必备的学习资料,免费分享给需要的小伙伴,希望对参加国赛的同学有所帮助!
聚类分析部分代码展示:
聚类分析主要过程
(1)将数据展绘
% 随机生成3个中心以及标准差
s = rng(5,'v5normal');
mu = round((rand(3,2)-0.5)*19)+1;
sigma = round(rand(3,2)*40)/10+1;
X = [mvnrnd(mu(1,:),sigma(1,:),200);
mvnrnd(mu(2,:),sigma(2,:),300);
mvnrnd(mu(3,:),sigma(3,:),400)];
% 作图
P1 = figure;clf;
scatter(X(:,1),X(:,2),10,'ro');
(2)利用不同的算法进行带入分析
1 高斯混合聚类代码
高斯混合聚类的步骤:首先假设样本集具有一些规律,包括可以以α \alphaα参数作为比例分为k kk类且每类内符合高斯分布。
然后根据贝叶斯原理利用极大似然法同时求出决定分类比例的α \alphaα和决定类内高斯分布的μ \muμ、Σ \SigmaΣ。
最后将样本根据α \alphaα、μ \muμ、Σ \SigmaΣ再次通过贝叶斯原理求出样本该分在哪个簇。
整个步骤下来,
这种做法其实就是一种原型聚类:通过找到可以刻画样本的原型(α \alphaα、μ \muμ、Σ \SigmaΣ参数),迭代得到α \alphaα、μ \muμ、Σ \SigmaΣ参数的最优解。
将逻辑思路理清楚之后,高斯混合聚类并不复杂,只是因为它同时运用了高斯分布、贝叶斯公式、极大似然法和聚类的原理和思想,加上高数化简求解的步骤,而导致初读时比较容易感到有些混乱。
% 等高线
options = statset('Display','off');
gm = gmdistribution.fit(X,3,'Options',options);
P6 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezcontour(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
...
粒子群优化算法部分代码:
粒子群算法基本步骤
1 找出待优化的目标函数
2 设定种群规模大小(不会设置可直接采用下方代码的)
3 替换掉下方公式即可
%% 初始化种群
f= @(x)x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x); % 函数表达式 % 求这个函数的最大值
figure(1);ezplot(f,[0,0.01,20]);
N = 50; % 初始种群个数
d = 1; % 空间维数
ger = 100; % 最大迭代次数
limit = [0, 20]; % 设置位置参数限制
vlimit = [-1, 1]; % 设置速度限制
w = 0.8; % 惯性权重
c1 = 0.5; % 自我学习因子
c2 = 0.5; % 群体学习因子
for i = 1:d
x = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, d);%初始种群的位置
end
v = rand(N, d); % 初始种群的速度
xm = x; % 每个个体的历史最佳位置
ym = zeros(1, d); % 种群的历史最佳位置
fxm = zeros(N, 1); % 每个个体的历史最佳适应度
fym = -inf; % 种群历史最佳适应度
hold on
plot(xm, f(xm), 'ro');title('初始状态图');
figure(2)
%% 群体更新
iter = 1;
...
篇幅有限,更多资料可评论免费领取哦~