matlab笔记——基础篇——界面认识+基础语法+数据文件读写+描述性统计分析

下个星期要给同学们做matlab入门培训,先来博客写写练练手,熟悉一下内容。

打算分基础篇、绘图篇和进阶篇。今天先总结一下基础篇吧。

目录

界面认识

菜单栏

工作文件夹和工作区

命令行窗口

编辑器+实时编辑器

基础语法

基础桌面命令

数组和矩阵运算

创建数组

一维数组操作

数组索引

矩阵计算

多维数组操作

循环和条件语句

数据导入和存储

matlab格式化数据:.mat

文本文件:.txt

文本文件:.csv (逗号分割文本文件,没有任何表格格式)

电子表格:.xlsx

科学数据:netCDF

统计分析

基本统计处理(描述性统计)

带有缺省值的数据


界面认识

菜单栏

part1:文件和脚本管理部分

part2:数据导入部分

part3:环境变量部分(如果你新下载了一个toolbox,比如m_map,那就需要点这里的设置路径,把新的toolbox的环境变量添加进来)

part4: 帮助与教程部分

工作文件夹和工作区

显示当前目录和变量(注意绝对路径和相对路径的区别)

 

注意工作区、命令行窗口、编辑器都有一个向下的小箭头(小红框),可以在里面设置停靠或取消停靠

命令行窗口

编辑器+实时编辑器

编辑器和实时编辑器的区别在于:实时编辑器能够像写文档一样,在代码间插入文本和公式。适用于完成作业或写教学脚本,格式为*.mlx;编辑器则更适合一气呵成写完一个可运行的文件,格式为*.m。


基础语法

基础桌面命令

help%查询函数基本用法
doc%查看函数文档
clc %清空命令行
clear %清除变量
close %关闭图片窗口
close all %关闭所有图片
commandhistory %查询历史命令行,可以按上下箭头查阅历史命令

help和doc的区别在于:如果你知道这个命令,但是一时忘了参数怎么用,help一下就可以;如果你不熟悉某个命令,想要仔细学习一下,可以用doc查看详细解释。

数组和矩阵运算

创建数组

a=zeros(1,5) %生成全部为0的数组,1行5列
a=ones(1,5) %生成全部为1的数组,1行5列
a=nan(1,5) %生成全部为nan的数组,1行5列
b=zeros(5) %生成全部为0的矩阵,5行5列
a=eye(5) %生成单位矩阵,5行5列

一维数组操作

x=[1 3 5 7 9 8 6 4 2];
sort(x) %数组排序
flip(x) %翻转元素顺序
transpose(x)%数组或矩阵转置

数组索引

x=[1 3 5 7 9 7 5 3 1]
x(1)
x(2)
x(3)
y=[2,3,4;5,6,7]
y(1,2) %查看第1行第2列数值
y(2,3) %查看第2行第3列数值
y(:,3) %查看第3列数值
y(2,:) %查看第1行数值
y(:,2:3) %查看所有行第2-3列数值

注意matlab中索引是从1开始的。

矩阵计算

例1:三阶线性代数方程组求解

A=[2 -5 4;3 1 2;1 -2 3]
b=[1;6;2]
x=A\b
A*x

注意矩阵相乘和矩阵元素对应相乘的区别

A=[1,2,3;4,5,6;7,8,9]
B=ones(3)
C=A*B
D=A.*B

多维数组操作

x=rand(24,31,12,2); %x的四个维度为小时,日,月,年
size(x)  %x的四个维度为小时,日,月,年
y=permute(x,[1,3,2,4]); %置换数组维度
size(y)  %y的四个维度为小时,月,日,年
y1=reshape(x,31*24,12,2);%重构数组, 要特别注意原数组的维度顺序,现在这个是对的,数据展开顺序是第1天的24小时,第2天的24小时,第3天的24小时……
size(y1)
x(:,1:2,1,1)
y1(1:48,1,1) %可以用前两天数据检查一下
x1=flip(x);
y2=reshape(x1,2,12,31*24);%重构数组, 现在这个是错的,并不是把一个月内的数据按时间展开了,而是31天的第一小时,31天的第二小时,31天的第三小时……
size(y2)
x1(1,1,1:2,:)
y2(1,1,1:48) %可以用前两天数据检查一下
z1=repmat(x,2,1,1,1); %重复数组副本, 第一维度复制1次
size(z1)
z2=repmat(x,1,3,1,1); %重复数组副本, 第二维度复制2次
size(z2)
m=nanmean(x,3); %对非首尾的维度进行某种运算,如求平均,对应维度长度变为1
size(m)
m1=squeeze(nanmean(x,3)); %删除数组长度为1的维度
size(m1)

