MATLAB入门-程序员宅基地

技术标签: matlab  算法  矩阵  

坚持不一定成功,但放弃一定很轻松

基础知识

  1. 基础
  • clear all 清除workspace忠的所有变量
  • clc 清除command window中所有的命令
  • 变量名区分大小写,不能超过64位
  • length(str) 输出字符串长度
  • % :注释
  • c = [ 3 + 4i, 4 + 3j ; -i ,10j ] 要表示虚数的虚部,用 i或j
  1. 随机数 rand、randi、randn
  • rand: 生成均匀分布的伪随机数,分布在(0-1)之间
    • rand(m,n) :生成 m 行 n 列的均匀分布的伪随机数
    • rand(m,n,‘double’) :生成指定精度的均匀分布的伪随机数,参数还可以是‘single’
    • randn(RandStream,m,n) :利用指定的RandStream随机种子生成伪随机数
  • randn: 生成标准正太分布的伪随机数(均值为0,方差为1)
    • 主要语法和rand一样
  • randi: 生成均匀分布的伪随机数
    • randi(iMax): 在开区间(0,iMax)生成均匀分布的伪随机数
    • randi(iMax,m,n): 在区间(0,iMax)生成m x n型随机矩阵
  1. format 函数:控制显示的值的数值格式

    • format long : 显示长浮点数

    • format short : 显示更短格式

  2. 隐藏输出

  • 键入语句后直接按Return或Enter,MATLAB会在屏幕上自动显示结果。

  • 语句后面加分号(; ), MATLAB会执行计算,但不会显示任何输出。当生成大型矩阵时此功能尤其有用

  • 输入长语句

    • 如果语句无法容纳在一行中,使用省略号(三个句点)…后跟Return或Enter以指示该语句在下一行继续。

      s = 1 -1/2 + 1/3 -1/4 +1/5 -1/6 + 1/7 ...
      	- 1/8 + 1/9;
      
    • =、+ 和 - 符号周围的空白是可选的,可提高可读性

矩阵和数组

  1. 矩阵和数组运算符
  • 矩阵不用于线性代数的运算,则为二维数值数组,数组的算术运算按元素执行

    矩阵运算符 说明 数组运算符 说明
    + 加法 + 加法
    - 减法 - 减法
    * 乘法 .* 逐元素乘法
    / 除法 ./ 逐元素除法
    \ 左除 .\ 逐元素左除
    ^ .^ 逐元素幂
    复共轭转置 .’ 非共轭数组转置
    () 指定计算顺序
  1. 数组、矩阵、幻方矩阵
  • a + 10; 矩阵a中的每个元素都加10
  • sin(a); 矩阵a中的每个元素都取正弦
  • a.^3; 矩阵a中的每个元素取立方值
  • A = [1 2 3; 4 5 6;7 8 9] 得到一个3行3列的矩阵A
  • B = A' A转置后赋值给B
    • 撇号运算符(A’)执行复共轭转置,围绕主对角线翻转矩阵,并且还会更改矩阵的任何复数元素的虚部符号
    • 点撇号运算符(.A’)装置矩阵,不会影响复数元素的符号
    • 对包含所有元素为实数的矩阵,两个运算符返回结果相同
  • C = A(:) 得到9行1列的矩阵C,C=[1; 2; 3; 4; 5; 6; 7; 8; 9]
  • D = inv(A) 矩阵求逆
  • E = zeros(10,5,3) 创建一个10行5列3层的全零矩阵
  • F = ones(10,5) 创建一个10行5列的全1矩阵
  • G = eye(3) 生成一个3x3d ,对角线位1的矩阵
  • H = pascel(n) 对称矩阵
  • I = inv(a) 逆矩阵,方阵才有逆矩阵
  • diag(A) 矩阵对角线元素的提取和创建对角阵
    • X = diag(v,k) v是含有n个元素的向量,k表示第几条对角线
    • v = diag(X, k) v由矩阵X的第k个对角线的元素形成

X =diag([1 2 3], 1 )
ans = 
	0 1 0 0
	0 0 2 0
	0 0 0 3
	0 0 0 0

