MATLAB学习笔记.docx
- 文档编号:29856761
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:24
- 大小:26.01KB
MATLAB学习笔记.docx
《MATLAB学习笔记.docx》由会员分享,可在线阅读,更多相关《MATLAB学习笔记.docx(24页珍藏版)》请在冰豆网上搜索。
MATLAB学习笔记
目录
6.1复数3
6.3其他二维画图3
6.4其他二维画图
(2)4
7.1高维数组4
7.2三维作图4
7.3三维作图
(2)4
7.5稀疏矩阵4
7.6稀疏矩阵的创建及转化5
7.7三维版本的绘图函数5
8.1单元数组6
8.2单元数组的创建和显示6
8.3字符型单元数组7
8.4单元数组的嵌套7
8.5结构数组8
8.6结构数组的创建与修改9
8.7结构数组的函数9
8.8结构数组的嵌套和变换9
9.1多项式10
9.2插值与拟合10
10.1符号对象及其表达式11
10.2符号矩阵及符号运算11
10.3算术运算与独立变量11
10.4表达式简化13
10.5符号微积分14
10.6符号积分变换15
10.7求方程解析解15
10.8常微分方程(组)解析解15
11.1输入输出函数15
11.2文件操作17
11.3二进制I/O函数18
11.4格式化I/O函数
(1)19
11.5文件读取实例20
11.6格式化I/O函数23
11.7文件位置和状态函数23
11.8其他文件操作函数24
12.1matlab图形系统24
12.2图形对象的属性25
12.3实例讲解25
12.4自定义属性及查找对象26
12.5位置及单位位置26
12.6子对象的位置28
12.7对象的默认属性28
12.10GUI计算实例28
12.11对话框29
6.1复数
isreal判断数值是否为实数,若是则返回1,不是则返回0
real取复数的实部
imag取复数的虚部
conj取复数的共轭复数
Abs取数的绝对值,复数的幅值
Angle取复数的幅角
double对一个数据取双精度实数形式
==复数实部和虚部均相等
~=不等号
复数不能判断大小
polar画极坐标图
plot(real(y),imag(y))可以画出实部虚部图
plot(y)也可以同上
plot复数直接画图会抛掉虚部
6.3其他二维画图
stem棍形图
stairs阶梯图
bar竖直条形图
barh水平条形图
compass罗盘图前面几种调用方式均相同
pie计算所占百分比调用方式不同
6.4其他二维画图
(2)
hist柱状图直角坐标系中
rose柱状图极坐标系中
7.1高维数组
用下标的方法定义即:
a(:
:
1)=[];第一页的二维数组
rand()生成一个随机均匀分布的矩阵
拼接法:
reshape()将一个以行存在的数按列进行拼接成举证
例:
a=1:
18;
reshape(a,3,3,2);
rapmat(a,[m,n,p])将数组a在行上平铺m次,列上平铺n次,页上平铺p次
cat
7.2三维作图
plot3绘制3D曲线图
7.3三维作图
(2)
surf(x,y,z)表面图
mesh(x,y,z)网格图meshigrid自动划分网格
contour(x,y,z)等高线图
7.5稀疏矩阵
0比较多,只储存数值不储存0
sparse数据类型只储存每一个非零元素的三个值:
元素值,元素的行号和列号(将矩阵换成稀疏矩阵存储)
full将稀疏矩阵转换为普通矩阵
issparse判断是否为稀疏矩阵
nonzeros判断一个矩阵有多少个非零元素
nzmax计算矩阵中非零元素所需要的内存量(占用的内存数量)
当矩阵是普通矩阵时候,返回的是矩阵所含元素的个数;当矩阵是稀疏矩阵时候,返回的是为非零元素分配的内存值。
7.6稀疏矩阵的创建及转化
speye稀疏单位矩阵
sprand稀疏随机均匀分布的矩阵
sprandn稀疏随机正态分布的矩阵
稀疏矩阵和普通矩阵做运算得到普通矩阵
find找出矩阵中所有非零元素的位置
spy稀疏矩阵的可视化(画出稀疏矩阵的散点图)
spones一个矩阵中所有的非零元素全用1来替代
eg:
c=sum(spones(b))得到的是b矩阵中有非零元素的个数
7.7三维版本的绘图函数
ezplot(f)只能绘制平面图形
ezmesh(f)绘制三维图形网格线图不需中间变量
sphere绘制球体
cylinder绘制圆柱体
peaks峰值函数
patch曲线片
fill3填充空间图形
quiver绘制箭头图形
feather绘制羽毛图形
8.1单元数组
创建:
赋值语句、cell函数、{}
赋值语句:
内容索引:
把内容赋给单元数组中的某一个数,调用/存储格式:
a{1,1}=[];
eg:
c{1,1}=[123;145;987];
c{1,2}=’as’;
c{2,1}=[];
c{2,2}=’Ik’;
单元索引:
格式a(1,1)={[123456]};
单元数组和普通数组名字不要重合
8.2单元数组的创建和显示
cell()创建一个空的单元数组
c={[12;34],’helloworld’;[],’’}用{}创建
c(1,1)显示位置,而c{1,1}显示上一位置的内容;
显示某个元素,用{};若完整显示则用celldisp,图形显示cellplot
单元数组的扩展:
例c为两行两列,则扩展为三行两列方法如下:
c{3,1}=[];c{3,2}=[];或者c(3,1)={[]};c(3,2)={[]};
8.3字符型单元数组
不需要要求维数相同
strvcat()将不同维数的字符串进行连接
例如:
strvcat(‘I’,’am’)此函数补了空格才能连接的
char将字符型单元数组转换成普通的数组
cellstr将普通的数组转换成字符型单元数组
iscellstr判断是否为普通的数组还是字符型单元数组的,是字符型单元数组的返回1
mat2cell普通数组转换为单元数组即将废除
cell2mat单元数组转换成普通数组
num2cell将每一个数字都转换成一个单元数组然后分别存储了,而mat2cell则将整个
数组转换成单元数组然后一起存储了,是一个1×1的单元数组
iscell判断是不是单元数组
删除单元数组整行的方法:
a(1,:
)=[];令其为空就删除了
8.4单元数组的嵌套
一个单元数组的其中一个元素也是单元数组
a={[12;34],[12];[34],[‘helloworld’]};
b={a,[56;78];[],a};
访问a中第一个数组的第一个数:
b{1,1}{1,1}(1,1)=1
单元数组应用在图形用户界面
可以用在不定参数中,这种函数通过varargin实现,这个参数显示在输入参数列表的最后一项,它返回1个单元阵列,所以一个输入实参可以包括任意数目的实参,每一个实参都变成了由varargin返回的例如:
fprintf(‘%’,ads,ad,sd,d)函数不确定
8.5结构数组
普通数组虽然有名字,但元素只能通过下标来访问,类型只能是一种类型
单元数组虽然类型可以不同,但是仍然只能通过下标来访问
结构数组是元素带名字的,可以储存不同数据类型的一种数组,元素称作域,数组名、域名可以访问具体元素
创建:
赋值语句和struct函数
创建一个学生数组
stduent.name='Mike';
stduent.age=18;
stduent.gender='boy';
stduent.grade=[989099];
stduent
(2).name='Mike';
stduent
(2).age=18;
stduent
(2).gender='boy';
stduent
(2).grade=[989099];
8.6结构数组的创建与修改
struct函数:
s=struct(‘Math’,99,’English’,{});会生成一个空的结构数组
修改直接输入:
stduent
(1).age=18;增加了age这个域,而
(2)会自动增加这个域,并且为空
删除:
rmfield删除结构数组中的某一个域
student=rmfield(student,’age’);
setfield设置相应的域
getfield取相应的域
8.7结构数组的函数
orderfields对结构数组里面的域进行排序
isstruct判断是否为结构数组
isfield是否存在某一个要判断的域名,是不是该结构数组相应的域
isfield(stduent,’age’)=1;
size(stduent)size(student.name)
8.8结构数组的嵌套和变换
结构数组的域可以是另一个结构数组
student
(1).family.father=’John’;
student
(1).family.motherr=’caan’;
访问:
student
(1).family.father
struct2cell结构数组转成单元数组
cell2struct单元数组转成结构数组
fieldnames获得一个结构数组的域名
9.1多项式
求值:
polyval
例:
a=[2890930495];
polyval(a,3)%求x=3时的值
四则运算:
conv(乘)deconv(除)
例:
求根:
roots多项式为行向量根为列向量
用根来构造多项式:
poly(r)r为根的列向量
9.2插值与拟合
interp1(一维插值)spline(三次样条插值)
interp1q(快速一维线性插值)interp2(二维插值)
interpft(FFT法的一维插值)interp3(三维插值)interpn(n维插值)
polyfit拟合
10.1符号对象及其表达式
定义符号变量:
sym(A)
symsargs1args2real/unreal
可以定义多个符号变量
10.2符号矩阵及符号运算
symsabc
sym(‘[123;456]’);
ans=
[1,2,3]
[4,5,6]
或者[123;456]=anssym(ans)得到如上结果
10.3算术运算与独立变量
当符号表达式中含有多个变量时,只有一个变量是独立变量。
MATLAB基于以下规则选择独立变量:
(1)因为i和j是虚单位,它们不能作为独立变量
(2)表达式中有x作为符号变量时,x就是独立变量
(3)表达式中没有x作为符号变量时,就从表达式中挑选打头字母最靠近x的符号变量作为独立变量。
如果表达式中有与x前后等距的两个字母符号变量时,选择排序在x后面的哪一个。
例如表达式中没有x,但同时有w和y两个符号变量,则首选y。
findsym
expand()将两个相乘的多项式可以展开成高次到低次的形式
例如f1=4*x^5+2*x^4+6*x^3+9*x^2+3*x+8;
f2=6*x^3+8*x^2+4*x+6;
>>f1*f2
ans=
(6*x^3+8*x^2+4*x+6)*(4*x^5+2*x^4+6*x^3+9*x^2+3*x+8)
>>expand(ans)
ans=
24*x^8+44*x^7+68*x^6+134*x^5+126*x^4+144*x^3+130*x^2+50*x+48
symsxyzt;
A1=[xy;zt];
>>A2=[xy;zt]';
>>A1+A2
ans=
[x+conj(x),y+conj(z)]
[z+conj(y),t+conj(t)]
A1-x
ans=
[0,y-x]
[z-x,t-x]
A1*A2
ans=
[x*conj(x)+y*conj(y),y*conj(t)+x*conj(z)]
[t*conj(y)+z*conj(x),t*conj(t)+z*conj(z)]
A1.*A2
ans=
[x*conj(x),y*conj(z)]
[z*conj(y),t*conj(t)]
10.4表达式简化
collect合并同类项
①fx=collect(f);
②g=(-1/4)*x*exp(-2*x)+3/16*exp(-2*x);
gx=collect(g,exp(-2*x))
gx=(3/16-x/4)/exp(2*x)
expand多项式展开
factor因式分解
simplify一般化简
simple不定化简
numden通分
pretty书写格式美化
10.5符号微积分
符号极限:
limit(F)F默认趋向0
eg:
symsxyz
>>f=sin(x)/x;
>>limit(f)
ans=1
limit(F,a)F趋向a
limit(F,v,a)强制指定v为新的独立变量,例如求二元函数对y的极限,强制另y为v
例如:
f1=sin(x+y)/(x+y);
>>limit(f1,y,0)%强制让y趋向0
ans=sin(x)/x
limit(F,v,a,’right’)还可以求左右极限,左为left右为right
符号微分:
diff(S,’v’)v为指定求微分的变量
diff(S)默认取x或者离x近的独立变量
diff(S,n)求n次微分
diff(S,’v’,n)对指定变量V取n次微分
例如:
f2=sin(x+y);
>>diff(f2,'y',3)
ans=-cos(x+y)
符号积分:
int(S,v)指定对v取积分
int(S)默认对x求不定积分
int(S,v,a,b)对指定的v变量求定积分,上限是a,下限是b
int(S,a,b)默认对x求定积分,上限是a,下限是b
泰勒级数:
taylor(f,n,v)对指定变量v取n次泰勒展开
taylor(f)对默认x变量取6次泰勒展开
taylor(f,n,v,a)对指定变量v在v=a点取n次泰勒展开
10.6符号积分变换
傅里叶变换:
fourier反变换:
ifourier
拉氏变换:
laplace拉氏反变换:
ilaplace
Z变换:
ztransZ反变换:
iztrans
10.7求方程解析解
solve
10.8常微分方程(组)解析解
dsolve例:
dsolve('Dy=-a*x','x')
ans=C2-(a*x^2)/2
11.1输入输出函数
textread没有下面的限制加*则不加载该项
load默认加载文件所有的数据均是同一种数据类型,同时如果加载的数据是一个多行多列的文件,那么要求每一行所对应的列都是相同的,否则会出错。
save
load函数和save函数效率高,可移植性好,能够最大程度的保留数据的信息。
Examples:
Supposethetextfilemydata.datcontainsdatainthefollowingform:
SallyType112.3445Yes
JoeType223.5460No
BillType134.9012No
Readeachcolumnintoavariable
[names,types,x,y,answer]=textread('mydata.dat','%s%s%f%d%s');
Readfirstcolumnintoacellarray(skippingrestofline)
[names]=textread('mydata.dat','%s%*[^\n]')
Readfirstcharacterintochararray(skippingrestofline)
[initials]=textread('mydata.dat','%c%*[^\n]')
Readfileasafixedformatfilewhileskippingthedoubles
[names,types,y,answer]=textread('mydata.dat','%9c%5s%*f%2d%3s');
ReadfileandmatchTypeliteral
[names,typenum,x,y,answer]=textread('mydata.dat','%sType%d%f%d%s');
Readm-fileintocellarrayofstrings
file=textread('fft.m','%s','delimiter','\n','whitespace','');
Toreadallnumericdatafromadelimitedtextfile,useasingleoutput
argument,emptyformatstring,andtheappropriatedelimiter.For
example,supposedata.csvcontains:
1,2,3,4
11.2文件操作
Matlab中对文件进行操作,首先需要建立一个文件标识(fileid),文件标识是一个正整数,通过标识能够知道我们当前对哪个文件进行操作。
注意,当文件标识为1时代表标准输出,文件标识为2是标准错误(stderr)。
其他标识均为临时标识,文件打开时创立,关闭时消失。
Matlab中文件分为二进制文件和格式化文件。
fopen打开文件若fid小于0(-1)则表示打开失败
fclose关闭文件
fid=fopen('dist2.m')
fid=3
>>fclose(fid)
ans=0
fid=fopen('dist2.m','r')
fid=3
>>fclose(fid)
ans=0
11.3二进制I/O函数
fopen(‘all’)一次打开多个文件fid
fclose(‘all’)
[filename,permission,format]=fopen(fid)
fwrite打开文件并写入
fread打开文件只读
例如:
fid=fopen('a.dat','w');
>>x=[123;456];
>>count1=fwrite(fid,x)
count1=6
fclose(fid)
ans=0;
fopen('a.dat','r')
ans=3
>>[array,count2]=fread(fid,inf)
array=
1
4
2
5
3
6
count2=
6
11.4格式化I/O函数
(1)
count=fprintf(fid,format,val1,val2)
%-12.5e负号代表左对齐
代表的是域宽
点后面代表的是有多少个有效数字
e代表的是用科学计数法来显示
例如:
fprintf('%-12.5e',1234.5678866776);
1.23457e+003域宽表示所有的字符长度,包括点和e和+一共12
11.5文件读取实例
再次读取前应先关闭然后再打开
fid=fopen('a.dat','rt');
>>[z,count]=fscanf(fid,'%f',inf)
z=
10
20
30
40
count=
4
>>[z,count]=fscanf(fid,'%f',inf)
z=
[]
count=
1第一次指示符表示已经读取到最后一个数据了,再次操作必然读取不出了
fid=fopen('a.dat','rt');
>>[z,count]=fscanf(fid,'%d',inf)
z=
10
count=1因为当%d读取到10之后,小数点后面不是%d形式所以不再读取
fid=fopen('a.dat','rt');
>>[z,count]=fscanf(fid,'%d.%d',inf)
z=
10
0
20
0
30
0
40
0
count=
8先匹配%d然后是小数点,然后再匹配%d所以得到8个数据
[z,count]=fscanf(fid,'%c',inf)
z=
10.020.0
30.040.0
count=
20%c逐个字符读取空格,小数点,回车都属于一个字符
fid=fopen('a.dat','rt');
>>[z,count]=fscanf(fid,'%s',inf)
z=
10.020.030.040.0
count=4%s按字符串读取数据分隔符可以是空格键、TAB、也可以是回车键这里有三个空格,返回时候会忽略空格
创建一个含有10000个随机数的数组,以只写方式打开一个自定义文件,用64位浮点数格式把这个数据写入磁盘,并关闭文件。
out_array=rand(100,100);
filename=input('请输入文件名:
','s');
[fid,msg]=fopen(filename,'w');
iffid>0
count=fwrite(fid,out_array,'float64');
disp([int2str(count)'datawaswritten']);
fclose(fid);
else
disp(msg);
end
[fid,msg]=fopen(filename,'r');
iffid>0
[in_array,count]=fread(fid,[100100],'float64');
disp([int2str(count)'datawaswritten']);
fclose(fid);
else
disp(msg);
end
11.6格式化I/O函数
line=fgetl(fid),将整行当做字符串返回,并去除换行符,一次读取一行,直到到文件结尾会返回-1
fgets同上,区别在于不去除换行符
11.7文件位置和状态函数
文件是否存在:
exist通过w或者w+方式打开文件时候会覆盖掉原有的内容,所以在打开文件之间应该判断文件是否存在,并让用户判断是否覆盖该文件
文件是否到尾部:
feofendoffile的缩写;
文件指针位置:
ftell当对该文件进行读或写的时候,当前插入点所在位置就是指针位置;读是从指针向后读取,写是从当前位置进行插入,或覆盖后续内容即改写;
文件指针的移动:
frewind和f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 学习 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)