matlab与常见算法笔记

一、绘图基础

生成数组的一些方式

(1)linspace函数

clear;
clc;
x = linspace(1,4,10);
plot(x);
%linspace用于产生从1,4的10个等差数组成的向量

(2)双冒号表达式

x = num1: num2: num3;
%表示以num2为步长,生成由[num1,num3]范围内的数组成的*数组*,必有num1,但可以没有num3
%而函数作用该数组的结果也是数组,同长度

(3)ones函数

mat = ones(lines,rows);%生成元素全为1的lines行,rows列的矩阵

二维连续函数图像

(1)plot函数

clear;
clc;
x = [1.2,3,4];
plot(x);
%plot函数单纯用来画直线,是两个点两个点地作图
%plot(参数),按对传参,一对xy向量就作一个图,可以无限增加作图量
%可以用于复函数的画图(即加上i)

绘制多元线型,可以传参在x,y的后面,具体见博客【Matlab】MATLAB绘图_GQ-CSDN博客_用matlab画图

(2)fplot函数

先提一嘴函数句柄

命名格式: f = @已命名函数或者 f = @(argument_list) exp

clear;
clc;
f = @(x) (x*x);
fplot(f,[2,10]);
%绘制函数图像,fplot(函数名,自变量区间,设置的线型参数)

%也可绘制双函数图像fplot(x轴函数,y轴函数,共同的参数的取值)
fplot(@(x)2*sin(x), @(y)2*cos(y),[0,2*pi]);
%目前所有表达只能只用单值函数,不管上面的两个函数定义时是否用了同一个变量(x和y表达不同),它都是默认的一个参数(在用的时候x,y是被传的同样一个值)

二维离散函数图像

scatter函数

% scatter(x, y, 选项, 'filled'),数据点的坐标向量(数组),选项用于设置点的颜色,形状等,filled传入才为实心
t = 0:0.001:pi
x = 2+cos(t);
y = sin(t);
scatter(x,y);

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcm9iaW5iaXJkXw==,size_20,color_FFFFFF,t_70,g_se,x_16

多图绘制

