姓名:陈燕民
班级:11信息2班
学号:201124093246
经过一学期的c++的学习,我们开始转化学习Matlab软件的学习。学习Matlab软件应用是一次更高要求的学习计划,也是一种结合我们信息专业背景的规划。为此我感受到了老师的良苦用心!
首先我想说的是,matlab跟其他语言不一样(我用的比较多的编程语言,除了matlab就应该是c或c++了。) Matlab是一个基于矩阵运算的软件,这恐怕是众所周知的事情了,但是,真正在运用的时候(就是在编程的时候),许多人(特别是我们这些初学者)往往没有注意到这个问题,因此,for循环(包括while循环)满天飞…………..这不仅是暴殄天物(没有发挥matlab所长),还浪费了我们自己宝贵的时间。我这里想说的一点是,初学者往往在初始化矩阵的时候注意到这个问题,懂得了使用矩阵而不是循环来赋值,但是,在其他环节上,就很容易疏忽,或者说,仍然没有摆脱C++的思想。举个例子吧,下面的代码是我之前写的,虽然老师讲解过后但是仍然会出现类似的问题:
J=0;
lt=size(imf1,2);
for(i=1:lt)
if(abs(imf1(i))>1)
J=1;
break
end
end
上面的代码实现了一个目的――检查信号imf1(一个向量)是否存在绝对值大于1的点,这显然是基于C++的思想写出来的。如果在matlab下面,其实用两个语句就足够了(当然,可以合并为一个):
q=find(imf1>1);
J=~isempty(q);
这样的修改带来的好处是很可观的。
又如:
forj=1:num
imf1(start1+j)=2*li1(j+1)-imf1(start1+j);
end
这是一个对称翻折的问题,它完全可以用以下这个语句简洁表示:
imf1(start1+1:start1+num)=2*li1(2:num+1)-imf1(start1+1:start1+num);(这个是在贴吧求教高手得的)
因此,如果是我们这些初学者,可以先用循环(基于C++的思想)来编写代码,然后看看能否用matlab的语言(基于矩阵的思想)来改进。当然,这样做的前提是我们对matlab提供的一些函数比较熟悉才行,这些函数在matlab的“帮助”那里搜索“FunctionsUsedinVectorizing”就可以找到一些,其他的也可以找相关的书籍(没找到?不可能,电子版总可以下载到的)
对提高matlab编程能力的方法,我想主要有以下三个:
1.查help
2.多上上论坛,搜索帖子、发帖子问人
3.阅读别人、特别是牛人的程序
当然了,正如所有的程序语言一样,“3分课本7分上机”,一定要动手才行,不能光看。多想、多思考、多尝试,才是正路。
最后,整理一下常用的快捷键(用【】表示)或命令:
1.在命令窗口(CommandWindow)中:
1)【上、下键】――切换到之前、之后的命令,可以重复按多次来达到你想要的命令
2)clc――清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上显示出来的语句清除掉
3)clear――这个才是清空当前工作区的变量命令,常用语句clearall来完成
4)【Tab】键――在[email]matlab@hit.edu.cn[/email]看到的:在command窗口,输入一个命令的前几个字符,然后按tab键,会弹出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。目前讨论结果是:matlab6.5版本中,如果候选命令超过100个,则不显示。而在matlab7.0以后版本中,则没有这个限制,均可正常提示(我们用的就是7.0的,还是老师高明,佩服!)
5)【Ctrl+C】(或【Ctrl+Break】)――在matlab程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个Matlab程序关掉。不过进行此操作的前提是能够激活切换到命令窗口才行,呵呵。
2.在编辑器(Editor)中:
1)【Tab】(或【Ctrl+]】)――增加缩进(对多行有效)
2)【Ctrl+[】--减少缩进(对多行有效)
3)【Ctrl+I】--自动缩进(即自动排版,对多行有效)
4)【Ctrl+R】――注释(对多行有效)
5)【Ctrl+T】――去掉注释(对多行有效)
6)【Ctrl+B】――括号配对检查(对版本6.5有效,但版本7.0无效,求老师指点,其他版本没有测试过)
7)【F12】――设置或取消断点
8)【F5】――运行程序
其余的例如在Debug状态下的快捷键就不多说了,自己看菜单Debug吧
Coming:
1.help:最有效的命令
其实,可以这样说吧,如果离开matlab软件,我想我自己是基本上什么都不会。一遇到什么问题,通常
我的第一反应是:help,就先说说自己对help的一些常用方法吧。
1)命令窗口直接敲“help”,你就可以得到本地机器上matlab的基本的帮助信息。
2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工具箱,直接在命令窗口中敲入
Help toolboxname,一帮可以得到本工具箱有关的信息:版本号,函数名等。
3)知道函数名,直接用help funname就可以得到相应的帮助信息。
2.see also:不可小瞧的关联
在用help命令的时候,可能因为我们开始估计的方向不一定完全正确,在列出的帮助信息中没有直接
给出的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的see also。
譬如:曾经遇到一个画椭球的问题。刚开始我以为这个命令函数应该在graph3d中给出的(顺带提一句,
只用help的时候我们就可以看到matlab\graph3d-Threedimensionalgraphs.。
于是乎,我又help graph3d,很遗憾,在Elementary3-Dplots.中我没有发现画椭球的函数,但是
我发现在see also中有SPECGRAPH.抱着试试的态度,我又help specgraph,^_^,这次在Solid modeling中找到了ellipsoid-Generateellipsoid。
3.lookfor:matlab中的google
当我们很多什么头绪都没有的时候,我们可以求助于它,往往会收到意想不到的效果。
譬如:一个师兄说过在gui编程的时候,他遇到过这样一个问题:想拖动鼠标时,要出现一个方框,就像我们在桌面上拖动鼠标,会出现虚线框一样。当初我也刚开始一定都不知道该查找什么东西,后来想起用它了。于是乎,
>>lookforRectangle(很不好意思,当时这个矩形我还是在金山词霸中搞定的-_-)
。果然,在其中就找到
这样一条信息:GETRECTSelectrectanglewithmouse.^_^
4.Edit:查看m源文件的助手
在应用matlab过程中,可能我们想看看它的m源文件,当然用editor定位打开也行,但是我经常采用的是直接在command窗口中用edit funname.m,就省去了定位的麻烦。
5.其他常用命令:which,what等
which:定位指定的函数和文件,最好带上参数-all,以便显示更加多的信息
what:获得指定目录的m文件,mex文件以及mat文件名列表
6.各个高校bbs的mathtools版
谁都不可能什么都懂,但是永远记住这样一句话:Two heads are better than one.多向他人请教,多相
互讨论,这不只是在于解决matlab的问题上。
我最经常去的bbs有:
.瀚海星云([url]http://fbbs.ustc.edu.cn/[/url]的mathtools版
.水木清华([url]http://www.smth.edu.cn/ver2.html[/url]的mathtools版
.饮水思源([url]http://bbs.sjtu.edu.cn/[/url]的mathtools版(个人比较喜欢)
.紫丁香([url]http://bbs.hit.edu.cn/[/url]的matlab版
8.一些专业网站
我所知道的有:
1)[url]http://www.mathworks.com[/url]mathworks的官方网站
2)[url]http://www.mathtools.net/MATLAB/index.html[/url]这里有很多好的工具箱或者
小的辅助函数
可以下载,不过是国外的,e文和网络对来说感觉都是很不爽的事情。
3)[url]http://matlab.myrice.com/[/url]Matlab大观园,估计只要在网上搜索过matlab
资料的就不会不知道它,园主是东北大学的薛定宇教授,一直从事MATLAB语言及其应用研究。
4)[url]http://passmatlab.myetang.com/MATLAB/INDEX.HTM[/url]文宇工作室
5)[url]http://sh.netsh.com/bbs/5186/[/url]matlab语言与应用,薛定宇的一个论坛
6)[url]http://www.matwav.com/resource/newlk.asp[/url]中国学术交流园地,除了matla
b有关外,还有很多其他的专业的文章。
最后一条,要大胆的去试,哪怕只有一丁点儿可能。
最后,matlab只是一个很好的应用工具而已,也不像vc,delphi,vb等开发工具,最多的还是应用于算法的验证,仿真等。我们应该的是尽可能的知道一点儿基础的,然后熟悉本专业的toolbox。(可惜,我现在一直没有这样的实际应用机会)
随着对技术的理解加深,有一些看法在逐步转变。以前以为一个好东西,总能够保持其优势。然而现实生活中,技术发展太块了,仅有这些还不够。不选择更新,只有被淘汰,无论是技术,还是做技术的人。
MATLAB真是一个好工具,也只能是一个好工具。它可以作为一个平台,承载知识和算法,那么核心的竞争力将是它实现的技术和产品。现在的公司,主营业务是通信软件。以后的职业规划,将更多的与通信沾边了。又是一个陌生的领域,又是一个必须要全力以赴的专业。(窃喜,自己的专业貌似还好。)
感谢MATLAB带给我的新思维,技术的路很漫长。回头只能看到自己的影子,希望明天有明媚的眼光!
003.矩阵操作
Matlab的基本数据元素就是矩阵,可以是2维、1维(向量)、3维或更多维。
一、 矩阵创建与表示
Matlab不用提前声明或定义变量,直接【起变量名、赋值、使用】(注1)。
1.特殊向量:(注2)
k = 1 : 1 : 10 % 创建行向量k,起始值1,步长1,终止值10
%默认步长是1, 即 k = 1 : 10
% 步长可以是负数(起始值>终止值)
运行结果:k = 1 23 4 5 67 8 9 10
2.一般矩阵:(字符串为元素的矩阵建议用元胞数组,下次内容)
A = [12,3;45,6] % 创建2行3列矩阵A, 矩阵大小不用预先定义 % 矩阵元素必须放在“[ ]”内
% 同行元素间用“, 或空格”隔开
% 行与行间用“;”隔开
% 矩阵元素可以是数值、变量、字符、函数表达式
运行结果:A=1 2 3
4 56
3.特殊矩阵:
ones(m,n)% 生成m×n维的全“1”矩阵
zeros(m,n) % 生成m×n维的全“0”矩阵
eye(m,n) % 生成m×n维的单位矩阵(多余的行或列全为0) diag(k或A) % 生成或提取对角矩阵
triu(A) % 提取矩阵A的上三角部分生成上三角矩阵
tril(A) % 提取矩阵A的下三角部分生成下三角矩阵
rand(m,n)% 生成m×n维的(0,1)区间均匀分布的随机矩阵
randn(m,n)% 生成m×n维均值为0,方差为1的标准正态分布随机矩阵 fiplr(A) % 矩阵A左右翻转
fipud(A) % 矩阵A上下翻转
fipdim(A,dim) % 矩阵A特定维度dim(1,2)翻转
sparse()% 生成稀疏矩阵
full() %将稀疏矩阵化为普通矩阵
4.矩阵的维度、大小、长度
A = [1 2,3;4 5,6];
a = ndims(A)% 返回矩阵A的维度(几维矩阵)
[I,J] = size(A)% 返回矩阵A各维度维数的大小(几行,几列)
L = length(A) % 返回矩阵A各维度维数的最大值(行数,列数的最大值) 运行结果:a = 2 I = 2 J = 3 L = 3
注:length() 通常用于测量向量的大小。
5. 矩阵拼接、扩充、变形
C = [A, B] % 水平拼接
C = [A, B] % 水平拼接
D = [A; B] % 垂直拼接
E = repmat(A,[1,2]) % 排成1×2的两块A,同 [A, A]
F = repmat(A,[2,1]) % 排成2×1的两块A,同 [A; A]
X = 1:24; % 1×24的一维行向量
reshape(X, 3,8); % 把X变形为3×8的二维矩阵
reshape(X, 3,8); % 把X变形为3×8的二维矩阵
二、矩阵元素的寻址和访问
1.访问2维矩阵(m×n)各元素的位置有两种方式:
①行列下标索引
A(i, j)——第i行,第j列的元素
②线性索引,也是矩阵存放元素的顺序,reshape()变形保持该顺序
A(1), A(2), ?, A(m*n)——元素依次取自第1列,再第2列,?? 故A(i, j) = A( (j-1)*m+i)
两种索引间的转换函数:
[I, J] = ind2sub( size(A), IND)
[IND] = sub2ind(size(A), I, J)
find() 函数常用来查找矩阵中满足一定条件的元素
A = [1 2,3;4 5,6];
ind = find(A>2);% 返回A中大于2的元素的线性索引值
[m,n] = find(A>2);%返回A中大于2的元素的行列下标索引值
[I, J] = ind2sub(size(A), ind) % 线性索引转行列下标索引 IND = sub2ind(size(A), I, J) %行列下标索引转线性索引 运行结果:I= 2 J = 1 IND = 2
2 2 4
1 3 5
2 3 6
2.用冒号“:”获取矩阵的一些元素
A(i, :)——矩阵A的第i行,所有列
A(:, j) ——矩阵A的第j列,所有行
A(:,i: j) ——矩阵A的第i到第j列,所有行
A(i:j, k:end)——矩阵A的第i到第j行,第k到最后一列 A(:, [1,3])——矩阵A的第1、第3列,所有行
A(:) ——按线性索引返回矩阵A的所有元素(向量)
3. 利用空矩阵删除矩阵元素
A(i, :) = []; % 删除矩阵A的第i行
A(:, j) = []; % 删除矩阵A的第j列
A(i:j, :) = [] % 删除矩阵A的第i到第j行
A(:, i:j) = [] % 删除矩阵A的第i到第j列
A(sub2ind( size(A), i, j) ) = [] % 删除矩阵A的第i行第j列的元素(注3)
三、矩阵运算与矩阵函数
1. 矩阵运算
(1) 通常的矩阵间运算
加、减、乘、幂: + - * ^
左除 \ :AX = B → X=A-1B → X = A\B
右除 / : YA = C → Y = C A-1 → Y = C/A
(2) 点运算——同型矩阵各个对应位置的元素做该运算 点乘、点左除、点右除、点幂: .* .\ ./ .^
.+ .- 同 + -
(3) 矩阵运算
转置: A’
方阵的逆:inv(A)
非方阵的广义逆:pinv(A) % ABA=A, BAB=B
矩阵或向量的范数:norm(A) = norm(A,2); norm(A,1); norm(A,inf) 方阵的行列式:det(A)
矩阵的秩:rank(A)
矩阵的迹:trace(A)
基础解系(矩阵的零空间):null(A)
标准正交化:orth(A)
化行最简型(初等行变换解线性方程组):rref(A)
两个子空间的夹角(两个向量的夹角):subspace(A,B)
方阵的特征值(对角阵d)与特征向量(v的列向量):[v,d]=eig(A)
2. 矩阵函数
min(A,dim) 按维度求矩阵A最小值,min(A) = min(A,1) 按列 max(A)=max(A,1) 求矩阵A各列的最大值
mean(A) = mean(A,1)求矩阵A各列的平均值
sort(A)矩阵各列按递增顺序排序
sort(A, 'descend') 矩阵各列按递减顺序排序
sum(A) 矩阵A各列元素求和
prod(A) 矩阵A各列元素求积
dot(A,B) A,B(同型)各列做内积(点积)
cross(A,B) A,B(至少某个维度是3维)的外积(叉积)
cumsum(A) 每列元素的累计和(第i行是A前i-1行元素的和) cumprod(A) 每列元素的累计积
四、三维矩阵
可以想象成一本书的“行、列、页”。
处理k个m×n的二维矩阵,可用一个m×n×k的三维矩阵A:
A(:, :, 1) 表示第1个m×n矩阵(第1页)
A(:, :, 2) 表示第2个m×n矩阵(第2页)
??????
A(:, :, k) 表示第k个m×n矩阵(第k页)
每个A(:, :, k)与2维矩阵操作一样。
D = rand(2,4,3) % 生成2×4×3的随机矩阵
DS = reshape(D,3,4,2) % 变形
运行结果:
D(:,:,1) = 0.1270 0.6324 0.2785 0.9575
0.9134 0.0975 0.5469 0.9649
D(:,:,2) = 0.1576 0.9572 0.8003 0.4218
0.9706 0.4854 0.1419 0.9157
D(:,:,3) = 0.7922 0.6557 0.8491 0.6787 0.9595 0.0357 0.9340 0.7577
DS(:,:,1) = 0.1270 0.0975 0.9575 0.9706 0.9134 0.2785 0.9649 0.9572
0.6324 0.5469 0.1576 0.4854
DS(:,:,2) = 0.8003 0.9157 0.6557 0.9340 0.1419 0.7922 0.0357 0.6787
0.4218 0.9595 0.8491 0.7577
注1. Matlab的变量名必须字母开头,由字母、下划线、数字构
成,对字母大小写敏感;起变量名时应避开Matlab里的关键词。
注2. Matlab语句结束用分号,若不用分号则自动输出语句的运
行结果。
注3. 矩阵删除单个元素必须用线性索引,否则会把报错。
MATLAB学习心得体会Matlab,提起它,不管我们上课是否认真听讲了,我们都应该对它不再陌生,我们不可否认它的强大之处,正如一…
Matlab的学习心得通过初步对matlab的学习我觉得收获很大我了解到matlab是一个功能很大的数学实验软件即一个很好的计算机…
Matlab学习心得班级机械124姓名万明男学号20xx093386电话139xxxxxxxxmatlab学习心得体会MATLAB…
通过《matlab仿真》实验使我学习掌握了许多知识。首先是对matlab有了一个全新的认识,其次是对matlab的更多操作和命令的…
最近在学习matlab一直不入其法门从网上看到了一些大虾的经验心得感触颇深转贴过来希望给初学者有一定的指引一写给学习matlab的…
关于学习MATLAB一点心得摘要MATLAB作为当前国际控制界最流行的面向工程与科学计算的高级语言、它可轻易的再现C或FORTAN…
MATLAB学习心得体会Matlab,提起它,不管我们上课是否认真听讲了,我们都应该对它不再陌生,我们不可否认它的强大之处,正如一…
Matlab心得体会10金融3吕淼20xx241125在为学习这门课前就听说了他的强大,因为现在的经济模型都是需要这些分析软件的,…
matlab实验心得体会]这个就是我自己做出来的,发现用soundsc听出来还行,但是用wavwrite就变的很难听。后来发现PB…
关于Matlab的学习体会报告经过一学期的C语言学习,我们开始转化学习Matlab软件的学习。在计算机国家二级C语言考试过后。学习…
通过《matlab仿真》实验使我学习掌握了许多知识。首先是对matlab有了一个全新的认识,其次是对matlab的更多操作和命令的…