matlab快速入门

第一部分:常用快捷键

%实时编辑器界面 alt+enter 切换代码和文本的输入

第二部分:变量定义和基本运算

生成矩阵

  • 直接法

    a = [1,2,3;4,5,6;7,8,9];  %数字之间用空格或逗号分隔
    
  • 冒泡一维矩阵

    b = 1:1:10 ; % 1,2,...10
    
    b = 1: 10;  %默认步长是1
    
  • 函数生成

    % 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分布随机阵 
       randi(max): [1:max]的整数
       randi(max,n): n阶矩阵,元素范围1-max
       randi([min,max],[m,n]): m*n矩阵,元素范围min-max
       rand('seed',0);%设置随机数种子
    

矩阵运算

  • diag_a = diag(a,1);  % diag(行向量,主对角线上方第k条斜线)用行向量生成对角阵
    tril_a = tril(a,1);  % tril(矩阵,主对角线上方第k条斜线)生成矩阵的下三角阵,triu上三角阵 
    
  • 加、减、乘、乘方

    a*a
    
  • 点运算

    a.*b , a./b , a.\b , a.^b  # 对应的元素做运算
    a/b = a*inv(b) 
    a\b = inv(a)*b  %求Ax=b的解
    
  • 逆矩阵

    pinv(a) % 伪逆矩阵,当a不是方阵,求广义逆矩阵;当a是可逆方阵,结果与逆矩阵相同 
    inv(a) % 对方阵求可逆矩阵
    
  • 特征值,特征向量

    [v,D] = eig(a); %输出v为特征向量,D为特征值对角阵
    
  • 行列式

    det(a)
    
  • rank(a)
    
  • 伴随

    compan(a)
    
  • 转置

    t_a = a'
    

广播机制

a = [1,2;3,4];
b = 1;
a + b; %把b广播成[1,1;1,1]
a ==1 ;%对每个元素进行比较

矩阵的修改

  • 部分替换

     chg_a = a;
     chg_a(2,3) = 4;  % (行,列)元素替换
     chg_a(1,:) = [2,2,2];  % (行,:)替换行,为[]删除该行
     chg_a(:,1) = [];  % (:,列)替换列,为[]删除该列 
    
  • 指定维度拼接

    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)
    
  • 矩阵的索引

    m = [1,2,3;4,5,6;7,8,9]
    
    %m(8) = 6;
    m([1,3,5])  %值为1 7 5 列方向检索 
    
    %m([1,2],3)  %第一二行的第三列数,3和6
    
    %m([1,2],[1,2,3])  %第一二行的第一二三列  m(1:2,1:3)
    

多维数组

  • 创建

     % 直接法
     mul_1(:,:,1) = [1,2,3;2,3,4];
     mul_1(:,:,2) = [3,4,5;4,5,6];
     % 扩展法
     mul_2 = [1,2,3;2,3,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);  % 把a1a2按照“3”维连接 
    

