自学1 MATLAB程序设计基础

自学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创建独立应用程序

(还没学明白,有时间补上)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值