循环和条件语句

if语句

x=1;
y=0;
add=0;
if add==1
    x
else 
    y
end

while语句

x=1;
y=0;
i=1;
while i<=5
    x
    i=i+1;
end

for循环

x=1;
y=0;
for i=1:5
    y
end

for循环和while的区别在于:

for是有限次循环,明确了循环次数;while可以是无限次循环,只要满足条件就一直循环。

就好比银行办业务,

第一种:上午9点开门营业时,一口气来了100个人,我把门一关,100个人办完下班,这是for;

第二种:上午9点开门营业,陆陆续续有人来办业务,只要顾客是在下午5点之前进门来的,我都给办理,这是while。


数据导入和存储

数据类型:int, double, string, char, cell, struct……

x=2021
help x
y1=num2str(2021) %数值转字符
help y1
size(y1)
y2=cast(x,'int32')
help y2
z=str2num(y1) %字符转数字
help z

cell2mat %元胞转矩阵
num2cell %数值转元胞

数据文件类型:.mat, .txt, .csv, .xlsx, .nc……

matlab格式化数据:.mat

clc;clear;
x=zeros(1,5)
y=ones(1,5)
save example.mat %将数据存成mat格式
save x.mat x  %将某个变量存成mat格式
clear;
load example.mat %加载mat文件数据
x
y

文本文件:.txt

data=ones(2,12)
for mm=1:12
    filename=['../month' num2str(mm,'%02d') '.txt'];
    fileID=fopen(filename,'wt'); %写入文件
    fprintf(fileID,'%10.8f\n',data(:,mm));
    fclose(fileID);
end

for mm=1:12
    filename=['../month' num2str(mm,'%02d') '.txt'];
    fileID=fopen(filename,'r');
    dat = textscan(fileID, '%f', 'HeaderLines',0); %textscan读进来的是元胞数据
    data=cell2mat(dat)  %元胞转数组
    fclose(fileID);
end

文本文件:.csv (逗号分割文本文件,没有任何表格格式)

data=readmatrix('example.csv'); %从文件读取矩阵
data=importdata('example.csv'); %从文件加载数据
data=csvread('example.csv'); %不推荐使用

电子表格:.xlsx

data=readmatrix('example.xlsx'); %从文件读取矩阵
data=importdata('example.xlsx'); %从文件加载数据

科学数据:netCDF

lat=double(ncread('../data/2_25_latlon.nc','LAT'));%从文件读取数据,第一个参数为文件名,第二个参数为变量名
lon=double(ncread('../data/2_25_latlon.nc','LON'));

var1=lat;
var2=lon;
outfile=['example.nc']; %存储数据为nc格式
nccreate(outfile,'varname1','Dimensions',{'dim1',144,'dim2',91},'Datatype','double','Format','classic');
ncwrite(outfile,'varname1',var1);
nccreate(outfile,'varname2','Dimensions',{'dim1',144,'dim2',91},'Datatype','single','Format','classic');
ncwrite(outfile,'varname2',var2);
ncdisp(outfile);

统计分析

基本统计处理(描述性统计)

x=[1 3 5 7 9 7 5 3 1];
y1=min(x) %求取最小值
y2=max(x) %求取最大
y3=mean(x) %求取平均值
y4=median(x) %求取中位数
y5=std(x) %求取标准差
y6=sum(x) %求和

带有缺省值的数据

x=[1 NaN 5 7 9 7 5 3 1];
y1=min(x); %求取最小值
y2=max(x); %求取最大
y3=nanmean(x); %求取平均值
y4=nanmedian(x); %求取中位数
y5=nanstd(x); %求取标准差

如果这里不加nan,还和上面一样操作,那么计算平均值、中位数、标准差的结果就全都是NaN了。


基础篇就先这么多吧。虽然都是很简单的内容,但总结起来也花了很多时间呢。

自己梳理了一遍,也希望能给大家带来一点点小帮助。

下一篇讲画图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

J同学的大气笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值