【数学建模竞赛】Matlab入门讲解

数值运算和矩阵运算

数值运算

%% 算数运算
sqrt
power(8,1/3)
log(1,5) %e
log10(1,5) %10
exp(2) %e为底的指数
expm1(2) %=exp(x)-1
nextpow2(20) %寻找最大的n,使得2*(n-1)小于该值 ans=5
disp(x)%输出相当于printf

sin(pi)%写成sinpi(1)
asin(1/2) %反正弦 弧度制
asind(1/2) %反正弦 角度制
atan2(1,-1) %四象限反正切

mod(17,4) %求余数

sign(-1) %符号函数 负数保持不变 正数为一 0为0

fix (1.1072)%向0取整
floor (1.1072) %向负无穷取整
ceil(1.1072) %向正无穷取整
round(1.1072) %直接四舍五入
roundn(1.1072,-2) %-2是小数点后两位

max ([])
min ([])
mean ([]) %平均值
median ([]) %中位数
prod ([]) %求积
sum ([])
var ([]) %方差
std ([]) %标准差
cov ([]) %协防差

%生成随机数
rand(1) %生成0-1的随机数
rand(1)*100+20 %生成20-120的随机数
randi(100) %生成0-100的随机整数

矩阵运算 

%%矩阵运算
1 : 1 : 100  % 1间隔2到100
[3,4]
[1 2 3] %矩阵相当于行矩阵
[1,2,3] %行矩阵
[1;2;3] %列矩阵
[1,2,3;4,5,6;7,8,9] %有行有列
zeros(10) %创建10x10全是0的矩阵
zeros(10,20) %创建10x20全是0的矩阵
eye(10)%创建10x10的单位 全对角线为1
magic(10)%创建10x10的幻方
rand(10)%创建10x10的均匀分布随机矩阵(0~1的范围)
3*rand(10)%创建10x10的均匀分布随机矩阵(0~3的范围)
randn(10)%创建10x10的正态分布随机矩阵(0~1的范围)
randperm(10,5) %在1-10范围内随机取5个整数
[xx,yy]=meshgrid(1:100,1:5);%基矩阵
repmat(rand(10),1,5)%扩充矩阵
[m, n]=size(matrix); %得到矩阵的行数和列数
m1 = size(matrix,1); %得到矩阵的行数
n1 = size(matrix,2); %得到矩阵的列数
n2 = length(matrix); %得到矩阵的行数和列数的较大数

num1 = matrix(1,3) %取出矩阵得第一行,第三列
num2 = matrix(1,:) %取出矩阵得第一行
num3 = matrix(:,1) %取出矩阵得第一列
%多行多列选取
label=[1,3];
num4 = matrix(:,label) %取出矩阵得第一列和第三列

A*B 
A/B %A乘B的逆
A\B %A的逆乘B
A.*B %数乘
A./B %右数除
A.\B %左数除

inv %求逆
pinv %求伪逆(适用于非方阵)
A' %转置
det(A)
trace(A)
lu(A)
qr(A)
eig(A) %求特征值

数据的导入

%% readexcel
data_table = xlsread("食品零售价格.xls");
%% 读不了文本数据
data_table2 = readmatrix("食品零售价格.xls");
%% 基本上数据保留比较全/table的形式
data_table3 = readtable("食品零售价格.xls");
%% 元胞的形式
data_table4 = readcell("食品零售价格.xls");
%% load导入命令
load("食品零售价格.xls");

矩阵的逻辑处理

%% 不管是什么数据,都要转化为矩阵形式
data = data_table3(:,3:end); %所有行/第三列到最后一列%仍然是table的形式
data1 = table2array(data); %table-> double(矩阵)
%% 求最大值 最小值 平均值
data_max = max(data1); %注意这里求的是每一列得最大值 %求行的时候要进行转置(data')
%% 求不为0的次数位置
% ~(不等于) = == > < = >= <= 
data_shang1 = data1(1,:);%第一行的数据
index1 = find(data_shang1~=0);%找到不为0的位置
num_index1 = length(index1); %找到不为0的次数
data_shang1(index1);
%% 循环
data_shangall = zeros(1,size(data1,1));
for i = 1:size(data1,1)
    data_shang1 = data1(i,:);
    index1 = find(data_shang1 ~=0);
    num_index1 = length(index1); 
    data_mean = mean(data_shang1(index1));%求平均值
    data_shangall(i) = num_index1;
end
%% 找到矩阵的缺失值并删除所在行或列
index = isnan(data_nan); % 最后生成logical变量 (NaN变成1,正常的变成0)
data_nan1 = data_nan;
data_nan1(index1,:) = []; %赋值为空
 
%% 分布找出类属于A,B,C 的数据,存储起来
%% 将文字标签改为数字标签
data_abc = data_table1(:,2);%将第二列取出来 data_table1(2,:);%第二行
data_abc_num = table2array(data_abc);%表文件转化为cell
%%
data_tongji = tabulate(data_abc_num);% 统计ABC个数
for i = 1:size(data_tongji,1)
    dianli_str{1,i} = data_tongji{i,1};
end
%%
data_shuju = zeros(length(data_abc_num),1);
for NN = 1:length(dianli_str)
idx = find(ismember(data_abc_num,dianli_str{1,NN}));%寻找文字变量的位置
data_shuju(idx)=NN;
end
%讲ABC找出来
for i = 1:size(data_tongji,1)%讲不同标签行的位置分别找出来存在不同的元胞里,因为
    A(i)={find(data_shuju == i)};
end
%% 对cell里的数据进行同样的处理
% 标准化 zescore
std_data = zscore(data1);%对矩阵每列进行标准化
%%
std_data1 = mapminmax(data1',0,1)'; %mapminmax对每行进行标准化,操作的时候
%% 如果对B类数据进行标准化
B_data = data1(A{1,1},:);
std_B_data = zscore(B_data);
A{2,1} = std_B_data;
%批量操作
for i = 1:length(A)
    B_data = data1(A{1,i},:);
    std_B_data = zscore(B_data);
    C{1,i} = std_B_data;
end
%%
for i = 1:size(data1,1)
    data_te = data(i,:);
    data_mean = mean(data_te);
    data_std = std(data_te);
    index = find((data_te>(data_mean+3*data_std))|(data_te<(data_mean-3*data_std)));
    AA{i} = index;
end
%% 
data1([1,4,5],:) = [];

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CaojunjiaOnly

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

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

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

打赏作者

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

抵扣说明:

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

余额充值