X =[1 0 3; 2 3 1;4 5 3];
diag(v,1)
ans = 
	0
	1
  • fliplr(A) 将数组从左向右翻转
  • sum(A); 得到A的列总和的行向量
  • sum(A')' 得到A的行总和的列向量
  • sum(A,2) 在sum函数中使用维度参数,避免使用双重转置的方法,得到行总和的列向量
  • sum(diag(A)) 得到主对角线上元素的总和
  1. 串联
a = [1 2 3; 4 5 6; 7 8 9]     a为3*3的矩阵
A = [a,a];                   A为3*6的矩阵 
A = [a;  a];                 A为6*3的矩阵
  1. 幻方矩阵
  • B = magic(n) 返回由1到n^2的整数构成,且总行数和总列数相等的 n x n幻方矩阵
  • 幻方矩阵的特点:每个元素都是正整数,每一行、每一列、每一条对角线上的元素之和都等于同一个正整数

数组索引

  • A 为4行4列的矩阵

  • A(4, 2); 取出矩阵A的第4 行第2 列的元素,注意:索引从1开始

  • A(8); 取出第8 个元素,注意:按顺序向下遍历每一列

  • test = A(4,5) ; 在赋值语句右侧引用数组外部元素(超出矩阵原大小),MATLAB会引发错误
    - A (4,5) =17 在赋值语句左侧指定当前维外部的元素,数组大小会增大以便容纳新元素

  • 要引用多个数组元素,使用冒号(:)运算符,格式 start:end指定范围

    • A( 1:3, 2) 列出A前三行的第二列中的元素
    • A(3, :) 列出第三行中的所有列
    • B = A(:,[1 3 2 4]) 将矩阵A的第2、3列调换后赋值给B
  • 创建等间距向量值,格式 start:step:end,若省内step,默认步长为1

    • B = 0,10,100 0到100间(包括0和100),每隔10取出一位数
  • 构建表

    %构建一个平方和2次幂表
    n = (0:4)'
    pows = [n n.^2 2.^n]
    
    pows = 
    	0	0	1
    	1	1	2
    	2	4	4
    	3	9	8
    	4	16	16
    
  • 一些特殊函数提供了有用的常量值

常量值 说明 常量值 说明
pi 3.1415926 realmin 最小浮点数
i 虚数单位 realmax 最大浮点数
j 与i 相同 Inf 无穷
eps 浮点相对精度 NaN 非数字

工作区变量

  • 工作区包含MATLAB中创建或从数据文件或其他程序导入的变量
  • 使用 whos 可以查看工作区的内容
  • 退出MATLAB后,工作区变量不会保留。使用save命令保存数据以供将来使用
    • save myfile.mat
    • 通过保存,系统会使用.mat扩张名将工作区保存在当前工作文件夹中一个名为MAT文件的压缩文件中
  • 使用 load 将MAT文件中的数据还原到工作区
    • load myfile.mat

文本和字符

  1. 字符串数组中的文本
  • 当处理文本时,将字符系列括在双引号
    • t = "Hello, world";
  • 如果文本包含双引号,在定义中要使用双引号
    • q = "Something ""quoted"" and somethong else."
  • 与所有MATLAB变量一样,t 和 q 为数组,它们的类和数据类型时string
  • 将文本添加到字符串的末尾,使用运算符“+”
    • tempText = “Temperature is ”+ 25 + “C”
  • 与数值数组相同,字符串数组可以有多个元素,使用 strlength 函数中每个字符串的长度
    • A = [ "a", "bb"; "ccc","dddd" ]
    • strlength(A); ans = [ 1 2; 3 4 ]
  1. 字符数组中的数据
  • 字符数组并不对应到文本,括在单引号
    • seq = ‘ABCDEFG';
    • seq(4) ans = 'D'
    • seq2 = [seq 'HIJKLMN' ] seq2 = 'ABCDEFGHIJKLMN'

调用函数

  • 调用函数,例如max,将输入参数括在圆括号中:max(A)
  • 存在多个输入参数,用逗号分隔:max(A,B)
  • 将函数赋值给变量,返回该函数的输出:maxA = max(A)
  • 存在多个输出参数,将其括在方括号中:[maxA, location] = max(A)
  • 将任何字符输入括在单括号中:disp('hello world')
  • 调用不需要任何输入输出的函数,只需键入函数名称,如清空命令行窗口:clc

二维图和三维图

  1. 线图
  • 使用plot 创建二维线图

    %绘制从0到2Π的正弦函数值
    x = 0:pi/100:2*pi;
    y = sin(x);
    plot(x,y);
    
    xlabel('x')       %x坐标标签
    ylabel('sin(x)')  %y坐标标签
    title('Plot of the Sine Function')   %标题
    

在这里插入图片描述

% plot 函数添加第三个输入函数,设置线条特性,线型、标记、颜色
plot(x,y,'r--')          %线条为红色虚线
线型 说明 标记 说明
- (默认) 实线 none(默认) 不显示
虚线 o 圆圈
点线 + 加号
-. 点划线 * 星号
.
x 叉号
颜色 说明 - 水平条
r 红色 | 垂直线条
g 绿色 s 方形
b 蓝色 d 菱形
w 白色 ^ 上三角
k 黑色 v 下三角
y 黄色 > 右三角
m 品红 < 左三角
c 青蓝 p 五角星
h 六角星
  • 默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,MATLAB都会清空图窗
  • 要将绘图添加到现有图窗,使用hold on
  • 在使用hold off 或关闭窗口之前,当前图窗窗口中会显示所有绘图
%两个图像在同一图窗显示
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)

