将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。
A = [16 3 2 13; 5 10 11 8; …
9 6 7 12; 4 15 14 1]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。
例: 利用M文件建立A矩阵。
(1)启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵.
(2)把输入的内容存盘(设文件名为mymatrix.m)。
(3)运行该M文件,就会自动建立一个名为A的矩阵,可供以后使用。
(一) 利用MATLAB程序编辑器:
(1) MATLAB程序编辑器中输入:
A = [ …
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0 ]
(2) 存为: mymatrix.m
(3) 运行: mymatrix
(二) 利用其它文本编辑器: (文本或二进制格式)
(1) 编辑一个文本文件:
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0
(2) 装入 该文本文件:
load mymatrix.dat 或者:
load mymatrix.txt
(3) 创建一个变量名为mymatrix的矩阵
将以文本或二进制格式存储的数据读入 MATLAB 的另一种方式是用 Import Wizard.
File→Import Data
先在命令窗口输入:
>>A=1
在Workspace窗口,双击该变量,打开矩阵编辑器,进行输入和修改。
几个产生特殊矩阵的函数:zeros、ones、 eye、rand、randn。
这几个函数的调用格式相似,下面以产生零矩阵的zeros函数为例进行说明。其调用格式是:
zeros(m) 产生m×m零矩阵
zeros(m,n) 产生m×n零矩阵。
zeros(size(A)) 产生与矩阵A同样大小的零矩阵
相关的函数有:length(A)给出行数和列数中的较大者,即length(A)=max(size(A));ndims(A)给出A的维数, size(A)多维矩阵各维长度

此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵,其元素是以列的方式从A中获得, A必须包含m×n个元素。

大矩阵可由方括号中的小矩阵建立起来。
例如:
A=[1 2 3 ; 4 5 6 ; 7 8 9];
C=[A, eye(size(A)); ones(size(A)), A]
C = 1 2 3 1 0 0
4 5 6 0 1 0
7 8 9 0 0 1
1 1 1 1 2 3
1 1 1 4 5 6
1 1 1 7 8 9
冒号表达式的一般格式:e1:e2:e3
还可以用linspace函数产生一个线性间隔的行向量:linspace(a,b,n):a,b,n:初值,终值,点数
linspace(a,b,n)与 a:(b-a)/(n-1):b 等价。
linspace用于产生一个等差数列,括号里三项分别表示起始值、终止值和元素数目;
logspace用于产生一个对数间隔行向量(等比数列),b=logspace(0,4,5), 表示产生一个起始值为100, 终止值为104, 元素数目为5的等比数列.

save mydata A X load mydata
系统自动沿设定好的路径以”.mat”格式存储文件
savefile = ‘mydata.mat’;
save(savefile, ‘A’, ‘X’)
Load(savefile)
如果想存储在指定路径:
save D:\homework\mydata A X 或者:
savefile = ‘D:\homework\mydata.mat’;
MATLAB允许用户对一个矩阵的单个元素进行赋值和操作。例如
A(3,2)=200
也可以采用矩阵元素的序号来引用矩阵元素。矩阵元素按列编号,先第一列,再第二列,依次类推。
以 m×n 矩阵A为例,矩阵元素 A(i, j) 的序号为:
(j-1)*m+i。其相互转换关系也可利用sub2ind和ind2sub函数求得(分别为:把矩阵下标变为元素序号和把元素序号变为矩阵下标)。