(1)将多个图画在一个figure里面(比如有两种散点数据,想画在一个显示窗口里面,则可以在前一组的scatter后接上hold on,效果如下

clc;
data = [2.0, 3.0 , 3; 2.0, 4.0 ,1 ; 1.0, 3.0 ,1 ; 3.0, 3.0,3  ; 17.0, 8.0,1 ; 18.0, 9.0,2 ; 19.0, 7.0,2 ;18.0, 8.0,2 ; 8.0, 8.0 ,1 ;9.0, 7.0, 3; 8.0, 9.0 ,1 ;7.0, 9.0,2];
f = @(x)(x*50);
col = arrayfun(f,data(:,3));
scatter(data(:,1),data(:,2),[],col,'filled');
hold on;
scatter(1:1:2,4:4:8);

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcm9iaW5iaXJkXw==,size_20,color_FFFFFF,t_70,g_se,x_16

(2)想先后绘制不同的图,且不想被覆盖,则用

%画第一幅图close;figure;%画第二幅图..

close用于关闭绘图窗口,figure用于创建新的绘图窗口

二、K-means实现

前面几个是因为没系统学过m语言才积累的几个基础知识

(1)随机k个初始中心---随机数的生成

查了好多复杂文章,不过其实也就一个rand()函数的返回值足矣

(2)二维数组的创建与访问

arr = [num1,num2,num3    ;    num4,num5,num6 ... ];
%和C有区别!不同的行由分号隔开
a1 = arr(1,1);
%下标从1开始,也不像C从0开始
rows = arr(:,1);
%获得矩阵的第一列,行则反之

(3)求解数组的最值

直接min(arr)即得最值,或者[min_value, index] = min(arr)这个还能得到索引

(4)if语句

if condition
	abb..
else if
	abb...
else
	abb..
end

(5)数组的映射---arrayfun

res_arr = arrayfun(fun_name,arr);

顾名思义,就是把数组的各个元素按照映射关系(里面的fun)作用于arr的每一个元素,比如:

res_arr = arrayfun(sin,arr);
%将arr的每个元素求sin

(6)更多的绘图相关内容自己放到了上面绘图部分,下面上代码

data自己定义,格式是一个矩阵,每一行的3个元素,分别为x,y坐标、分类(初始设为0)

clear;
clc;
%聚类 K-means的应用
data = [2.0, 3.0 , 0; 2.0, 4.0 ,0 ; 1.0, 3.0 ,0 ; 3.0, 3.0,0  ; 17.0, 8.0,0 ; 18.0, 9.0,0 ; 19.0, 7.0,0 ;18.0, 8.0,0 ; 8.0, 8.0 ,0 ;9.0, 7.0, 0; 8.0, 9.0 ,0 ;7.0, 9.0,0];
k = 3;
time = 0;
times = 50; %用于绘图时拉开不同颜色差距的倍数
%生成2k个点
center = ones(k,2);
%初始化中心
for i = 1:k
%     center(i,1) = 10 * rand();
%     center(i,2) = 10 * rand();
 center(i,1) = data(i+7,1);
 center(i,2) = data(i+7,2);
end

while 1
 time = time+1;
 %寻找现在的点的分类
 for i = 1:12
     sum = ones(k,1);
     for j = 1:k
         sum(j) = (data(i,1)-center(j,1))^2+(data(i,2)-center(j,2))^2;
     end
     [m,index] = min(sum);
     data(i,3) = index;
 end
 %开始显示一批点
 f = @(x)(x*50);
 col = arrayfun(f,data(:,3));
 c_col = [1*times-20;2*times-20;3*times-20];
 figure;
 scatter(data(:,1),data(:,2),[],col,'filled');
 hold on;
 scatter(center(:,1),center(:,2),[],c_col,'filled');
 pause(1);
 %现在寻找新的k个重心
 new_c = ones(k,2);
 number = ones(k,1);
 for i = 1:k
    new_c(i,1) = 0;
    new_c(i,2) = 0;
    number(i) = 0;
 end
 for i = 1:12
     new_c(data(i,3),1) = new_c(data(i,3),1)+ data(i,1);
     new_c(data(i,3),2) = new_c(data(i,3),2)+ data(i,2); 
     number(data(i,3)) = number(data(i,3))+1;
 end   
 delta = 0;
 for i = 1:k
    new_c(i,1) = new_c(i,1)/number(i);
    new_c(i,2) = new_c(i,2)/number(i);
    delta = delta + (new_c(i,1)-center(i,1)) ^2 + (new_c(i,2)-center(i,2))^2;      
 end
 close;
 if abs(delta) < 1e-5
     break
 else
     for i = 1:k
         center(i,1) = new_c(i,1);
         center(i,2) = new_c(i,2);
     end
 end
end
%开始显示一批点
f = @(x)(x*50);
col = arrayfun(f,data(:,3));
scatter(data(:,1),data(:,2),[],col,'filled');
hold on;
scatter(center(:,1),center(:,2),[],c_col,'filled');
pause(1);
time = time+1;

测试效果

给隔壁一个用Matlab作gif的巨佬打个广告:(十分给力)如何用MATLAB来制作GIF动画_Data跳动的博客-CSDN博客_matlab制作gif

fdbee1d50e279939ae939d8501e345ac.gif

还在持续更新中……(为美赛做的微不足道的准备)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
说明: 十大算法MATLAB程序,可用于数学建模,算法和程序相对应 十大算法 十大算法\dijkstra 十大算法\dijkstra\dijk.txt 十大算法\Floyd算法 十大算法\Floyd算法\floyd.txt 十大算法\Floyd算法\国数学建模-数学工具-Floyd最短路算法MATLAB程序.txt 十大算法\免疫算法.txt 十大算法\分治算法 十大算法\分治算法\c程序.txt 十大算法\分治算法\国数学建模-编程交流-分治算法_1.txt 十大算法\分治算法\国数学建模-编程交流-分治算法_2.txt 十大算法\动态规划 十大算法\动态规划\国数学建模-编程交流-动态规划算法_1.txt 十大算法\动态规划\国数学建模-编程交流-动态规划算法_2.txt 十大算法\动态规划\国数学建模-编程交流-动态规划算法_3.txt 十大算法\图论 十大算法\图论\哈密尔顿回路 十大算法\图论\哈密尔顿回路\Desktop_.ini 十大算法\图论\哈密尔顿回路\TSP模拟退火 十大算法\图论\哈密尔顿回路\TSP模拟退火\accept.m 十大算法\图论\哈密尔顿回路\TSP模拟退火\annealing.m 十大算法\图论\哈密尔顿回路\TSP模拟退火\calculate.m 十大算法\图论\哈密尔顿回路\TSP模拟退火\cost.mat 十大算法\图论\哈密尔顿回路\TSP模拟退火\cost_sum.m 十大算法\图论\哈密尔顿回路\TSP模拟退火\Desktop_.ini 十大算法\图论\哈密尔顿回路\TSP模拟退火\exchange2.m 十大算法\图论\哈密尔顿回路\TSP模拟退火\exchange3.m 十大算法\图论\哈密尔顿回路\TSP模拟退火\说明.txt 十大算法\图论\哈密尔顿回路\三边交换简单算法 十大算法\图论\哈密尔顿回路\三边交换简单算法\bianquan.m 十大算法\图论\哈密尔顿回路\三边交换简单算法\cost_sum.m 十大算法\图论\哈密尔顿回路\三边交换简单算法\Desktop_.ini 十大算法\图论\哈密尔顿回路\三边交换简单算法\jiaohuan3.m 十大算法\图论\哈密尔顿回路\三边交换简单算法\哈密尔顿回路.rar 十大算法\图论\哈密尔顿回路\三边交换简单算法\说明.txt 十大算法\图论\图论.ppt 十大算法\图论\图论1.pdf 十大算法\图论\图论及其应用.doc 十大算法\图论\最短路f_d.doc 十大算法\图论\用计算机实现图论的最短路径程序 十大算法\图论\用计算机实现图论的最短路径程序\Algo7-1.c 十大算法\图论\用计算机实现图论的最短路径程序\Algo7-2.c 十大算法\图论\用计算机实现图论的最短路径程序\Algo7-3.c 十大算法\图论\用计算机实现图论的最短路径程序\Algo7-4.c 十大算法\图论\用计算机实现图论的最短路径程序\Algo7-5.c 十大算法\图论\用计算机实现图论的最短路径程序\Algo7-6.c 十大算法\图论\用计算机实现图论的最短路径程序\Algo7-7.c 十大算法\图论\用计算机实现图论的最短路径程序\BO7-1.C 十大算法\图论\用计算机实现图论的最短路径程序\Bo7-2.c 十大算法\图论\用计算机实现图论的最短路径程序\Bo7-3.c 十大算法\图论\用计算机实现图论的最短路径程序\Bo7-4.c 十大算法\图论\用计算机实现图论的最短路径程序\c1.h 十大算法\图论\用计算机实现图论的最短路径程序\C7-1.H 十大算法\图论\用计算机实现图论的最短路径程序\C7-2.H 十大算法\图论\用计算机实现图论的最短路径程序\C7-3.H 十大算法\图论\用计算机实现图论的最短路径程序\C7-4.H 十大算法\图论\用计算机实现图论的最短路径程序\F7-1.DAT 十大算法\图论\用计算机实现图论的最短路径程序\MAIN7-1.c 十大算法\图论\用计算机实现图论的最短路径程序\Main7-2.c 十大算法\图论\用计算机实现图论的最短路径程序\Main7-3.c 十大算法\图论\用计算机实现图论的最短路径程序\Main7-4.c 十大算法\搜索算法 十大算法\搜索算法\国数学建模-编程交流-搜索算法基础.txt 十大算法\概率算法 十大算法\概率算法\国数学建模-编程交流-概率算法简介.txt 十大算法\模拟退火算法 十大算法\模拟退火算法\国数学建模-编程交流-模拟退火算法.txt 十大算法\模拟退火算法\模拟退火算法.txt 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\cro.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\ft.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\ga.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\init.mat 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\main.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\mut.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\n2to10.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\objf.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\pro.m 十大算法\模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集\简单函数优化的遗传算法程序\sel.m 十大算法\灰色预测 十大算法\灰色预测\灰色预测.pdf 十大算法\灰色预测\灰色预测MATLAB程序.txt 十大算法\灰色预测\灰色预测法.doc 十大算法\神经网络 十大算法\神经网络\matlab15.pdf 十大算法\神经网络\matlab16.pdf 十大算法\穷举法求解0-1整数规划的matlab程序.txt 十大算法\类比法 十大算法\类比法\数学建模的类比方法.pdf 十大算法\组合算法 十大算法\组合算法\国数学建模-编程交流-组合算法概论.txt 十大算法\网上matlab 十大算法\网上matlab\提高matlab运算速度.files 十大算法\网上matlab\提高matlab运算速度.files\index.files 十大算法\网上matlab\提高matlab运算速度.files\index.files\bg.gif 十大算法\网上matlab\提高matlab运算速度.files\index.files\icon_menu_05.gif 十大算法\网上matlab\提高matlab运算速度.files\index.files\icon_menu_06.gif 十大算法\网上matlab\提高matlab运算速度.files\index.files\icon_menu_07.gif 十大算法\网上matlab\提高matlab运算速度.files\index.files\icon_menu_08.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robinbird_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值