hold on

y2 = cos(x)
plot(x,y2,':')
legend('sin','cos')    %将sin、cos标注图中

hold off
%其他方式
1.plot(X1,Y1,...,Xn,Yn)

2.plot(X1,Y1,LineSpex1...,Xn,Yn,LineSpecn)

3.plot(X1,Y1,X2,Y2,LineSpace2,X3,Y3)
  1. 三维视图
  • plot3(x,y,z); 三维曲线图
%使用sin和cos组成三维的螺旋曲线
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);

figure
plot3(st,ct,t,'b^-');
xlabel('sin(t)');
ylabel('cos(t)');
zlabel('t');

在这里插入图片描述

  • mesh(x,y,x); 三维网格图
%sinc函数
x=-8:.5:8;
y=x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;

figure
mesh(X,Y,Z)%直接mesh(Z)也可以

%subplot(211);meshc(Z);%绘制等高线
%subplot(212);meshz(Z);%绘制界线

在这里插入图片描述

  • surf(x,y,z); 三维曲面图
x=-5:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;

figure;
surf(X,Y,Z);
colormap cool%调色为cool

在这里插入图片描述

  1. 多个绘图
  • 使用tiledlayout或subplot在同一个窗口的不同部分显示多个 绘图

  • subplot

    • subplot(m,n,p); 将当前图形划分为m*n网格,并在p指定的位置创建坐标轴
    • subplot(m,n,p,‘replace’); 删除位置p处的现有坐标轴并创建新坐标轴
     subplot(2,1,1);
     x = linspace(0,10);
     y1 = sin(x);
     plot(x,y1)
     title('Subplot 1: sin(x)')
     
     subplot(2,1,2);
     y1 = sin(5*x);
     plot(x,y2)
     title('Subplot 2: sin(5x)')
    

在这里插入图片描述

编程和脚本

  1. 脚本
  • edit mysphere; edit 命令创建脚本
  • 该命令会打开一个名为mysphere.m的空白文本。输入代码,以创建一个单位球,半径加倍并绘制结果图
% 创建并绘制一个半径为r的球体.
[x,y,z] = sphere;       % 创建一个单位球.
r = 2;
surf(x*r,y*r,z*r)       % 调整每个维度并绘图.
axis equal              % 对每个轴使用相同的比例. 
 
% Find the surface area and volume.
A = 4*pi*r^2;           %计算球的表面积
V = (4/3)*pi*r^3;       %计算球的体积
  • mysphere 将文件保存到当前文件夹
  • 要运行脚本,可在命令行中键入脚本名称,或点击编辑器的运行按钮
  1. 循环及条件语句