(1)利用冒号表达式获得子矩阵
①A(:, j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。
②A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。
(2)利用空矩阵删除矩阵的元素
在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[ ]。
注意: X=[ ]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间,只是维数为0。
将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一种有效的方法。





(3) 矩阵的结构变换
tril(A) %主对角线及以下元素取矩阵A的元素,其余为0
tril(A,K)%相对第K对角线及以下元素……
triu(A) %主对角线及以上元素取矩阵A的元素,其余为0
triu(A,K)%
rot90(A) %逆时针旋转90度
rot90(A,K)
L=flipud(A) %将矩阵A上下翻转
fliplr(A) %将矩阵A左右翻转
reshape(A,m,n)
Practice: A=magic(4)
B1=rot90(A), B2=rot90(A,2), B3=tril(A,2),
B4=triu(A,-1), BT=A’,
以三维矩阵为例,常用的方法有4种
(1) 对二维矩阵进行扩充得到三维矩阵:

(2) 若干个同样大小的二维矩阵进行组合得到三维矩阵:

(3)除产生单位矩阵的eye函数外,前面介绍的建立矩阵的函数都可以延伸到三维矩阵:

(4)用cat函数构建多维矩阵。
cat(dim,A1,A2,…)
cat函数把大小相同的若干矩阵A1,A2,…,按照dim指定的维数组合成新的矩阵
A1=[1 2;3 4], A2=[5 6;7 8]
C1=cat(1,A1,A2)
C2=cat(2,A1,A2)
C3=cat(3,A1,A2)
(一)算术运算
A=[1 2;3 4;5 6];
B=[5 6;7 8;9 10];
C=A\B
D=A/ B
E= B \ A
F= B / A
对于AX=b的线性方程组,有两种解法:一种是利用矩阵求逆,即X=inv(A)*b; 另一种是用左除,即X= A\ b 。除法的速度快。
A=rand(5)
b=ones(5,1)
x1=inv(A)*b
x2=A\b
(4)矩阵乘方(^ )运算
A ^p —— A 自乘p 次幂
设A为方阵, p为正整数,则A ^p 表示 A 自乘p 次;
若A为方阵且非奇异, p为正整数, A ^(-p)表示 A的逆自乘p 次。
对于p的其它值,计算将涉及特征值和特征向量,如A , p 都是矩阵, A ^ p 则无意义。
A=[1, 2, 3;2, 3, 1;3, 2,1]
B=A^2
C=A^0.3
(5). 矩阵的其它运算
inv —— 矩阵求逆
det —— 行列式的值
eig —— 矩阵的特征值
diag —— 对角矩阵
’ —— 矩阵转置
sqrt —— 矩阵开方
D=[72 134 3.2; …
81 201 3.5; …
69 156 7.1; …
82 148 2.4; …
75 170 1.2]
mu = mean(D), sigma = std(D)
mu =
75.8000 161.8000 3.4800
sigma =
5.6303 25.4990 2.2107
(6)点运算(,./,.\)
a=[1 2 3;4 5 6;7 8 9]
b=[2 4 6;1 3 5;7 9 10]
a.b
ans =
2 8 18
4 15 30
49 72 90
ab
对比一下上面两式得到的结果。
a.\b=b./a %给出a,b对应元素间的商.
%都是a的元素被b的对应元素除
a=[1 2 3],b=[4 5 6]
c1=a.\b
c2=b./a
c1 = 4.0000 2.5000 2.0000
c2 = 4.0000 2.5000 2.0000
.^ 元素对元素的幂
a=[1 2 3], b=[4 5 6]
z=a.^2
z =
1.00 4.00 9.00
z=a.^b
z =
1.00 32.00 729.00



(二)关系运算
MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)。
关系运算符的运算法则。

例: 产生5阶随机方阵A,其元素为[10,90]区间的随机整数,然后判断A的元素是否能被3整除。
(1) 生成5阶随机方阵A
A=fix((90-10+1)*rand(5)+10)
(2) 判断A的元素是否可以被3整除
P=rem(A,3)==0
(三)逻辑运算
MATLAB提供了4种逻辑运算符:&(与)、|(或)、~(非)、xor(异或)。
运算法则。
>>a=1:5
b=2:6
c=(a>2)&(b<5)
x=linspace(0,10,100); %产生数据
y=sin(x); %产生sin函数
z=(y>=0).y ; %将sin (x)的负值设为0
z=z+0.5(y<0);
z=(x<8).*z %将大于x=8以后的值设为0
plot(x,z);
xlabel(‘x)),ylabel(‘z=f(x)’)
title(‘A discontinuous signal’)
(四)关系和逻辑函数
y=all(x) %当x为数组时,只有x中所有元素都不等于0时,y为1,否则为0; x为矩阵时,则命令只作用于列元素,即对同列元素进行判断。
y=any(x)
a=[1 2 0 4; …
2 0 1 3]
b=all(a)
c=any(a)
b =
1 0 0 1
c =
1 1 1 1
exist(‘a’) %变量或函数是否被定义
ans =
1
exist(‘e’)
ans =
0
isempty(a) %参数是否为空
ans =
0
isstr(‘hello’) %参数是否为一字符串
ans =
1
isequal(a,b) %判断数组或矩阵是否相等
ans =
0
y=‘Hello’ , z=‘hello’
strcmp(y,z) %判断字符串是否相等
ans =
0
b=[4 5 6]
isprime(b) %元素是否为素数
ans =
0 1 0
字符串是用单撇号括起来的字符序列。例如, ‘Northen Jiaotong University’。若字符串中的字符含有单撇号,则该单撇号字符应用两个单撇号来表示。 S= ‘I’‘m Lucy’
字符串中每个字符(空格也是字符),对应矩阵的一个元素。 size(S)
字符串是以ASCII码形式存储的。用abs和double命令可以看到字符所对应的ASCII码值。 abs(S)
setstr和char命令可以把ASCII码矩阵转换为字符串矩阵。


与字符串有关的另一个重要函数是eval,其调用格式为:eval(t)
其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行。例如
t=pi;
m=‘[t,sin(t),cos(t)]’;
y=eval(m)
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度; 在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.
这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac
a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],
我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam
我有一个像这样的ruby散列{"stuff_attributes"=>{"1"=>{"foo"=>"bar","baz"=>"quux"},"2"=>{"foo"=>"bar","baz"=>"quux"}}}我想把它变成一个看起来像这样的散列{"stuff_attributes"=>[{"foo"=>"bar","baz"=>"quux"},{"foo"=>"bar","baz"=>"quux"}]}我还需要保留键的数字顺序,并且键的数量是可变的。上面是super简化的,但我在底部包含了一个真实的例子。执行此操作的最佳方法是什么?附言还需要递归就递归而言,这是我们可以假设的:1)