chapter1、 matlab基础知识
元素索引:
三维矩阵和其他数据结构在函数自变量中一次使用行、列和页维数次序。对于多维矩阵有两个索引原理,最自然的就是矩阵索引,给出了每个元素在每一维中的一个位置。
线性索引:
一些命令把整个矩阵说明为一个长列元素,如果所有的元素被放在一行上,那么各元素索引号说明了一个指定矩阵的索引给出的某个位置
由两个二维数组构建一个三维数组:
A=[1 2 3;4 5 6;7 8 9];
B=[11 12 13;14 15 16;17 18 19];
C(:,:,1)=A;
C(:,:,2)=B;
***************************************
MATLAB中数据是按列的方式存储
>> A=[4 7 2 9 8;3 9 1 4 3;1 5 9 6 4;8 3 7 1 0]
A =
4 7 2 9 8
3 9 1 4 3
1 5 9 6 4
8 3 7 1 0
则A中每个元素对应的索引如下(MATLAB中数据是按列的方式存储的):
1 5 9 13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20
ind=sub2ind(siz,I,J):siz表示要转换的矩阵的行列数,I是要转换矩阵的行标,J是要转换矩阵的列标。I,J的行列数必须相同。ind为输出参数,其行列数与I,J相同。ind即为索引。
在命令窗口中输入:
>> ind=sub2ind(size(A),[1,2;3,4],[1,1;2,2])
则显示
ind =
1 2
7 8
从运算结果可以看出,在矩阵A中,下标(1,1)的索引值为1,下标(2,1)的索引值为2,下标(3,2)的索引值为7,下标(4,2)的索引值为8
sub2ind就是将下标转换为索引
sub2ind
ind2sub函数就是在指定矩阵尺寸(size)前提下将给定的index转化成行列形式
ind2sub
***************************************
matlab数据类型和转换函数
double 双精度浮点数,每个存储的双精度为64位
char 用于存储字符,每个存储的字符16位
sparse 用于存储稀疏矩阵,由一个sparse使用的内存是4+(非0元素数*16)
unit8 是一个无符号的8位整型数。数学函数并不对使用到的这种数据类型进行定义
逻辑函数
iscell(x) 判断x是否是细胞矩阵
isfield(x) 判断x在一个结构中是否是一个域
isfinite(x)返回一个与x相同大小的向量,这个x包含有限元的位置为1,其他位置为0
islogical(x) 如果x是一个逻辑向量,返回1,否则,返回0
isnumeric(x) 如果x是一个数值向量,返回1,否则,返回0
isstr(x) 字符串
isstruct(x) 结构
isobject(x) 对象
logical(x) 返回一个可以使用的逻辑向量,例如逻辑索引或逻辑测试
>> x=repmat([1,0],1,5)
x =
1 0 1 0 1 0 1 0 1 0
如果不被用户删除或者重命名,每个被定义的变量将在整个过程中保留,要删除变量,用clear命令
pack重组和压缩已分配的内存碎块,当matlab的内存满后,可以使用命令pack而不是清除任何变量来得到更多的空间
将会产生如下情况:
1、所有变量都会保存在磁盘上的一个临时文件pack.temp中
2、删除主内存中的内容
3、所有变量将从pack.temp加载到主内存中
4、删除文件pack.tmp
pack filename 用文件filename做临时文件,重组和压缩已分配内存
matlab中的命令实际上可以当做函数,把字符串看作自变量,这就意味着有两种描述:
command argument == command('argument')
算数表达式和数学函数
![MATLAB概述_第2张图片](http://img.e-com-net.com/image/info5/d8e786070e1345b49494d82ec59c61c5.jpg)
![MATLAB概述_第3张图片](http://img.e-com-net.com/image/info5/a26f82845271407eb652c1ad154019ec.jpg)
取整命令和相关命令
round(x) 求最接近x的整数,如果x是一个向量,则适用于所有元素
fix(x) 求0方向最接近的整数,负x向上四舍五入 正x向下四舍五入
floor(x) 求小于等于x的最接近的整数(向上取整)
ceil(x) 求大于等于x的最接近的整数(向下取整)
rem(x,y) 整除x/y的余数
gcd(x,y) 整数x和y的最大公因子
[g,c,d]=gcd(x,y) 求g c d满足g=xc+yd
lcm(x,y) 求正整数x和y的最小公倍数,也能用于决定最小公因子
[t,n]=rat(x) 由有理数t/n求x的近似值,这里的t和n是整数,相对误差小于10^-6
[t,n]=rat(x,tol) 与上相同相对误差小于tol
rat(x) 求x的连续分数表达式
rat(x,tol) 求带相对误差tol的的连续的分数表达式
>> x=-1.49
>> round(x)
>> fix(x)
>> floor(x)
>> ceil(x)
>> [t,n]=rat(sqrt(2))
t =
1393
n =
985
>> differ=sqrt(2)-t/n
differ =
3.6440e-007
%% 二维数组作图
t=linspace(0,2*pi,100);
x=cos(t)-sin(3*t);
y=sin(t).*cos(t)-cos(3*t);
plot(x,y)
%% 函数分析
function fval = func(x)
fval = x.*exp(x.^2)-exp(x.^2)-sin(x.^3);
%fzero 找寻一个函数的零点
>> xsolv=fzero('func',3)
xsolv =
1.2194
%求0点处的fval值
>> xiszero=func(0)
xiszero =
-1
%fmin 找寻一个范围内的函数的最小值(fmin是一个自定义函数)
mpoint=fmin('func',0.5,1)
%% 线性系统与特征值
%线性求解:Ax=b
A=[3 1 -1;1 2 4;-1 4 5];
b=[3.6;2.1;-1.4];
fval=A\b
fval =
1.4818
-0.4606
0.3848
%矩阵A的特征值求解
[EigenVectors,EigenValues]=eig(A)
EigenVectors =
-0.3129 0.9482 -0.0553
0.7756 0.2887 0.5613
-0.5482 -0.1328 0.8258
EigenValues =
-1.2305 0 0
0 3.4445 0
0 0 7.7860
矩阵EigenVectors的列是A的特征向量
EigenValues的对角线元素是特征值
矩阵A是对称的,因此,所有的特征值是实数,三个特征向量互相正交
%% 曲线的拟合与插值
%拟合
x=[1 1.5 3 4 5 6 6.5 7 8];
y=[1.2 1 1.7 2.5 2 2.3 2.5 3 3.1];
p1=polyfit(x,y,1); %p1=A向量等于一次多项式的系数
linc=polyval(p1,x);%linc=A向量等于x点上多项式p1的值
plot(x,linc,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10);
p7=polyfit(x,y,7); %p7=A向量等于7次多项式的系数
xx=1:.25:8; %xx=所有想要进行多项式计算的点
polc=polyval(p7,xx);%polc=A向量等于xx点上多项式p7的值
plot(xx,polc,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10);
%插值 二维插值和三维插值
%% 统计
%%傅里叶变换和信号分析
%%常微分方程
%%偏微分方程
%%matlab中的编程
%%图形用户界面