字符串

  • 创建

    str0 = 'hello world';  % 单引号引起
    str1 = 'I''m a student';  % 字符串中单引号写两遍
    str3 = ['I''m' 'a' 'student'];  % 方括号链接多字符串
    str4 = strcat(str0, str1);  % strcat连接字符串函数
    str5 = strvcat(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右对齐,left左对齐,center中间对齐
    strtrim(str0);  % 删除str0开头结尾空格
    eval(str0);  % 将str0作为代码执行 
    %转换
    % ___2___  -->  如num2str,将数字转字符串; dec2hex,将十进制转十六进制
    str_b = num2str(b);  %第二个参数为有效数字的位数
    % abs,double取ASCII码;char把ASCII转字符串
    abs_str = abs('aAaA');  
    %拼接
    str1+str2;
    

第三部分:程序结构

代码语法

选择结构
%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
       z = x*y;
   catch
       z = x.*y;  % 若try出错,则执行
   end
       disp(z); 
循环结构
% for 循环变量=初值:步长:终值 - end
  for i=0:1:10  % 步长为负,则初值大于终值
  disp(i);  % 循环体内不可对循环变量做修改
  end
程序控制
%continue 跳过当次循环剩下语句,进入下一循环
%break 跳出当前循环
%return 跳出程序并返回 
输入输出
%输入
value = input("请输入一个值");    %输入内容可以是矩阵,数字
inputstring = input("请输入一个字符串","s");  %输入内容是字符串
%输出
disp(value)  %能输出矩阵,能输出字符串
disp(["hello","world"])  %输出多个字段 转化成字符串矩阵 disp只接受一个参数
disp(["1/3 = "+1/3])
disp(["1/3 = "+num2str(1/3,2)]) %调整精度

第四部分:图像绘制

二维曲线绘制

  • 基本函数
    plot(y) 
    	% y为向量
     	plot(y1); %纵坐标为y的值;横坐标自动为元素序号
    	% y为矩阵
     	figure; 开启新绘图窗口,下次绘图在新窗口
     	y = [y1',y2']
     	plot(y)
    plot(x,y)
    plot(x1,y1,x2,y2..)
    
  • 线性图形格式设置
    %线性颜色数据点 %% 参数顺序可以改变
     plot(x,y1,'b:o'); %蓝色 点线 圆圈 
     % b蓝 g绿色 r红 c青 m紫 y黄 k黑 w白
     % -实线 :点线 --虚线 -.点画线
     % .实点o圆圈x叉+十字*星号s方块d钻石v下三角^上三角<左三角>右三角p五角星h六角星
    
  • 坐标轴
    plot(x,y1);
    axis([-1*pi,3*pi,-1.5,1.5]);  %规定横纵坐标范围
    
  • 标题标签
    title('a title'); %图像标题
    xlabel('this is x'); %x轴标记
    
  • 图例
    legend('hahaha','locatiob','best');
    
  • 图形保持
    plot(x,y1);
    hold on;  %在原有基础上增加绘制后面图形
    plot(x,y2);
    hold off;
    
  • 分割绘制
    subplot(2,2,1); %分割成2x2区域,在第一块区域绘制图形
    plot(x,y1);
    subplot(2,2,2); %分割方式相同,区域改变
    plot(x,y2);
    

二维特殊图形绘制

柱状图
bar(x,y,width,'参数'); %x% x横坐标向量,m个元素; y为向量时,每个x画一竖条共m条,矩阵mxn时,每个x画n条;
                                   % width宽度默认0.8,超过1各条会重叠;
                                   % 参数有grouped分组式,stacked堆栈式; 默认grouped
                                   % bar垂直柱状图,barh水平柱状图,bar3三维柱状图,barh3水平三维柱状图(三维多一个参数detached, 且为默认) 
                                   
饼形图
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');  % 火柴杆图,参数fill是填充火柴杆,或定义线形
 candle(HI, LO, CL, OP);  % 蜡烛图:HI为最高价格向量,LO为最低价格向量,CL为收盘价格向量,OP为开盘价格向量
向量图
compass(u, v, 'b-o');  % 罗盘图横坐标u纵坐标v
compass(Z, 'b-o');  % 罗盘图复向量Z
feather(u, v, 'b-o');  % 羽毛图横坐标u纵坐标v
feather(Z, 'b-o');  % 羽毛图复向量Z
quiver(x, y, u, v);  % 以(x, y)为起点(u, v)为终点向量场图 
极坐标图
% polar(theta, rho, 'b-o');  % 极角theta, 半径rho
  theta = -pi:0.01:pi;
  rho = sin(theta);
  polar(theta, rho, 'b') 
对数坐标图
semilogx(x1, y1, 'b-o');  % 把x轴对数刻度表示, semilogy是y轴对数刻度表示,loglog是两个坐标都用对数表示 
双纵坐标
plotyy(x1, y1, x2, y2, 'fun1', 'fun2');  % fun规定了两条条线的绘制方式,如plot,semilogx,semilogy,loglog,stem等 
函数绘图
 f = 'sin(2*x)';
 ezplot(f, [0, 2*pi]);  % 绘制f并规定横坐标范围,也有[xmin, xmax, ymin, ymax]
 x = '2*cos(t)';
 y = '4*sin(t)';
 ezplot(x, y);  % 绘制x(t),y(t)在[0, 2*pi]图像, 也可以在最后用[tmin, tmax]规定t的范围 

三维曲线绘制

三维曲线
x = 0:0.1:2*pi;
y = sin(x); z = cos(x);
plot3(x,y,z,'b-*');

三维曲面

%三维网络
x = -5:0.1:5;
y = -4:0.1:4;
[X,Y] = meshgrid(x,y); %得到xoy面网格点
Z = X.^2+Y.^2;
mesh(X,Y,Z);%三位网络
surf(X,Y,Z);%三位表面图

cftool

第五部分:多项式

多项式

创建
p = [1,2,3,4]; %系数向量,按X降幂排列,最右边是常数
f1 = poly2str(p,'x'); %生成好看的字符串f1 = x^3+2*x^2+3*x^3+4  不被认可的运算式
f2 = poly2sym(p); % 生成可用的符号函数f2 = x^3+2*x^2+3*x^3+4
求值
x = 4;
y1 = polyval(p,x); %带入求值;若x1为矩阵,则对每个值单独求值
求根
r = roots(p); % 由系数求根
po = ploy(r); %由根求系数,结果为系数矩阵

数据插值

一维插值
%yi = interp1(X,Y,xi,'method')
X = [-3,-1,0,1,3];
Y = [9,1,0,1,9];
y2 = interp1(X,Y,2);
y2m = interp1(X,Y,2,'spline');
二维插值
%zi = interp1(X,Y,Z,xi,yi,'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);
[y,k] = max(X); % k为最大值的角标
[y,k] = max(A,[],2);%A为矩阵 1为返回每列最大值,2为返回每一行最大值
均值和中值
y = mean(X);
y = median(X);%中值
y = mean(A,2); %1为返回每列均值,2为返回每一行均值
y = median(A,2); %1为返回每列中值,2为返回每一行中值
排序
Y = sort(A,1,'ascend'); %sort(矩阵,dim,'method')dim为1安列排序,dim为2按行排序;ascend升序,descend降序
求和求积累加累乘
y = sum(X); %求和
y = prod(X); %求积
y = cumsum(X); %累积
y = cumprod(X); %累乘

数值计算

最值
%在给定初值范围附近找在最小值
x = fminsearch(fun,x0);
%在给定初值x0附近找零点
x = fzero(fun,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复数实部;imag复数虚部;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整理)
h1 = collect(f, x);  % 按x整理(降幂排列)
%因式分解展开质因数
fac = factor(h);  % 因式分解
factor(12);  % 对12分解质因数 
符号多项式向量形式与计算
syms a b c;
n = [a, b, c];
roots(n);  % 求符号多项式ax^2+bx+c的根
反函数
fi = finverse(f,x); %对f中变量x求反函数

符号微积分

函数的极限和级数运算
%极限
limit(f,x,4); 
limit(f,x,4,'right');% 右极限
%级数运算
%求和
symsum(s, x, 3, 5);  % 计算表达式s变量x从3到5的级数和,或symsum(s, x, [a b])或symsum(s, x, [a;b])
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默认变量不定积分 

符号方程求解

符号代数方程
%一元方程
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,...varN),MN不一定相等
[Sxn, Syn] = solve(eqn21, eqn22, x, y, 'ReturnCondition', true);  % 加上参数ReturnCondition可返回通解及解的条件
% 其他参数(参数加上true生效)
% IgnoreProperty,忽略变量定义时一些假设
% IgnoreAnalyticConstraints,忽略分析限制;
% MaxDegree,大于3解显性解;
% PrincipleValue,仅主值
% Real,仅实数解
% 非线性fsolve
X = fsolve(fun, X0, optimset(option));  % fun函数.m文件名;X0求根初值;option选项如('Display','off')不显示中间结果等 

第七部分:函数、匿名函数和脚本

函数

% function[输出参数] = myfun(参数)
%     函数体
% end
匿名函数
f = @(输入参数)  函数体
f: 函数句柄
函数和匿名函数的转换
a = 5;
f4 = @fun;    %第一种方法
f4(-3,a)

f5 = @(x)fun(x,a)     %第二种方法 指定了a 传参只需要传x
f5(-6)

function y = fun(x,a)
 	if  x>=a
 		y = x;
 	else 
 		y = -x;
 	end
end

脚本

实际上就是后缀.m的文件;当文件里只有函数时,就成为函数脚本文件或函数文件;函数文件可被其他脚本调用(需要在同一文件目录下),也可在命令行中调用

其他
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值