N = 100;
f(1) = 1;
f(2) = 1;

for n = 3:N
    f(n) = f(n-1) + f(n-2);
end
f(1:10)
num = randi(100)
if num < 34
   sz = 'low'
elseif num < 67
   sz = 'medium'
else
   sz = 'high'
end

帮助和文档

  • doc mean 在单独的窗口打开函数文档
  • mean( 命令行窗口中会显示相应函数的提示
  • help mean 可在命令行窗口查康相应函数的简单文档

怕什么真理无穷,进一寸有一寸的精彩

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/C302641/article/details/130706317

智能推荐

Docker 快速上手学习入门教程_docker菜鸟教程-程序员宅基地

文章浏览阅读2.5w次,点赞6次,收藏50次。官方解释是,docker 容器是机器上的沙盒进程,它与主机上的所有其他进程隔离。所以容器只是操作系统中被隔离开来的一个进程,所谓的容器化,其实也只是对操作系统进行欺骗的一种语法糖。_docker菜鸟教程

电脑技巧:Windows系统原版纯净软件必备的两个网站_msdn我告诉你-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏14次。该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。_msdn我告诉你

vue2封装对话框el-dialog组件_<el-dialog 封装成组件 vue2-程序员宅基地

文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_

MFC 文本框换行_c++ mfc同一框内输入二行怎么换行-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏6次。MFC 文本框换行 标签: it mfc 文本框1.将Multiline属性设置为True2.换行是使用"\r\n" (宽字符串为L"\r\n")3.如果需要编辑并且按Enter键换行,还要将 Want Return 设置为 True4.如果需要垂直滚动条的话将Vertical Scroll属性设置为True,需要水平滚动条的话将Horizontal Scroll属性设_c++ mfc同一框内输入二行怎么换行

redis-desktop-manager无法连接redis-server的解决方法_redis-server doesn't support auth command or ismis-程序员宅基地

文章浏览阅读832次。检查Linux是否是否开启所需端口,默认为6379,若未打开,将其开启:以root用户执行iptables -I INPUT -p tcp --dport 6379 -j ACCEPT如果还是未能解决,修改redis.conf,修改主机地址:bind 192.168.85.**;然后使用该配置文件,重新启动Redis服务./redis-server redis.conf..._redis-server doesn't support auth command or ismisconfigured. try

实验四 数据选择器及其应用-程序员宅基地

文章浏览阅读4.9k次。济大数电实验报告_数据选择器及其应用

随便推点

灰色预测模型matlab_MATLAB实战|基于灰色预测河南省社会消费品零售总额预测-程序员宅基地

文章浏览阅读236次。1研究内容消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。本文建立灰色预测模型,利用MATLAB软件,预测出2019年~2023年河南省社会消费品零售总额预测值分别为21881...._灰色预测模型用什么软件

log4qt-程序员宅基地

文章浏览阅读1.2k次。12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但_log4qt

100种思维模型之全局观思维模型-67_计算机中对于全局观的-程序员宅基地

文章浏览阅读786次。全局观思维模型,一个教我们由点到线,由线到面,再由面到体,不断的放大格局去思考问题的思维模型。_计算机中对于全局观的

线程间控制之CountDownLatch和CyclicBarrier使用介绍_countdownluach于cyclicbarrier的用法-程序员宅基地

文章浏览阅读330次。一、CountDownLatch介绍CountDownLatch采用减法计算;是一个同步辅助工具类和CyclicBarrier类功能类似,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。二、CountDownLatch俩种应用场景: 场景一:所有线程在等待开始信号(startSignal.await()),主流程发出开始信号通知,既执行startSignal.countDown()方法后;所有线程才开始执行;每个线程执行完发出做完信号,既执行do..._countdownluach于cyclicbarrier的用法

自动化监控系统Prometheus&Grafana_-自动化监控系统prometheus&grafana实战-程序员宅基地

文章浏览阅读508次。Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,_-自动化监控系统prometheus&grafana实战

React 组件封装之 Search 搜索_react search-程序员宅基地

文章浏览阅读4.7k次。输入关键字,可以通过键盘的搜索按钮完成搜索功能。_react search