自学MATLAB应用基础(徐金明主编,清华大学出版社)笔记
欢迎大家批评指正
变量命名规则:
1.变量名区分大小写
2.变量名不超过31位
3.变量名以字母开头,组成可以是字母数字下划线、不能是标点
例1-1 读取文件
load('c01_01.txt');
whos,
例1-2 结构数组
s.a = 12.7; s.b = {'abc', [4 5; 6 7]}; %结构数组s
save c01_03.mat s; %保存s
load c01_03.mat;
whos,
r2 = s.b(2)
Y2 = r2{1,1}
size(Y2) %查看s.b(2)的大小
例1-3 读、写数据
%要提前建立一个excel文件
[n1, t1, r1] = xlsread('c01_05.xlsx'); %读入xls中的数据
MM = {1 2 3; 'tt' 'tt1' 'tt2'};
xlswrite('c01_06.xlsx',MM) %把MM的数据写入文件
例1-4、1-5 读取excel中的特定地方的数据
A=xlsread('c01_08.xlsx','sheet1','B4:D6') %读取excel中的特定地方的数据
[A,B,C]=xlsread('c01_08.xlsx','sheet1','B4:D6') %A读取数值,B读取文本,C读取数值和文本
例1-6 存储数据到excel特定位置
A = [1 2 3; 4 5 6; 7 8 9];
xlswrite('c01_08.xlsx',A,'sheet2','B2');
数组和矩阵的引用
x(n); %一维数组中的第n个元素
x(n1:n2); %一维数组中的第n1到n2个元素
x(m,:); %二维数组第m行的所有元素
x(;,n); %二维数组第n列的所有元素
x(m,n1:n2); %二维数组第m行的n1到n2个元素
细胞数组
例1-7 创建细胞数组
A(1,1) = {3+2i};
A(1,2) = {'time'};
A(2,1) = {[1 2 3 4]};
A(2,2) = {[1 2;3 4]};
A
结构数组
例1-8 结构数组
student=struct('name',{'Liu','Wang'},'Age',{'20','21'}) %建立一个维数是[1 2]的数组
student(1) %查看数组第1个结构的数据
student(2) %查看数组第2个结构的数据
student(2).name %通过属性名引用数据
矩阵的修改
A(:,n)=[] %删除矩阵A的第n列
A(m,:)=[] %删除矩阵A的第m行
A(m,n)=a %修改矩阵A的第m行n列的元素为a
A(m,:)=[a b ...]
B=A(:) %矩阵A中的所有元素按列顺序合并成一个列向量
B=fliplr(A) %矩阵A左右翻转
C=flipud(A) %矩阵A上下翻转
D=rot90(A) %矩阵A逆时针90度旋转 90不能改
E=flipdim(A,k) %矩阵按照指定维数k翻转,k不能为负数、0
B = repmat(A,m,n) %矩阵B=m*n个矩阵A组合
B = repmat(A,[m n]) %与上式功能一样
C = repmat(A,[m n k]) %k个m*n的A矩阵
%一个巧妙的情况,建立5*5的全是0的矩阵
C=[0]
D=repmat(C,5,5)
B=floor(A) %A中的数据向负无穷方向取整
C=ceil(A) %A中的数据向正无穷方向取整
D=round(A) %向最近的整数取整
E=fix(A) %向0的方向取整
B=rat(A) %有理化A
B=rem(A,k) %A除以k后的余数
B=eye(n) %n*n单位矩阵
B=eye(m,n) %m*n单位矩阵
B=eye(size(A)) %与A相同大小的单位矩阵
ones可替换上式中的eye 表示全1阵
zeros 0
B=rand %随机产生一个随机数 随机数在0到1内
B=rand(m*n) %m*n随机矩阵
B=rand(n) %n*n随机矩阵
B=rand(m,n,p,...)
B=rand(size(A))
M=magic(n)
A=diag(v,k) %v是个向量,k是对角线的位置,实际运行就晓得了
L=tril(A) %抽取A中主对角线的下三角部分构成矩阵L
L=tril(A,k) %抽取A中第k条对角线的下三角部分构成矩阵L
U=triu(A) %抽取A中主对角线的上三角部分构成矩阵L
U=triu(A,k)
H=hilb(n) %n阶Hilbert矩阵 H(i,j)=1/(i+j-1)
H=invhilb(n) %n阶逆Hilbert矩阵
c=[1 2 3]
r=[4 5 6]
T=toeplitz(c,r) %c作为第一列,r作为第一行,其余元素与左上角相等
T=toeplitz(r)
矩阵基本运算
* 算术乘
.* 点乘 (点对点乘,不是矩阵算法)
^ 算术乘方
.^ 点乘方
\ 算术左除
.\ 点
/ 算术右除
./ 点
== 等于
~= 不等于
>= 大于等于
xor 逻辑异或
例1-9 逻辑运算
A=[1 1;
0 1];
B=[0 1;
0 0];
b=0;
C1=A&b
C2=A|b
C3=xor(A,B)
all 判断是否所有元素为非零值
any 判断是否存在一个元素为非零值
exist 查看变量或函数是否存在
find 找出向量或矩阵中非零元素的位置标识
isempty 判断矩阵是否为空矩阵
isequal 判断几个对象是否相等
isnumeric 判断对象是否为数值型
例1-10
a=[1 3 5];
A=[1 2 3;
0 4 5];
B1=all(a)
B2=all(A)
B3=all(A,2)
例1-11
a=[0 3 0];
A=[1 0 3;0 0 5];
B1=any(a)
B2=any(A)
B3=any(A,2)
例1-12 找出A中等于1的元素位置
A=[1 2;1 3];
[i,j,k]=find(A==1)
例1-13 判断str1、str2、str3是否相等
str1='bad';
str2='bad';
str3='dab';
strcmp(str1,str2)
strcmp(str1,str3)
S=char(T) %将由正整数组成的矩阵T转换成字符串矩阵
int2str(A) %将数或矩阵A转化为字符串或字符串矩阵
num2str(A,k) %将数或矩阵A转化为字符串矩阵(最多k位有效位)
num2str(A,format)
eval(S) %将字符串S转化为数值
str2num(S) %将字符串S转化为数值
strcmp(str1,str2) %将两个字符串进行比较
B=strcat('is','bad','good') %将字符串连接成新的字符串
inline 定义函数
比如 f=inline('a*x+b','a','b','x'); f(1,2,3)
例1-14 f=5sin(x)+3cos(y)
% f=5sin(x)+3cos(y)
f=inline('5*sin(x)+3*cos(y)','x','y');
v=subs(f,'x',5); %将字符串f中的x赋值5得到结果表达式或者结果值v
vpa(v) %将结果以小数形式显示
矩阵的高级运算
B=inv(A) %A的逆矩阵
B=pinv(A) %矩阵伪逆矩阵
n=norm(X) %向量X的欧几里得范数
k=rank(A) %矩阵A的秩
n=numel(A) %返回矩阵A中元素的个数n
d=eig(A) %返回方阵A的特征值d
S=svd(X) %返回矩阵X的奇异值向量s
条件语句
例1-15
a=1;
if a==0;
disp('nihao1');
else
disp('nihao2');
end
for循环
例1-19
for (i=1:3)
for (j=1:4)
A(i,j)=1.5;
end;
end;
A
while 循环
例1-20
n=1;
nF=1;
while nF <1e100 %1e100 1*10的100次方
n=n+1;
nF=nF*n;
end
n,nF,
函数文件
例1-21 定义一个函数文件并调用该函数
%在MATLAB里直接运行,下面的function文件定义好再运行这三行代码
a=[1 3];
b=[2 2];
c=c01_29(a,b)
%另外新建一个function文件,文件名为c01_29.m,内容如下,文件要在MATLAB运行路径下
function z = c01_29(x,y)
z = sin(x.^2)+ y.^2-2*x-5;
end
例1-22 函数套函数
%MATLAB里运行的代码
[q,w]=c01_31(1,2)
%c01_31.m的内容
function [c,d]=c01_31(a,b)
[u1,u2]=c01_31_1(a);
c=u1+u2;
d=b+1;
function [t1,t2]=c01_31_1(s)
t1=s;
t2=s.*s;
end
end
代码保密
为了保密代码,对已经成功运行的m文件,可以使用命令pcode将m文件转化为p文件,p文件是不能打开只能运行的文件~,p文件和m文件调用方式相同。(相当于Windows下的exe文件)
举个例子:
a=[1 3];
b=[2 2];
c= c01_29(a,b)
pcode c01_29.m c01_30.m
上述代码运行完后,会在路径下生成文件c01_29.p和c01_30.p,它可以通过在MATLAB命令窗口输入c01_30运行文件
文件相关操作命令
例1-24
x=[1 2.1;3.0 4];
fid=fopen('c01_34.txt','w');
fprintf(fid,'%6.2f %12.8f\n',x);
fclose(fid);
%读取文件数据
fid=fopen('c01_34.txt');
A=fscanf(fid,'%g %g',[2 inf]);
fclose(fid);
A
simulink
启动Simulink
把需要的东西拖进来
独立应用程序的创建
1.使用mcc命令创建独立应用程序
例1-26 将已有的M文件c01_36.m和c01_37.m转化为独立应用程序
%c01_36.m文件
function c01_36
r=c01_37(5)
end
%c01_37.m文件
function r=c01_37(n)
r=zeros(n,1);
for k=1:n
r(k)=rank(magic(k));
end
end
%运行程序
mcc -m c01_36.m c01_37.m %敲代码一定要细心,我把rank错打成ramk了呜呜呜,看了半天呜呜呜
然后对应路径下就会出现c01_36.exe文件,我们在Windows系统中,点菜单命令 开始 运行 输入cmd,然后cd到对应的exe路径下,然后输入命令c01_36就可以运行exe程序了。
2. 使用命令deploytool创建独立应用程序
(还没学明白,有时间补上)