今天开始学MATLAB
生成矩阵
直接生成矩阵
a = [1,2,3:4,5,6:7,8, 9]
冒号一维矩阵a=开始:步长:结束,步长为1可省略
b = 1:1:10; % 1,2....10
b = 1:10: %与上一个等价
函数生成
linspace(开始, 结束,元素个数),等差生成指定元素数的一维矩阵,省略个数则生成100个
c = linspace(0, 10, 5)
特殊矩阵
e = eye(4) % eye (维数)单位阵,斜正三角
z = zeros(1,4) % zeros (维数) 全零阵
o = ones(4,1) % ones (维数) 全1阵
r = rand(4) % rand (维数)0~ 1分布随机阵,方阵
rn = randn(4) %randn(维数) 0均值 Gaussian分布,随机阵
矩阵运算
diag_a = diag(a,k) % diag(行向量,主对角线上方第k条斜线)用行向量生成对角阵
tril_a = tril(a,k) % tril(矩阵, 主对角线上方第k条斜线)生成矩阵的下三角阵,triu上三角阵
%加、减、乘、乘方
a*a
%点运算
% a.*b,a./b,a.\b,a.^b 对应元素的*./,\.运算
a,*a
%逆矩阵
pinv(a) % 伪逆矩阵,当a不是方阵,求广义逆矩阵;当a是可逆方阵,结果与逆矩阵相同;例如a*x=b;求x就得:x=pinv(a)*b
特征值,特征向童
解释:A为n阶矩阵,若数λ和n维非0列向量x满足Ax=λx,那么数λ称为A的 特征值,x称为A的对应于特征值λ的 特征向量。式 Ax=λx也可写成( A-λE)x=0,并且|λE-A|叫做A 的 特征多项式。当特征多项式等于0的时候,称为A的特征方程,特征方程是一个齐次线性方程组,求解特征值的过程其实就是求解特征方程的解
[v,D] = eig(a) %输出v为特征向量,D为特征值对角阵
% *行列式
det (a)
% *秩
rank(a)
% *伴随
compan(b)
矩阵的修改
%部分替换
chg_a=a
chg_a(2,3) = 4 % 将(第2行,第3列)元素替换为元素4
chg_a(1,:) = [2,2,2] % (行,:)替换行,为[]删除该行
chg_a(:,1) = [] % (:,列)替换列,为[]删除该列
%转置
T_a=a'
%指定维数拼接
c1_a = cat(1,a,a) %垂直拼接
c2_a = cat(2,a,a) %水平拼接
% *变维
rs_a = reshape(a,1,9) %元素个数不变,矩阵变为m*n
信息获取
%矩阵的行列数
[row_a,col_a] = size(a) % [行数,列数]
len_a = length(a) %获取矩阵中元素的个数
多维数组
%创建
%直接法
mul_1(:,:,1) = [1,2,3:2,3,4]
mul_1(:,:,2) = [3,4,5:4,5, 6]
zeros(1,6) %创建一个1行6列的一维数组
zeros(2,4) %创建一个2行4列的二维数组
zeros(2,4,2) %创建一个2行4列2页的三维数组
%扩展法
mul_2 = [1,2,3:2,5,4]
mul_2(:,:,2) = [3,4,5:4,5,6] %若不赋值第-页,第一页全为0
% cat法
mul_31 = [1,2,3:2,3,4]
mul_32 = [3,4,5;4,5,6]
mul_3 = cat(3,mul_31,mul_32): %把a1、a2按照“3”维连接
字符串
%创建
str0 = 'hello world' %单引号引起
str1 = 'I''m a student' % 字符串中单引号写两遍
str3 = ['I''m' 'a''student'] %方括号链接多字符串
str4 = strcat(str0, str1) % strcat连 接字符串函数
str5 = strycat(str0,str1) % strvcat连接产生多行字符串
str6 = double(str0) % 取str0的ASCII值 ,也可用abs函数
str7 = char(str6) %把ASCII转为字符串
%操作
%比较
strcmp(str0, str1) %相等为1,不等为0
strncmp(str0,str1, 3) %比较前3个是否相等(n)
strcmpi(str0,str1) %忽略大小写比较(i)
strncmpi(str0,str1, 3): %忽略大小写比较前3个是否相等
%查找替换
strfind(str0,str1); % 在str0找到str1的位置
strmatch(str1,str0): % 在str0字 符串数组中找到str1开头的行数
strtok(str0); % 截取str0第- -个分隔符(空格,tab, 回车)前的部分
strrep(str0,str1, str2): % 在str0中 用str2贊换str1
%其他
upper(str0): %转大写,lower转小写
strjust(str0,' right') : %将str0右对齐,1eft左对齐,center 中间对齐
strtrim(str0) %删除str0开头结尾空格
eval(str0) %将str0作为代码执行
%%
%转换
%如num2str,将数字转字符串,dec2hex, 将十进制转十六进制
str_b = num2str(b) ;
选择结构
%%
a=5
x =[1,2];y=[3,4]
%if-elseif-else-end
if a>0
disp(x) ;
elseif a==0
disp(a) ;
else
disp(a-1) ;
end
%switch-case-otherwise-end
switch a
case 0
disp(a)
case 1
disp (a+1)
otherwise
disp(' aaa' )
end
%try-catch
try
a;
disp('存在''a''变量')
catch
disp('不存在''a''变量')
end
循环结构
% for循环变里=初值:步长:终值一end
for i=0:1:10 %步长为负,则初值大于终值
disp(i) %循环体内不可对循环变里做修改
end
% while-end
while a>2
disp(a)
a=a-1;
end
%m文件
%脚本文件:没有输入输出参数,执行后变里结果返回工作空间,可直接运行
%以下是脚本文件,文件名假设为**exp. m**
clear
r=5
s = pi*r*r;
p = 2*pi*r;
disp(s)
disp(p)
%以下是调用
exp
%函数文件:以function开头,有输入输出,变量为局部变量不返回工作空间,需要调用
%以下是函数文件
%文件命名应与函数名一致,系统找文件名circ.m
%CIRC计算圆面积和周长% 简单说明
%参数:输入参数r:圆半径;输出参数s:圆面积,p:周长% 详细说明
function [s,p] = circ(r)
s = pi*r*r;
p = 2*pi*r;
end
%以下是调用
**********************************
[a, b]=circ(6); %返回为多个参数时,若写
a=circ(5); %则保留第一个返回值
%*以下是带子函数的函数文件
***********************************
function y= circ(w) % 主函数放第一个,函数名为key
if w==0
y=type0(w); %调用子函数type0
else
y=type1(w);
end
end
function y0 = type0(a) % 子函数,各子函数之间顺序无所谓
y0 = a+1;
end
function y1 = type1(a)
y1 = a+4;
end
%函数输入输出参数可以不定
%nargin:输入参数个数,nargout: 输出参数个数
%varargin:输入参数内容的元胞数组,varargout: 输出参数
%以下是函数文件
function varargout = circ(varargin)
x = length(varargin);
varargout{1} = x;
varargout{2} = x+1;
end
二维曲线绘制
%基本函数
% plot(y)
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(y1);
figure;
%开启新绘图窗口,下一次绘图在新窗口
plot(y2);
% 纵坐标为y的值;横坐标自动为元素序号(角标+1),此处为1~9
% y为向量
% y为矩阵
y = [y1', y2']:
plot(y): %当y为矩阵,按每-列画出曲线,颜色自动区分
% plot(x,y)
% xy为向量
plot(x, y1);% 先绘制曲线
% plot(x1, y1, x2, y2)
plot(x, y1, x, y2);% 在同一个窗口同一坐标轴绘制多条曲线
% 线性图形格式设置
% 线形颜色数据点
plot(x,y1, 'b:o'): %蓝色点线圆圈
% b藍g绿r红c青m紫y黄k黑w白
% -实线:点线-虚线-.点画线
% .实点o圆圈x叉+十字*星号s方块d钻石v下三角“上三角<左三角>右三角p五角星h六角
%坐标轴
p1ot(x,y1):
axis([-1*pi,3*pi, -1.5, 1.5]): %规定横纵坐标范围
%图形修饰
%标题标签
title('a title'): %图像标题
xlabel('this is x'): % x轴标记,同理还有ylabel,zlabel
%图例设置
legend('hahaha',’ location', 'best'): % str的顺序与绘图顺序一致: 'best' 指图例位置最佳化,
%图形保持
plot(x,y1);
hold on:
%在原有窗口y1曲线上增加绘制下一个图形
plot(x, y2): % y2在同一窗口内被绘制
hold off:
%分割绘制
subplot(2,2, 1): % 分割成2x2区域,在第一块区域绘制下一个图形
plot(x, y1): % y1被绘制在4块区域的第一块
subplot(2,2, 2): % 分割方法相同,区域改变
plot(x, y2): % y2在第二块区域
二维特殊图形绘制
%柱状图
bar(x,y, width, '参数'); % x横坐标向量,m个元素: y为向里时,每个x画一竖条共m条,矩阵mxne
% width宽度默认0. 8,超过1各条会重叠:
%参数有grouped分组式,stacked堆栈式: 默认grouped
%bar垂直柱状图,barh水平柱状图,bar3三维柱状图,barh3水平三维柱;
%饼形图
pie(x,explode, 'lable'); % x为向量显示每个元素占总和百分比,为矩阵 显示每个元素占所有总和
% explode向量与x同长度,为1表示该元素被分离突出显示,默认全0不
% pie3绘制三维饼图
%直方图
hist(y, n); % y为向量,把横坐标分为n段绘制
hist(y, x); % x为向里,用于指定每段中间值,若取N = hist(y, x),N为每段元素个数
%离散数据图
stairs(x,y, 'b-o'); %阶梯图,参数同plot .
stem(x, y, 'fill'); %火柴杆图,参数fi11是填充火柴杆,或定义线形
candle(HI, LO, CL, OP); % 蜡烛图: HI为最高价格向量,LO为最低价格向童, CL为收盘价格向向量, OP为
%向量图
compass(u, v, 'b-o'); % 罗盘图橫坐标u纵坐标v
compass(2, 'b-o'); % 罗盘图复向量Z
feather(u, v, 'b-o'); % 羽毛图横坐标u纵坐标v
三维曲线曲面绘制
% 三维曲线
x = 0:0.1:2*pi;
y = sin(x); z = cos(x);
plot3(x, y, z, 'b-*');
% 三维曲面
% 三维网格
x = -5:0.1:5; %规定了x轴采样点,也规定了x轴范围
y = -4:0.1:4; %规定了y轴采样点,也规定了y轴范围|
[X, Y] = meshgrid(x, y); %得到了xoy面网格点
Z=X*2+Y*2;
mesh(X,Y, Z) % XY是meshgrid得到的网格点,Z是网格顶点,c是用色矩阵可省略
%三维表面图
x = -5:0.1:5;
y = -4:0.1:4;
[x,y] = meshgrid(x, y);
z = x.^2+y.^2; %以上部分同上
surf(x, y, z) % 与上一个类似
多项式
%创建
p = [1, 2,3 ,4]; %系数向里,按x降幂排列,最右边是常数
f1 = poly2str(p, 'x'); %生成好看的字符串f1=x^3+2x°2+3x+4,不被认可的运算式
f2 = poly2sym(p); % 生成可用的符号函数f2=x^3+2*x^2+3*x+4
%求值
x=4;
y1 = polyval(p, x); %代入求值;若x1为矩阵,则对每个值单独求值
%求根
r = roots(p); % p同上,由系数求根,结果为根植矩阵
p = poly(r);
% 由根求系数,结果为系数矩阵
%
数据插值
一维插值
%
x =[-3,-1,0.1,3];
y = [9,1,0.1, 9]; % XY为已知点横纵坐标向量
y1 = interp1(x, y, x1, 'method' );
y2 = interp1(x, y, 2); % 差值预估在x=2的y的值,x不能超过已知范围(此处x<3)
y2 = interp1(x, y, 2,'spline');%用spline方法 (三次样条)差值预估在x=2的y的值
% 二维插值
%z1 = interp1(x, y, 2, x1, y1,'method')
X=[2, 3,9, 15, 6, 7, 4];
A=[1, 7, 2:9,5,3:8,4,6];
B=[1,7,3:9,5,3:8,4,6];
% 数据统计
% 矩阵最大最小值
y= max(X); %求矩阵X的最大值,min最小值
[y, k] = max(X); %求最大值,k为该值的角标
[y, k] = max(A, [],2); % A是矩阵,'2'时返回y每一行最大元素构成的列向量,k元素所在列; '1'的
%均值和中值
y = mean(X); %均值
y = median(X); %中值
y = mean(A, 2); % '2'时返回y每一行均值构成的列向量;'1'时与上述相同
y = median(A, 2); % '2'时返回y每一行中值构成的列向量; '1' 时与上述相同
%排序
Y = sort(A, 1,'ascend');
% sort (矩阵,dim, ' method' )dim为1按列排序,2按行排序; ascend
[Y, I] = sort(A, 1,'ascend'); % I保留了元素之前在A的位置
%求和求积累加累乘
数值计算
%最(极)值
%多元函数在给定初值附近找最小值点
x =fminsearch(fun, x0);
%函数零点
x = fzero(fun, x0): %在给定初值x0附近找零点
%%
%符号对象创建
%sym函数
p = sin(pi/3);
p = sym(p, 'r');
%用数值p创建符号常重p; 'd'浮点数'f'有理分式的浮点数'e'有理数和误差'r'有
%syms函数
syms x; % 声明符号变量
f =7*x^2+ 2*x+9; % 创建符号函数
%符号运算
%加减乘除外
%'转置;==相等;~=不等
% sin, cos, tan; asin,acos, atan 三角反三角
% sinh, cosh, tanh: asinh, acosh, atanh双曲反双曲
% conj复数共轭; real复数实部; inag复数虚部; abs复数模; angle复数幅角
% diag矩阵对角; triu矩阵上三角; tril矩阵下三角; inv逆矩阵; det行列式; rank秩; poly特征多项
% |----expm矩阵指数函数; eig矩阵特征值和特征向重; svd奇异值分解;
%符号对象精度转换
digits; % 显示当前用于计算的精度
digits(16); %将计算精度改为16位,降低精度有时可以加快程序运算速度或减少空间占用
a16 = vpa(sqrt(2)): % vpa括起的运算使sqrt (2)运算按照规定的精度执行
a8 = vpa(sqrt(2),8): %在vpa内控制精度,离开这一步精度恢复
% 符号多项式函数运算
% 符号表达形式与相互转化
% 多项式展开整理
g = expand(f): %展开
h= collect(g): %整理(默认按x整理)
hl一collect(f, x): 5按x整理(降幂排列)
%因式分解展开质因数
fac = factor(h):为因式分解
factor(12): % 对12分解质因数
%符号多项式向里形式与计算
symsab C:
n = [a,"b, c];
roots(n): % 求符号多项式ax 2+bx+c的根
n=[1, 2,3]:
roots(n): %求符号多项式带入=1,b=2, c=3的根
%*反函数
f1 = finverse(f, x): %对f中的变量x求反函数
%%
%符号微积分
%函数的极限和级数运算
%常量a,b
%极限
limit(f, x,4); %求f(x)。x->4
limit(f, 4); %默认变重->4
limit(f); 5默认变量->0
limit(f. z,4, right);
%求f(x).x->4+. 'left' x->4
%基本级数运算
%求和
symsum(s, x,3, 5); %计算表达式s变量x从3到5的级数和,或symsum(s, x,[a b])或sym
symsum (s,3,5): %计算s默认变量从3到5的级数和
symsum(s); % 计算s默认变量从0到n-1的级数和
%一维泰勒展开
taylor(f,x,4); % f在x=4处展开为五阶泰勒级数
taylor(f, x); % f在x=0处展开为五阶泰勒级数
taylor(f); % f在默认变里=0处展开为五阶泰勒级数
%符号微分
%单变量求导(单变量偏导)
n=1;
%常童n
fn = diff(f, x,n): % f对x的n阶导
f1 = diff(f, x); % f对x的1阶导
diff(f, n): % f对默认变量的n阶导
diff(f): %默认变量1阶导
%多元偏导
fxy = diff(f, x, y): %先求x偏导,再求y偏导
fxyz = diff(f, x, y, z): %先求x偏导,再求y偏导,再求z偏导
%符号积分
%积分命令
int(f, x, 1, 2); %函数f变量x在1 2区间定积分
int(f, 1, 2); %函数f默认变量在ab区间定积分
int(f, x); %函数f变量x不定积分
int(f); % 函数f默认变量不定积分
%傅里叶,拉普拉斯,Z变换
%*符号方程求解
%符号代数方程
%一元方程
eqn1 = a*x==b;
S = solve(eqn1); %返回eqn符号解
%多元方程组
eqn21= x-y==a;
eqn22 = 2*x+y-=b;
[Sx, Sy] = solve (eqn21, eqn22, x, y);
% [Svar1.... SvarN]=solve(eqn1.... eqnM, var1,
[Sxn, Syn] = solve(eqn21,eqn22, x,y,” ReturnCondition',true); % 加上参数ReturnC
%其他参数(参数加上true生效)
% IgnoreProperty,忽略变量定义时一些假设
% IgnoreAnalyticConstraints, 忽略分析限制;
% MaxDegree,大于3解显性解;
% PrincipleValue,仅主值
I% Real,仅实数解
%非线性fsolve
X = fsolve(fun, XO, optimset (option)); % fun函数. m文件名; X0求根初值; option选项
clear:清除工作空间的所有变量
close all:关闭所有的Figure窗口
clc:清除命令窗口的内容,对工作环境中的全部变量无任何影响
播放视频
fileName = 'F:\1.avi';
obj = VideoReader(fileName);
numFrames = obj.NumberOfFrames;% 读取视频的帧数
%读取一帧视频并显示
frame = read(obj, 4);
figure;imshow(frame);
%movie(fileName,2,40)
%播放视频函数
implay(fileName);
录音及播放
% recObj = audiorecorder
disp('Start speaking.')
recordblocking(recObj, 5);
disp('End of Recording.');
play(recObj);
y = getaudiodata(recObj);
plot(y);