负载均衡 订阅
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。 展开全文
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
信息
外文名
Load Balancing
别    称
负载分担
释    义
将负载进行平衡
中文名
负载均衡
负载均衡概述
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
收起全文
精华内容
参与话题
问答
  • MATLAB(一)——软件及基本操作介绍

    万次阅读 多人点赞 2018-04-30 19:00:30
    一、MATLAB软件介绍 1.matlab的界面 左上角,home标签下,找到layout进行设置/复位,可以设置各板块的显示与隐藏。其中有几个部分,请务必要显示①Current Folder:中文一般翻译成工作路径,一般设置成一个自己...

    一、MATLAB软件介绍

    1.matlab的界面

     左上角,home标签下,找到layout进行设置/复位,可以设置各板块的显示与隐藏。其中有几个部分,请务必要显示
    ①Current Folder:中文一般翻译成工作路径,一般设置成一个自己建立的、有读写权限的文件夹,例如我的文档下建立一个matlab文件夹
    ②Command Window:字面意思是命令窗口,用来运行代码,所有的代码都是在这里输入

    ③Workspace:字面意思是工作空间,其实就是暂存所有运行结果的地方,“暂”的具体含义是:关闭matlab后丢失

    2.软件中的基本概念

    2.1 函数

     

        matlab之所以强大,就是因为提供大量的函数,你也可以建立自定义函数,方法是:Home->New->function。自定义函数一般保存在工作路径下。函数文件的特征是:扩展名m,内容的第一行以function开头,后续内容是“输出变量=函数名(输入变量)”。且函数名和文件名相同。
        每个函数在Command Window中运行,用来完成特定的计算任务,运行方式是输入“输出变量=函数名(输入变量)”,然后按回车。例如有个系统自带的函数是用来求绝对值的,函数名abs,所以在Command Window里输入“a=abs(-1)”,就会显示运算结果为“a=1”。且运算结果会在Workspace里出现一个变量a,双击后可看到a的值是1。

     

    2.2 脚本

        可以理解为特殊的函数,这种函数内容的开头没有function那行,因此没有输入、输出变量,也没有函数名。文件扩展名和函数一样是m,也需要在Command Window里运行。脚本都是用户建立的,方法是:Home->New Script。一般保存在工作路径下。脚本的功能就是完成用户需要的、复杂的计算任务,通常脚本里会调用很多函数。

    2.3 GUI

     

        一般翻译为界面,就是人机交互界面的意思。写脚本处理问题的方法有点麻烦,让人看起来更像是码农,所以现在很多问题可以通过界面点点鼠标解决。这时候就需要打开界面,打开方法是:在APPS标签里可以找到所有已安装的GUI工具,单击即可。注意右边有个小三角可以点开。和函数一样,用户也可以自己建立自定义GUI,这部分较为复杂,对新手而言有点遥远。

     

    2.4 toolbox

     

        一般翻译成工具箱,matlab将功能相近或者应用上自成体系的一组函数和GUI打包成一个toolbox。正版的matlab在购买时,几乎每一个toolbox都是要单独收费的,所以toolbox也可以理解为matlab产品的模块,一个工具箱就是一个产品/商品。

     

    2.5 simulink

     

        一般用matlab解决问题的过程是:用户自定义脚本,在Command Window里运行脚本。而脚本的运行逻辑是顺序执行,和一般的编程一样。simulink则提供另一种思路,图形化编程,有点像labview,这种方法很适合于物理模型的仿真,因此有时用“matlab编程”和“simulink仿真”强调。使用方法是在home标签下点击simulink。

     

    3.获得帮助

     

        常用的获得帮助有四种方法

     

    右上角home标签里,有个Help标志,点开后可以获得各工具箱/产品的完整帮助文档。新版本中默认使用在线,改用本地帮助的办法是在home标签里,Preferences下的matlab/Help里选择installed locally

     

    cn.mathworks.com官网上找到支持,然后可以获得教程。这种方法获得的帮助文档和第一种方法一样。
    在Command Window里输入 doc+函数名 来获得帮助。比如输入"doc fft"可以获得离散傅里叶变换函数fft的帮助和范例。这种方法获得的文档是前两种方法文档中的部分。当然,前提是你要知道函数名,才能找到帮助。这种方法适合于获得系统自带函数的使用说明。
    使用GUI时,通常界面的角落里有Help,点开可以获得帮助。这种方法获得的文档是第一和第二种方法文档中的部分。这种方法适合于获得系统自带GUI的使用说明。
        这几种方法中,最常用的是第三种,只要知道自己需要的函数名,就可以用这种方式获得说明和范例。而实际使用中,一般常用的系统自带函数,也并不是非常多,大概几十个?真正需要牢记使用方法的可能就几个,通常都是知道函数名,要用的时候doc一下。

     

    二、命令窗口的基本配置

    1、format命令

    进行数据类型转换,行间距调节等功能时,用

            format + 关键词 回车

    eg:format long 回车   //将数据变为长整型

            format compat/loose 回车  //调节行间距紧密/松散

    2、clc命令  

        清屏。即清理当前屏幕上的内容,屏幕上没有了,但保留在内存中了

    3、clear命令 

        删除某一变量,或清空工作区

        clear + 变量名 回车

        eg:clear a 回车  //删除工作区中的a变量

                clear或者clear all //清空工作区。建议在刚打开matlab窗口时先清空一下工作区。

    4、whos命令  

        查看某变量详细信息

       4.1  whos 回车  //查看所有变量信息

       4.2 whos + 变量名 回车 // 查看该变量详细信息

        eg:whos a 回车

    5、x/ylable命令  //给xy轴加横纵坐标说明

        eg:xlable (‘x轴’) 回车

    6、disp()  //屏幕输出函数,类似于c语言中的printf()函数

     

        disp函数直接将内容输出在Matlab命令窗口中,关键是看disp函数怎么把字符和数字在一起进行显示。

        disp(X)函数只有一个输入,当你有多个字符串作为输入时就会报错。

    例如:

        disp('Alice is ' , num2str(12) , ' years old!' );

    就会报错--输入参数过多。

        但是将里边的内容用中括号一括就成了一个字符串,

    例如:

        str=['Alice is ' num2str(12) ' years old!'];

        disp(str);

    上边这句话也就等价于:

        disp=(['Alice is ' num2str(12) ' years old!']);

    这就是加中括号的原因,而不是因为num2str(),

        因为disp(num2str(12));也是正确的,因为里边就只有一个字符串。

    7、zeros函数 //创建一个全为零元素的数组

    1、B = zeros(n)  返回一个n x n的零矩阵.如果n不是一个标量,将抛出错误。
    2、B = zeros(m,n) or B = zeros([m n])  返回一个m x n的零矩阵。
    3、B = zeros(d1,d2,d3...) or B = zeros([d1 d2 d3...]) 返回一个d1-by-d2-by-d3-by-... .的零元素数组。
    4、B = zeros(size(A))  返回一个和A一样大小的零数组。
    5、zeros(m, n,...,classname) or zeros([m,n,...]  返回一个类型为classname的m x n x...零数组。classname可以是下面一些值:double', 'single', 'int8', 'uint8', 'int16', 'uint16', 'int32', or 'uint32'
    示例
        x = zeros(2,3,'int8');
    备注
        MATLAB语言 没有一个 维度 声明 ; MATLAB 自动为矩阵分配存储空间。 然而,对于大型矩阵 , MATLAB程序可能会执行得更快 ,如果零函数用于设置一个矩阵,其元素将产生一次 , 或行或列的时间预留存储空间。例如
    
    2、B = zeros(m,n) or B = zeros([m n])  返回一个m x n的零矩阵。
    3、B = zeros(d1,d2,d3...) or B = zeros([d1 d2 d3...]) 返回一个d1-by-d2-by-d3-by-... .的零元素数组。
    4、B = zeros(size(A))  返回一个和A一样大小的零数组。
    5、zeros(m, n,...,classname) or zeros([m,n,...]  返回一个类型为classname的m x n x...零数组。classname可以是下面一些值:double', 'single', 'int8', 'uint8', 'int16', 'uint16', 'int32', or 'uint32'
    示例
        x = zeros(2,3,'int8');
    备注
        MATLAB语言 没有一个 维度 声明 ; MATLAB 自动为矩阵分配存储空间。 然而,对于大型矩阵 , MATLAB程序可能会执行得更快 ,如果零函数用于设置一个矩阵,其元素将产生一次 , 或行或列的时间预留存储空间。例如
    
        x = zeros(1,n); 
        for i = 1:n
        x(i) = i; 
        end

     

     

     

     

     

     

     

    展开全文
  • MATLAB零基础入门教程

    万人学习 2019-05-12 18:47:12
    MATLAB零基础入门教程,主要介绍数组和矩阵、数据类型和M文件设计等。很详细地介绍了MATLAB语言的基础知识。 本课程的特点是内容系统全面,条理清晰,并且内容比较新,讲了表、时间表等新的数据类型。
  • MATLAB基础入门课程

    万人学习 2017-09-13 09:30:14
    MATLAB基础入门课程,系统介绍MATLAB的基础知识。 主要从数组、运算、结构和绘图等几方面进行讲解 简单易懂,轻松入门MATLAB
  • Matlab小白入门必备教程

    千人学习 2019-12-30 15:27:30
    MATLAB 是一种用于算法开发、数据可视化、数据分析以及数值计算的高级计算语言和交互式环境,本课程将深入浅出讲解 MATLAB 的基本操作、MATLAB 编程和绘图等。          
  • MATLAB R2018a 于16日正式发布,其中包含一系列 MATLAB/Simulink 的新功能和新产品,还包括 94 个其他产品的更新和修补程序。 解压密码:CSDN 其他说明见:https://www.52pojie.cn/thread-713048-1-1.html
  • matlab经典题目

    2018-07-23 17:47:46
    matlab经典题目,老师上课的时候给的,后续再发具体程序。matlab经典题目,老师上课的时候给的,后续再发具体程序。matlab经典题目,老师上课的时候给的,后续再发具体程序。
  • matlab 加载excel数据

    2013-07-01 16:24:57
    importdata是非常好用的命令,它可以从txt,xls等加载数据, 例如:A=importdata('filename.txt') A=importdata('filename.xls') 假如是txt文本,既有字符又有数据可以用 A.data显示数据,A.textdata显示字符 ...
    importdata是非常好用的命令,它可以从txt,xls等加载数据,
    例如:A=importdata('filename.txt')
    A=importdata('filename.xls')
    假如是txt文本,既有字符又有数据可以用
    A.data显示数据,A.textdata显示字符
    假如是excel文本,
    A.Sheet1显示数据,
    展开全文
  • EXCEL 数据导入MATLAB

    2017-11-28 18:09:09
    EXCEL 数据导入MATLAB中做分析 MATLAB7.0有XLSREAD命令:
  • Matlab经验集

    千次阅读 2020-05-17 22:37:21
    前言和目录 预留坑位 此为笔记文档 这里会记下一些没有填上的坑 ...本文使用的Matlab版本是R2019a,可能有的高阶功能不向下兼容,需要自行查阅资料 pdf版建议打开pdf的目录功能,markdown转pdf的时候会自动

    前言和目录

    预留坑位

    此为笔记文档

    这里会记下一些没有填上的坑

    • patch属性是什么

    • 属性是什么

    • 二维和三维的隐函数怎么表示

    • 子级和父级是什么

    • 特殊的数据可视化方法,如heatmap、imagesc

    • 元胞

    • 多文件编程设计

    • syms函数句柄是什么

    阅读注意

    • 里面百度文库的链接需要打开flash再进入

    • 本文使用的Matlab版本是R2019a,可能有的高阶功能不向下兼容,需要自行查阅资料

    • pdf版建议打开pdf的目录功能,markdownpdf的时候会自动根据标题生成目录

    • 在CSDN的版本由于图片转存太麻烦有的部分原本有图的我就没上传,但是大体不影响阅读,我会留下外网链接,里面将是pdf版

    • 不保证正确!如果发现错误请联系本人,本人将在更新过程中改正!

    • 本人ID:
      GitHub:BJTU-ChrisLee

      CSDN:BJTU_Chris_Lee

    • 预计之后会持续在CSDN更新,每次更新都会直接改一整篇文章(本文本质是个人的学习笔记),所以请跟进关注

    • 转载之类的请注明出处(个人CSDN的ID等),另外见版权声明部分


    Matlab使用入门

    基础操作

    • 怎么注释?
    %...
    %{
    %}
    

    怎么不每次显示结果?

    在行末加上 ;

    怎么多行输入?

    用连行符 ...,不过字符串似乎不支持多行输入

    怎么开新界面窗口?

    figure函数 相关资料

    disp函数可以简单发送信息

    怎么关闭所有窗口/重置所有变量/清屏?

    clear close函数 clear close等的用法

    怎么暂停程序?

    pause类函数 pause类用法

    注意只有在操作端左边显示>>的时候才能输入

    如果想要在编写代码的时候就确定一个调试点,可以设置一个keyboard函数,它允许程序暂停的同时进行值的调整

    怎么从用户获得输入?

    input函数:

    v1=input('提示性语句:');
    %如果想要在input里加上变量的话可以采用下面的方式
    v2=input([str1,num2str(v3),str2]);%同样适用于`disp`函数
    %即字符串在Matlab中是特殊处理的
    %也可以结合disp:
    disp([str1,num2str(v3),str]);
    v4=input('')%不能缺失 ''
    

    注意,所有的输入和声明赋值操作是一样的,具体见矩阵和字符串中相关内容

    从文件输入方法在后面提及

    全局变量怎么使用?

    % in 'a.m':
    global a;
    a=0;
    % to use a in 'b.m':
    global a;
    

    为什么看到很多函数原形带有字符串?

    比如:

    plot(x,y,'--gs','LineWidth',2,'MarkerSize',10,'MarkerEdgeColor','b','MarkerFaceColor',[0.5,0.5,0.5]);
    

    (该语句来自于plot的技术文档)

    实际上可以类比C语言读文件时候的'rb'等控制符,为了易读,将可以更改的命令都做成了字符串,以便很明了地更改属性

    有哪些需要特别注意的点?

    • Matlab所有的下标都是1开始索引的
    • Matlab中的字符串使用单引号包起来
    • Matlab中的Mat(矩阵)是重点,几乎所有操作都是以矩阵作为基础的
    • Matlab中char指字符串
    • Matlab中如果想一行输入多个变量需要使用空格分割,,表示的是一行多个表达式
    • Matlab逻辑运算符号中:
      • 等于/不等于:==~=
      • 且/或:&&||,这两者均有短路机制
      • 非:~
      • 还有一种逐位运算的逻辑运算符,将在矩阵的运算部分内容中说到

    遇到不知道的怎么办?

    1. 百度 面向百度的Matlab编程
    2. 对于看不懂的函数,输入help cmd查看官方帮助文档(实际上本文很多东西都是直接help来的

    两大数据结构——矩阵和字符串

    矩阵有哪些操作?

    矩阵的输入和声明

    直接声明

    A=[1,2,3;2,3,4]
    A = 
         1     2     3
         2     3     4
    

    从用户获得输入,注意,输入格式与在代码中输入是一样的

    A=input('input A:')
    %input
    [1,2,3;...
    2,3,4]
    %end of input
    A = 
         2     3     4
         2     4     5
    

    注意,下列方法获得的也是个向量/矩阵,这对理解Matlab怎么操作函数有很重要的意义

    A=1:2:5
    A = 
         1     3     5
    A=1:3:5
    A = 
         1     4
    A=1:3
    A = 
         1     2     3
    A=[1:2:5,1:3:5]
    A = 
         1     3     5     1     4
    A=[[1:2:5]',[1:3:7]']%'是转置,这里涉及了子矩阵的组合,见‘重构矩阵的方法’一节
    A = 
         1     1
         3     4
         5     7
    A=input('input A:')
    %input
    1:1:3
    %end of input
    A = 
         1     2     3
    

    可以猜测,实际上a:step:b指的是从ab,步长为step的向量,也可以知道这种向量和[1,2,3]这种向量并没有不同之处,这很重要!直接关系能不能正确理解后面的函数!

    获取矩阵信息的函数

    • 获得行列数

      [rows,cols]=size(A);
      szA=size(A);%szA是一个二维行向量
      maxrc=length(A);%各个维度的元素数的最大值(2*3*4的三维矩阵即4)
      
    • 获得维度,注意维度类比是x、y坐标的意思

      dimA=ndims(A);
      
    • 获得非0元素个数

      cnt_nzero=nnz(A);
      
    • 声明矩阵的常用方法

      sz是指一个n维向量代表每个维度的元素数

      A=ones(sz);%全为1的矩阵
      B=zeros(sz);%全为0的矩阵
      C=rand(sz);%产生在(0,1)区间均匀分布的随机阵
      D=eye(sz);%产生单位阵
      E=randn(sz)%产生均值为0,方差为1的标准正态分布随机矩阵
      

      特殊矩阵 见链接中的 二-3

    • 线性索引和坐标的转化

      这在位运算中会涉及到,这里只是介绍

      摘抄自此

      可以使用单个下标A(k) 表示matlab矩阵中的元素,MATLAB不会以矩阵和数组在MATLAB命令行窗口中的显示形状存储矩阵和数组,而是会将矩阵和数组存储为单个元素列。这种单个列由矩阵中的所有列组成,没一列都附加到最后一列。

      因此,矩阵 A

      A = [2 6 9; 4 2 8; 3 5 1]
      A =
          2     6     9
          4     2     8
          3     5     1
      

      实际上是以序列形式存储在内存中:2,4,3,6,2,5,9,8,1,注意这里是按照先列后行的方式排布

      矩阵A中位于第3行,第2列的元素(值=5)也可以标识为实际存储序列中的第6个元素。要访问此元素,可以使用标准的A(3,2)语法,也可以使用A(6)。

      如果提供多个下标,Matlab将会基于分配给数组的维度计算存储列的索引。例如,假定 A 之类的二维数组的大小为 [d1 d2],其中 d1 表示数组中的行数,d2 表示列数。如果提供两个表示行-列索引的下标 (i, j),则偏移为

      (j-1) * d1 + i
      

      给定表达式 A(3,2),MATLAB 会将 A 的存储列的偏移计算为 (2-1) * 3 + 3,即 6。从头开始数六个元素即会到达值 5

      主要运用的就是find函数,所以只对find函数简要介绍

      find(x)返回一个包含数组 X 中每个非零元素的线形索引的向量

      A=[1,0,3;0,4,0;5,0,6]
      (find(A))' %转置是为了看起来方便些
      ans = 
           1     3     5     7     9
      (find(A<3))'%这里涉及了矩阵的位运算
      ans =
           1     2     4     6     8
      

      这里也可以看出Matlab优先处理列向量

    重构矩阵的方法

    • 直接提取法

      行的范围:row_a->row_b,列的范围:col_a->col_b

      sonA=A(row_a:row_b,col_a:col_b)
      

      如果想要提取全部行/列的话

      sonA=A(row_a:row_b,:)%获得了A的row_a->row_b行的全部列
      

      如果不知道具体多少行/列也不想多用变量的话

      sonA=A(row_a:row_b,col_a:end)
      

      如果你想的话,甚至可以从row_b->row_a翻转矩阵

      son_rev_A=A(row_b:-1:row_a,1:end)
      %获得A全部列调转row_a->row_b行之后的矩阵,这里也可以猜出A(:,:)格式的本质是什么
      

      还记得吗,a:step:b实际上是一种向量,所以下面的方法获得矩阵也是可以的

      这里pos使用的是线性索引

      A=[1,0,3;0,4,0;5,0,6];
      pos=[1,2;3,4]
      A(pos)
      ans = 
           1     0
           5     0
      pos=[1:2:3;2,5]
      A(pos)
      ans = 
           1     5
           0     4
      

      可以猜测直接提取法的本质:

      A(B)将返回与B大小一致的矩阵,其中的元素为B上每一个位置对应的线性索引对应的A的值

    • reshape函数

      目测不是很好用,如果上面的方法无法满足需求时可以 点击这个链接 了解具体怎么用,当然,也可以help reshape

    • 组合矩阵法

      获得A,B构成的矩阵,这里的例子要求A的行数与B的行数一致(与数学上的分块的要求一样)

      C=[A(1:2,1),B(1:2,:)]
      

    矩阵的简单操作函数

    只记录几个常用的,其他如求上三角、求转置、翻转等 参阅这个链接

    • 取整函数fix ceil floor

      %fix将X的每个元素朝零方向四舍五入为最近的整数
      A=fix(10*rand(1,10));%产生1*10的每个元素均为0-9之间随机整数的矩阵
      %ceil将X的每个元素四舍五入到大于或等于该元素的最接近整数
      %floor将X的每个元素四舍五入到小于或等于该元素的最接近整数
      
    • 计算矩阵的秩/行列式/特征值/迹/逆等

      r=rank(A);%矩阵的秩
      d=det(A);%矩阵的行列式
      v=eig(A);%矩阵的特征值,这里的v是一个列向量
      t=trace(A);%矩阵的迹,这里A必须是方阵
      A=inv(A);%矩阵的逆
      

      需要查找其他的求值函数(如求约化阶梯阵)时可以百度和help cmd

    • 求矩阵的转置

      B=A'
      B=A.'
      

      两者的在涉及复数时的区别请参阅help '

    • 求对角线元素

      与求迹不同,这里不需要A是方阵,会逐个取 A(i,i) 元素

      B=diag(A)
      

    矩阵的运算

    注意,matlab几乎一切皆矩阵,所以矩阵的运算会伴随使用Matlab的全过程,一定要思考每一个函数与矩阵是否有关系

    求单个矩阵部分/整体的和/均值/最大值

    A=[1,2,3;4,5,6;7,8,9]为例,不考虑多维数组,需要讨论多维数组的情况请help cmd

    • sum和max

      对于向量,[num,index]=max(A)返回元素最大值和下标

      %A=[1,2,3,4,5]
      [num,index]=max(A(1:end,1))
      num =
           1
      index =
           1
      

      对于矩阵,直接看代码

      %A=[1,2,3;4,5,2;3,3,4]
      [y,u]=max(A)
      y =
           4     5     4
      u =
           2     2     3
      [y,u]=max(A,2)
      
      

      对于矩阵,sum(A) 将返回包含每列总和的行向量

      sum(A)
      ans = 
      		12 		15 		18
      

      如果想要部分区域的,可以提取矩阵再求和

      sum(A(1:2,2:end))
      ans = 
      	7 		9
      

      如果想要全部的,可以sum(sum())

      sum(A(1:2,2:end))
      ans = 
      	16
      

      实际上是一个复合过程

    • mean求均值

      对于向量,mean(A) 返回元素均值

      mean(A(1:end,1))
      ans = 
      	4
      

      对于矩阵,mean(A) 返回包含每列均值的行向量

      这里不再demo,与sum函数类似

    求多个矩阵的和/差/积/

    这里有很多复杂的小点,比如很多数学上不支持的运算是有结果的,遇到疑问请help cmd

    A=[1,1,2;2,3,4;3,4,5]B=[-1,-1,2;1,2,3;2,3,4] 为例

    • 计算A*B

      注意要满足矩阵相乘的法则,即A_rows==B_cols

      A*B
      ans = 
           4     7    13
           9    16    29
          11    20    38
      
    • 计算A-B

      这里AB维度不同也没事,具体为什么请help -

      A-B
      ans = 
           2     2     0
           1     1     1
           1     1     1
       
      A(1:2,1)-B(1,1:2)
      ans = 
           2     2
           3     3
      

      注意,也可以对部分元素相减的

      A(1:3)=B(1:3)-1%这里用的是线性索引
      A = 
          -2     1     2
           0     3     4
           1     4     5
      
    • 求解线性方程组x*A=Bx

      注意AB的列数要一致

      A/B(1,1:end)
      ans = 
          0.3333
          0.5000
          0.5000
      
    • 求解AB中元素逐个相除的结果

      注意数值输入AB必须具有相同的大小或兼容的大小,例如,AM*N 矩阵,B是标量或 1*N 行向量,具体请help ./

      A./B
      ans = 
         -1.0000   -1.0000    1.0000
          2.0000    1.5000    1.3333
          1.5000    1.3333    1.2500
      
      A
      ans = 
           1     1     2
           2     3     4
           3     4     5
      B(1,1:end)
      ans = 
          -1    -1     2
      A./B(1,1:end)
      ans = 
         -1.0000   -1.0000    1.0000
         -2.0000   -3.0000    2.0000
         -3.0000   -4.0000    2.5000
      

      其他类型除法可以help / 后根据提示的内容查阅

    • 矩阵的逻辑运算

      注意,没有要求行列相同,返回的都是logical数组

      下面的讨论针对AB矩阵

      A=[1,2,3;0,4,0;5,0,6]
      B=[0,1,0;3,3,5;0,6,4]
      
      • 按位取且:都不为0则返回1

        A&B
        ans = 
           0   1   0
           0   1   0
           0   0   1
        
      • 按位取或:只要有一个不为0就取1

        A|B
        ans = 
           1   1   1
           1   1   1
           1   1   1
        
      • 按位逐个取异或:均为0/均不为0-取0,一个为0一个不为0-取1

        xor(A,B)
        ans = 
           1   0   1
           1   0   1
           1   1   0
        
      • 按位比较:即矩阵的大小关系是指各个元素的大小关系

        A<3
        ans = 
           1   1   0
           1   0   1
           0   1   0
        
      • 其他的逻辑运算可以help &来查找,关于logical数组也直接help logical了解,不详细介绍

    Matlab是怎么处理字符串的?

    在MATLAB中,字符串是用单撇号括起来的字符序列。MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。与字符串有关的另一个重要函数是eval,其调用格式为: eval_r(t) 其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行

    以上引用自 链接文章第五点 ,下就常用函数和基础功能进行介绍

    字符串的声明和输入

    声明和从用户获得输入,与矩阵的类似,不再详细解释

    str='this is test string'
    str=input('input str:')
    %input
    'This Is Test Too'
    %end of input
    str = 
        'This Is Test Too'
    

    可以通过num2str函数将数组转化成字符串:

    num2str(100)
    ans = 
        '2'
    

    允许申请多维字符串

    strC=['Hello';'World']
    ans = 
        'Hello'
        'World'
    num2str([1,2;3,4])
    ans = 
        '1  2'
        '3  4'
    

    子串和母串操作

    注意将字符串看成矩阵

    • 使用小串和变量构建大串

      strA='Hello';
      strB='World';
      [strA,num2str([1,2,3]),strB]
      ans = 
          'Hello1  2  3World'
      %很蹩脚的例子,不过很能反应特点
      
    • 也可以将多维字符串连接起来

      [[strA;strB],num2str([1,2;3,4]),[strA;strB]]
      ans = 
          'Hello1  2Hello'
          'World3  4World'
      
    • 获得指定下标构成的子串

      strA(1:2:5)%用的是线性索引
      ans = 
          'Hlo'
      

      当然也可以针对多维字符串取下标,将它想象成矩阵就行,但是要注意用的是线性索引

      strC=[strA;strB];
      strC([1:3:5;2:2:5])
      ans = 
          'Ho'
          'Wo'
      

    字符串常用函数

    • 判断是否相等

      strcmp(s1,s2),相等返回1,不相等返回0。另外注意这与C语言中的strcmp判断字典序不一样

    • 查找子串

      strfind(str,pattern),在str中找pattern,返回的是下标索引,经过测试应该不能在多维字符串中搜索

    • 替换子串

      newStr = strrep(str,old,new),将 str 中出现的所有 old 都替换为 new

    • eval函数可以执行字符串中的命令

    • 其他的函数参见:前人总结的链接

    应用举例

    str='This Is Test Too'为例

    • 获得反串

      str(1,end:-1:1)
      ans = 
          'ooT tseT sI sihT'
      

      从中,结合前面 ‘重构矩阵的方法’ 可以看出,字符串就是一个1*N的向量,这点与C语言处理方式很像

    • 查找大写字母并转换成小写

      1. 线性索引:字符串(1*N向量)中的线形索引就是指下标(从1开始,与C语言不通)

      2. 字符串的逻辑运算:与矩阵一样,因为实际上字符串就是1*length的矩阵

        str=='T'
        ans = 
           1   0   0   0   0   0   0   0   1   0   0   0   0   1   0   0
        
      3. find函数

        help find中提到,find(x)返回一个数组 X 中每个非零元素的线性索引的向量,与矩阵中的类似

        由于根据help find

        • 如果 X 为向量,则 find 返回方向与 X 相同的向量
        • 如果 X 为多维数组,则 find 返回由结果的线性索引组成的列向量
        • 如果 X 不包含非零元素或为空,则 find 返回一个空数组

        在字符串处理中,find(x)将返回一个行向量

        find(str=='T')
        ans = 
             1     9    14
        

        在上一点中可以看到,只有这三个线性索引对应位置str的值是‘T’

        所以想要找到str中的大写字母下标就很简单了

        pos=find(str>='A' & str<='Z')%这里的&就是逐位取和了
        pos = 
             1     6     9    14
        

        解释一下,这里实际上发生的是:

        1. str>='A'str<='Z'分别操作,返回两个logical向量
        2. 两个返回的向量按位取且,即得到新的向量,只有两个向量的某个同时取1时,新的向量那个位置才为1
        3. find函数找到新的向量中的1并且返回下标向量给pos
      4. 转换

        这里实际上是部分元素减法,与部分矩阵减法是一样的

        str(pos)=str(pos)-'A'+'a' %Matlab中用的也是ASCII码
        

    初级数据可视化

    怎么从excel、txt文件中提取信息/向文件中输出信息,以及注意事项

    简单的读取法则

    • 从excel中提取:xlsread(filename),涉及提取部分/涉及中文/等问题时,help xlsread
    • 从txt中提取:importdata(filename),同样,涉及问题时help inportdata,值得注意的是,从txt中提取文件时可以指定分隔符,也可以由系统猜测(并输出)分隔符
    • 向excel写入:xlswrite(filename,mat),使用时help xlswrite

    涉及复杂表格读取时

    • 从excel中同时提取字符串和数字:importdata,会产生一个cell属性的textdata和一个doublemat
    • 另外,实际上可以点击左边文件后在界面的上方找到生成函数。。。
    • 关于table属性:这里有详细介绍

    简单的写入方法

    • 向excel中写入:xlswrite,具体怎么做help xlswrite,注意有时候会拉出.csv文件,即使已经有且指定了.xlsx文件了,并且会覆盖原文件
    • 怎么从多张表中读取数据后写入一张表:

    怎么做二维数据可视化?

    plot的使用和基础知识

    即给出点的数据,怎么用坐标轴的形式显示出来

    • 运用plot画出简单函数

      以下面一连串代码为例,将会实现

      • 设置xy向量来表示函数取点
      • 设置曲线属性的方法
      • hold on来在一张图上画函数
      • 标注图名和xy坐标
      • 怎么在一个figure里画多张图

      定义xy,在Matlab中的函数实际上都是用点画出来的

      注意,这里sin(x) cos(x) tan(x)得到的实际上是一个矩阵,矩阵元素逐一相乘必须用.*

      而画图实际上就是把x对应y变成点在图上画出

      x1=linespace(-2*pi,2*pi);
      y1=sin(x).*cos(x);
      x2=linespace(-2*pi,2*pi);
      y2=sin(x).*tan(x);
      

      一个函数画两条线,这里的fg1是一个line数据

      如果想要知道更多关于fg1可以设置的东西,如每隔多少数据标点,颜色,打星等等,可以help line点击line属性解决

      fg1=plot(x1,y1,x2,y2)
      fg1(1).LineWidth=2;
      fg1(2).Marker='*';
      

      使用下面的语句也可以达到同样的效果,但是注意,需要标注时plot只能画一条线

      fg1=plot(x1,y1,'LineWidth',2)
      hold on;
      fg2=plot(x2,y2,'Marker','*')
      hold off;%别忘了hold off
      

      下面的函数可以标注图,经测试,对以上两种方法都适用

      xlabel('x轴')
      ylabel('y轴')
      title('TEST')
      grid on;%显示单元格
      

      如果想要画分图的话,需要用到subplot函数,以下案例来自help plot

      ax1 = subplot(2,1,1);% top subplot
      plot(ax1,x1,y1)
      title(ax1,'TOP')
      ylabel(ax1,'sinx*cosx')
      ax2 = subplot(2,1,2);% bottom subplot
      plot(ax2,x2,y2)
      title(ax2,'Bottom Subplot')
      ylabel(ax2,'sinx*tanx')
      

      当然,也可以通过获得plot返回值的方法改变曲线特性,这里就不赘述了

    • 参数方程画法

      这里选择圆 $(x-1)2+(y-3)2=4 $ 来做图

      圆的方程可以写成:$\begin{cases}x=2\cos t\ +1&\ y=2\sin t\ +3&\end{cases} $ ,根据plot实际上就是一个个点连起来的思想,可以如下编写:

      t=linspace(0,2*pi);
      x=2*cos(t)+1;
      y=2*sin(t)+3;
      plot(x,y)
      

      画出来的圆有点扁,可以通过axis equal让沿每个坐标方向使用相等的数据单位

    • 分段函数画法

      可以利用hold on来画

      例如,如果要画$\begin{cases}e^{x}&-3<x<0\ \cos x&0<x<3\end{cases} $

      x1=linspace(-3,0);
      y1=exp(x1);%注意matlab没有自然对数e,如果真的需要请用exp(1)表示
      plot(x1,y1,'b')
      hold on;
      x2=linspace(0,3);
      y2=cos(x2);
      plot(x2,y2,'b')
      hold off;
      grid on;
      

      理论上可以把y分成两份对应,不过过于复杂了就不演示了

      后面会介绍更好的画法

    • 奇奇怪怪的技巧

      • plot([x1;x2],[y1;y2])可以画出类似直方图的感觉
      • 备用

    其他的plot类函数

    • fplot精确画一元函数

      以 $y=x\sin \frac{1}{x} $ 为例

      如果plot的话是不好取点的,因为这个函数在 $\lim_{x\rightarrow 0} $ 的时候是一个震荡函数,会丢失很多细节,这时使用自带的fplot函数就很有帮助了

      y=@(x)sin(1./x);
      fplot(y,[minx,miny])
      

      需要控制更多内容,如相对误差、线形

      当然用fplot画参数方程也是可以的

      x=@(t)cos(3*t);
      y=@(t)sin(2*t);
      fplot(x,y,[tmin,tmax])%对于这个曲线建议设成[0,2*pi]
      

      也可以画分段函数,还是以$\begin{cases}e^{x}&-3<x<0\ \cos x&0<x<3\end{cases} $ 为例

      fplot(@(x) exp(x),[-3 0],'b')
      hold on
      fplot(@(x) cos(x),[0 3],'b')
      hold off
      grid on
      
    • ezplot不推荐用的函数

      help ezplot界面中说

      (不推荐)易用的函数绘图函数

      那就简单看一下吧。。。

      画隐函数,以x2y4=0x^{2}-y^{4}=0为例

      ezplot('x^2-y^4')
      

      不太懂为什么不建议使用

    其他坐标系下的绘图

    注意的点:

    • 如果使用了hold on命令,可以在同一张图中绘不同坐标系的图

    • polar绘制极坐标系下的图

      绘制$r=e^{\sin t}+2\sin 4t-\left( \cos \frac{t}{5} \right)^{6} $图像

      t=linspace(0,24*pi,100);%这里maxt越大图像越诡异。。。不管了
      r=exp(sin(t))+2*sin(4*t)-(cos(t/5)).^6;
      ax1=subplot(2,1,1);
      ax2=subplot(2,1,2);
      plot(ax1,t,r);
      polar(ax2,t,r)
      

      这里也可以利用[x,y]=pol2cart(t,r)画出在直角坐标系下的图

       [x,y]=pol2cart(t,r);
       plot(x,y)
      
    • semilogysemologxloglog绘制对数坐标的图

      plot几乎一样,不再赘述,有需要help cmd

    • plotyy双y坐标绘图

      plot还是基本上一样,有需要help plotyy

    • 双坐标轴绘图

      直接参考链接

    三维绘面

    图源自《matlab:从入门到精通》

    分割平面上的点

    一般使用meshgrid去分割点,与linspace作用一致(虽然实际上可以不用linspace去分割)。根据help meshgrid的提示,实际上[X,Y] = meshgrid(v)作用是X 是一个矩阵,每一行是V 的一个副本;Y 也是一个矩阵,每一列是 V 的一个副本

    这么分布可以让其他元素和xy一一对应,在后面一个例子中会体现这么做的用处

    三维绘图函数

    常用的有四种:mesh surf surfc surfl

    参考链接

    直接看图:

    [X,Y] = meshgrid(-8:.5:8);
    R = sqrt(X.^2 + Y.^2) + eps;%eps是一个精度范围,详情help eps
    Z = sin(R)./R;
    
    ax1=subplot(2,2,1);
    ax2=subplot(2,2,2);
    ax3=subplot(2,2,3);
    ax4=subplot(2,2,4);
    
    mesh(ax1,X,Y,Z);
    surf(ax2,X,Y,Z);
    surfc(ax3,X,Y,Z);
    surfl(ax4,X,Y,Z);
    
    title(ax1,'mesh');
    title(ax2,'surf');
    title(ax3,'surfc');
    title(ax4,'surfl');
    

    具体需求请help cmd,另外注意可以通过下面行为产生无颜色的图像

    %紧接着上面的代码
    shading interp;
    colormap(gray);
    

    另外对于surfl:(命令中的’l’表示这是一个光照表面 lighted surface)命令显示三维光照物体的表面,可以使用这个命令产生没有线条的三维图像

    实际上这里的函数不是万能的,比如复杂的无法用$z=f\left( x,y\right) $表示的三维图形就不好表示了,具体的处理方法见后面的高级可视化

    另外,这里使用的都是绘面,而plot3实际上是绘制线的!

    图的标注

    实际上在上个三维绘图的比较中就可以看到子图的操作方法了,这里再拓展一些,探究一下Matlab到底怎么实现控制图的信息的

    subplot包含了什么,axes是什么

    上面的比较代码中,我们看到先声明了ax=subplot(2,2,1);,这里解释一下:

    • subplot(m,n,p)的用法:将当前图窗划分为 m*n 网格,并在 p 位置创建笛卡尔坐标区(这里分图的顺序是先行后列)
    • ax的类型Axes有什么用:Axes 属性可控制 Axes 对象的外观和行为。通过更改属性值,您可以修改坐标区的特定方面,例如:ax.Title.String = 'My Title'; ax.Title.FontWeight = 'normal';分别改变了标题的内容和字体粗细(在help Axes中说到了如何用两行字符命名,可以查阅)

    关于画子图的问题,见链接

    怎么改变图中的信息

    推荐使用ax.的方式访问以及更改,具体到需要改变什么的时候可以help axes点击Axes属性来了解

    有时候有点函数也可以输入ax以达到指定在某个图中进行某功能的目的,例如help legend中的“在特定坐标区上添加图例”

    实际上所有的图都是通过改变Axes属性来改变图的内容的,那在单个图的标注中为什么没有看到ax这种东西出现呢?(实际上只有执行ax=gca;才能看到带Axes属性的变量)因为title类似的函数默认针对gca(当前图窗的当前坐标区或图,通常是最后创建的图窗或用鼠标点击的最后一个图窗)操作,所以才不需要ax辅助。但是在子图的标注中如果通过gca就全乱套了,所以一般是通过ax控制的,也就是上面的比较代码中显示的那样

    所以如果不确定,执行ax=gca来改变单图信息,以和多图情况统一

    其他图形标注函数

    • 填充函数:fill(x,y,c);

      执行了感受下效果就行,具体要求help fill

      x=linspace(-2*pi,2*pi);
      y=x.*sin(x);
      fill(ax);
      
    • 图中标注函数:text(x,y,'str')

      同样,知道有这么个东西就行,用的时候直接help text查询可以更改的值

      不过要注意,建议使用text的返回值,不然可能没地方改内容

      %接上代码
      text(0,0,'<-----zero','Rotation',90);
      

      另外gtext可以直接用鼠标标注

    • 增加图例的函数:legend()

      具体参照技术文档help legend

    • help plot可以帮助了解更多细节

    • 待填坑

      目前只找到这么多,如果以后发现更多的可以更新

    特殊图形

    只会指明有哪些函数,并贴出示意图,具体怎么操作请help cmd

    另外实际上Matlab绘图页已经给出了一些图的样子了,可以用那个做参考

    • 条形图:barbar3
    • 面积图:area
    • 饼图:pie
    Y=[45 6 8;7 4 7;6 25 4;7 5 8;9 9 4;2 6 8];
    %下面两个语句选择一个执行
    subplot(2,2,1)
    bar(Y)
    title('图1')
    subplot(2,2,2)
    bar3(Y), title('图2')
    subplot(2,2,3)
    bar(Y,2.5)
    title('图3')
    subplot(2 , 2, 4)
    bar(Y,'stack'),title('图4')
    
    area(Y)
    grid on
    colormap summer
    set(gca,'layer','top')
    title('面积图')
    
    • 柱状图:hist(直角坐标下)rose(柱坐标下)

    • 误差棒图:errorbar

    • 火柴杆图:stemstem3

    • 阶梯图:stairs

    • 罗盘图:compass

    • 羽毛图:feather

    • 箭头图:quiverquiver3


    过渡内容

    部分名词解释

    函数句柄、匿名函数和sym属性

    来源:

    CSDNdalao总结的匿名函数的相关

    CSDNdalao总结的syms的相关

    顺便,说一下英文

    • 函数句柄:funtion handle

    sym类型表示的函数以及匿名函数的区别:

    • 实际上sym是一种可以看作字符串表示的函数,但是内部的变量需要先命名,并且不采用矩阵运算符表示

      syms x y
      a=1;
      z=a*(x+y)
      %{
      z =
      x + y
      %}
      ezplot(z);
      

      显示的是x+y=0x+y=0的图像,即使后来clear xclear a也不会失效,所以和xya本身没关系

    • 而匿名函数则可以看作一个function,输入就在@()的括号里面

      y=@(x)integral(@(t)sin(t),0,x);
      fplot(y)
      y(pi)
      %{
      ans =
          2.0000
      同时显示图像
      %}
      

      这里y=0xsintdty=\int_{0}^{x}sint\rm{dt},使用了两个函数句柄,实际上很多Matlab的函数都要求输入函数句柄,可以理解成C语言中的传函数指针进另一个函数

    部分函数了解

    • gca见模块“图的标注-怎么改变图中的信息”

    • axis equal使笛卡尔坐标系gca坐标轴相等

    • grid on使gca显示坐标区间

    • intergral(@()f,a,b)表示abfdt\int_{a}^{b}f\rm{dt}

    • int(y,a,b)和上个基本一样,不同的是这里的y是一个sym类型的

    latex的公式打法

    这里主要是为了作者写作方便

    引用:

    CSDN:Latex 箭头、下标、符号上下写文字、正方形和三角形

    CSDN:Latex 符号总结(各种箭头符号)

    简书:Latex常用符号

    百度经验:Latex常用数学符号输入方法

    • 下标x0x_{0}x_{0}

    • 上标xyx^{y}x^{y}

    • 积分符号xx+1\int_{x}^{x+1}\int_{x}^{x+1},实际就是\int和上下标

      • 一重闭合积分\oint\oint

      • 二、三重闭合积分:需要对应的支持。。。暂时就不管了吧

        \def\ooint{{\bigcirc}\kern-11.5pt{\int}\kern-6.5pt{\int}}
        \def\oooint{{\bigcirc}\kern-12.3pt{\int}\kern-7pt{\int}\kern-7pt{\int}}
        \ooint
        \\
        \oooint
        

        见链接:简书转载

    • 分数xy\frac{x}{y}\frac{x}{y}

    • 无穷\infty\infty

    • 更号下x\sqrt{x}\sqrt{x}

    • n次方下xn\sqrt[n]{x}\sqrt[n]{x}

    • 趋近于x0x\to0x\to0

    • 极限limx+\lim_{x\to+\infty}\lim_{x\to+\infty}

    • 连加i=1n\sum\limits_{i=1}\limits^{n}\sum\limits_{i=1}\limits^{n}对于其他上下有算式的符号同理

    • 微分dx\rm{d}x\rm{d}x,这里直接dx也没问题。。。实际上是一个调整为正体的函数

    • 大括号{xayb\begin{cases} x&a &\\ y&b &\end{cases}\begin{cases} x&a &\\ y&b &\end{cases},这里的cases是排版关键字

    • 小写希腊字母α...\alpha...\alpha,alpha可以是任何希腊小写字母的英文,见附录

    • 大写希腊字母Γ...\Gamma...\Gamma,Gamma可以是任何希腊大写字母英文,见附录

    • 换行:\\

    • 空格:\(里面有个空格)

    • 向量x\vec x\vec x

    • 特殊乘除   × ÷\ \ \cdot \ \times\ \div :点乘\cdot,叉乘\times,除号\div

    • 连等号KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲x&=y*2\\&=2y \e…\begin{align}x&=y*2\\&=2y \end{align}

      特殊需求:简书链接

      其他对齐了解:来自CSDN

    • 三角\triangle\triangle

    • 梯度\nabla\nabla

    返回值问题

    实际上l=polar(theta,rho)中的polar函数返回的是line属性,如果输入gca的话可以看到一个叫做PolarAxes的东西,也就是所谓极坐标的axes(前面提过),关闭窗口之前输入会显示l的信息,关闭窗口之后再输入l会显示已删除的对象。实际上函数都是有返回值的,但是本文档前期都不会关注返回值和属性这俩复杂的东西,只要知道如果需要(比如改变图形样式)可以想办法获得这个返回值(也有可能是一个窗口)即可,在涉及到可能实用的地方会专门提及

    Matlab的高级数学应用

    主要还是百度+help cmd来的。。。

    基础和不那么基础的

    部分初等函数的表示方法

    • lnlnlog
    • exe^{x}exp

    特殊符号的意义

    • NaN:不是一个数,在积分中可以认为出错了,比如syms x;int(1/x,-1,1)就会返回NaN,因为这个函数的积分结果是无的(千万别看偶函数说值为0!

    • inf:无穷,比如输入syms x;int(exp((-1)*x^2),0,inf)就可以返回pi^(1/2)/2

      ​ 这里实际上就是说:0ex2dx=π2\int_{0}^{\infty}e^{-x^2}\mathrm{d}x=\frac{\sqrt{\pi}}{2}(这个可以通过双重积分转极坐标系下求解)

    特殊函数

    一般涉及积不出来的函数的时候会遇到,见下文链接

    常见积不出来的函数

    logint:对数积分

    • 定义:0x1ln(x)dx\int_{0}^{x}\frac{1}{ln(x)} dx

    • 出处:

      syms x;
      y=x/log(x);
      int(y,2,3)
      

    求定积分

    部分来源:

    符号定积分

    上下限是常数

    • 一重int

      直接举例:

      syms x;
      y=log(sqrt(2*x-x^2)/x+sqrt(1+(2*x-x^2)/x^2));
      int(y,0,2)%integration
      

      注意这里使用的是ezplot画函数的方法,所以y的表达式里面不需要使用矩阵的乘法

      输出结果:

      ans =
      2
      

      但是如果输入下列函数

      syms x;
      y=x/log(x);
      int(y,2,3);
      

      回出现下面结果

      ans =
      logint(9) - logint(4)
      

      这里的logint是一个函数,见前的特殊函数

      如果把输入的范围变成(0,2)(0,2)就会返回NaN,应该是无极限(不是无穷)的意思

      实际上如果去积分的话会发现这里跨了一个函数趋向无穷的点,是不可积点

    • 一重integral

      直接举例:

      integral(@(x)sin(x),-pi/2,pi)
      

      这里的@(x)可以称为函数句柄在报错中经常会出现

    • 二重integral2计算定上下限函数

      还是直接举例

      f=@(x,y)exp(-x.^2/2).*sin(x.^2+y);
      I=dblquad(f,-2,2,-1,1)
      

      返回的结果为:

      I =
          1.5745
      

      注意到dblquad底下抛了一个warning,说建议使用integral2。。。那就用吧

      实际上类比integral3就是三重积分

    上下限存在变量

    • 变上限函数的表示和求解

      变上限函数可以用symsint去定义

      syms x;
      y=int(sin(x),x,0,x);%这里可以查出y是一个syms变量,很神奇
      int(y,x,0,pi/2)%返回结果pi/2 - 1,实际上就是对1-cos(x)求定积分
      ezplot(x,y)%画出图
      
    • 二重双int二重转二次

      上述intergral函数不能求11dx1x21x2dy\int_{-1}^{1}\rm{d}x\int_{-\sqrt{1-x^2}}^{\sqrt{1-x^2}}\rm{d}y这种函数(提示信息:A 和 B 必须为浮点标量。),所以可以用一些笨方法:双int

      syms x y;
      iy=int(1,y,-sqrt(1-x^2),sqrt(1-x^2));%这里第二个y表示对谁积分。。。吧
      int(iy,x,-1,1)
      

    数值积分

    数值二重积分


    Matlab的高级可视化

    复杂二元函数的可视化

    fplot匿名函数型

    • 使用fplot表示一般函数

      y=@(x)sin(x)./x;
      fplot(y);
      grid on;
      
    • 使用fplot表示参数函数

      星形线x23+y23=1x^{\frac{2}{3}}+y^{\frac{2}{3}}=1

      x=@(t)(cos(t)).^3;
      y=@(t)(sin(t)).^3;
      fplot(x,y);
      axis equal
      grid on
      

      最速降线{x=θsin(θ)y=1cos(θ)\begin{cases} x=\theta-sin(\theta) &\\ y=1-cos(\theta) &\end{cases}

      x=@(t)t-sin(t);
      y=@(t)1-cos(t);
      fplot(x,y,[0,2*pi]);
      grid on
      axis equal
      
    • 使用fplot表示隐函数

      不用参数方程是不可行的,见来自iLoveMATLAB的解释

    • 至于怎么调节范围之类的,help fplot了解

    fimplicit匿名函数表示隐函数型

    • 表示方法:

      fimplicit(@(x,y)f,[minn,maxn])在x、y上的[maxn,minn][maxn,minn]区间内画f=0f=0的曲线

    • 举例

      双纽线(x2+y2)2=(x2+y2)(x^2+y^2)^2=(x^2+y^2)(当然实际上双纽线可以用极坐标画,也不是非用隐函数就是了)

      fimplicit(@(x,y)((x.^2+y.^2).^2-(x.^2-y.^2)));
      grid on
      

      当然也有其他办法

      syms x y;
      fimplicit(((x.^2+y.^2).^2-(x.^2-y.^2)));
      grid on
      
    • 关于怎么控制范围之类的,help fimplicit了解

    极坐标系下的绘图

    前面使用过polar画极坐标下的图,但是根据Matlab的help polar中的提示,不建议使用polar而建议使用polarplot来绘图,所以下面以polarplot为主讲~~(当然实际上我并没有看出两者的区别)~~

    极坐标下画分图

    目前没有找到类似subplot的函数,如果需要画分图的话可以转到直角坐标系画,使用的函数为pol2cart,很简单,注意可以用在柱坐标系中,具体不介绍了(使用时如果不知道怎么用请help pol2cart

    极坐标画图方法

    目前找到的资料看似乎只有使用最原始的方法画图——也就是找θ\theta和对应的ρ\rho,然后映射在坐标上

    只举例,不难理解就不管了

    以花瓣图ρ=sin(3θ)\rho=sin(3\theta)举例

    theta=linspace(0,2*pi);
    rho=sin(3*theta);
    l=polarplot(theta,rho);
    l.Color='r';l.Marker='*';l.MarkerSize=2;
    

    或者试一试心型线ρ=1sin(θ)\rho=1-sin(\theta)

    theta=linspace(0,2*pi);
    rho=1-sin(theta);
    l=polarplot(theta,rho);
    l.Color='r';
    

    复杂三元函数的可视化

    三维可用参数表示线的画法

    注意,这里介绍的都是能用参数表示的线,实际上表示线还可以使用相交平面的方法,这种方法暂时不在本块讨论

    以螺线{x=cos(v)y=sin(v)z=v\begin{cases} x=cos(v)\\ y=sin(v) \\ z=v \end{cases}为例:

    t = 0:pi/50:10*pi;
    st = sin(t);
    ct = cos(t);
    plot3(st,ct,t)
    

    看得出来,还是和plot一样的味道,本质是画三维点,然后连成线,有的其他功能help plot3(如标点、改变线宽颜色之类的)

    再画几个好玩的

    圆锥螺线{x=tcos(t)y=tsin(t)z=t\begin{cases}x=tcos(t)\\y=tsin(t)\\z=t\end{cases}

    t = 0:pi/50:10*pi;
    st = t.*sin(t);
    ct = t.*cos(t);
    plot3(st,ct,t)
    

    上升的三叶玫瑰线(三叶玫瑰线:ρ=sin(3θ)\rho=sin(3\theta){x=sin(3θ)cos(θ)y=sin(3θ)sin(θ)z=θ\begin{cases}x=sin(3\theta)cos(\theta)\\y=sin(3\theta)sin(\theta)\\z=\theta\end{cases}

    %使用plot3
    t = 0:pi/100:10*pi;%这里间距不够小的话可能出现断线
    z=t/5;
    x = sin(3*z).*cos(z);
    y = sin(3*z).*sin(z);
    plot3(x,y,z)
    

    实际上使用fplot3也可以表示类似函数,注意这里的fplot3不再能使用@(x,y)f(x,y)

    以下函数来自help fplot3,表示的是:{x=ty=t/2z=sin(6t)\begin{cases}x=t\\y=t/2\\z=sin(6t)\end{cases},实际上可以看成在x=2yx=2y平面上画图,神了。。。

    xt = @(t)t;
    yt = @(t)t/2;
    zt = @(t)sin(6*t);
    fplot3(xt,yt,zt,[-2*pi 2*pi])
    

    fsurf匿名函数画可用z=f(x,y)z=f(x,y)表示的面

    前面介绍的是使用meshgridsurf画面,下面介绍利用funtion handlefsurf画面的方法

    有时候使用ezsurf系统会抛一个提示,即建议使用fsurf,不过本质上就是一个syms一个handle function的区别,不是大问题

    • 使用fsurf表示z=f(x,y)z=f(x,y)

      使用马鞍面z=x2y22z=x^{2}-\frac{y^{2}}{2}举例

      funz=@(x,y)(x.^2)-(y.^2)./2
      fsurf(funz)
      %终端会输出funz是一个function handle,并且显示马鞍面
      
    • 使用fsurs表示参数函数(画线型和画面型)

      先说画线型,也就是只有一个参数的参数方程

      以螺线{x=cos(v)y=sin(v)z=v\begin{cases} x=cos(v)\\ y=sin(v) \\ z=v \end{cases}为例,注意fsurf也可以画线,只不过这个计算时间有亿点长

      x=@(v)cos(v)
      y=@(v)sin(v)
      z=@(v)v
      fsurf(x,y,z)
      

      面也可以用fsurf表示

      以螺旋面{x=ucos(v)y=usin(v)z=v\begin{cases} x=ucos(v) \\ y=usin(v) \\z=v \end{cases}为例

      x=@(u,v)u.*cos(v)
      y=@(u,v)u.*sin(v)
      z=@(u,v)v
      fsurf(x,y,z)
      
    • 同样,不能用来画隐函数,但是遗憾的是,Matlab没有支持画三维隐函数的函数,ezmeshezsurf都只能画显函数,也就是类似z=f(x,y)z=f(x,y)的函数(可以见help ezmesh中的说明来了解)。理论上可以用另一种方式表示包含隐函数的三维图形,但是下面会先介绍一些其他类型的画3D图形的函数

    • 还有一点,由于默认是z=f(x,y)z=f(x,y),无法画x=1x=1或者x+y=1x+y=1这类的图像,可以使用后面介绍的ezimplot3来画

    球面的绘制

    代码来源

    原理介绍

    function drawsphere(a,b,c,R)
    %% 绘制球面
    % 以(a,b,c)为球心,R为半径
        % 生成数据
        [x,y,z] = sphere(20);
        % 调整半径
        x = R*x; 
        y = R*y;
        z = R*z;
        % 调整球心
        x = x+a;
        y = y+b;
        z = z+c;
    
        % 使用mesh绘制
        figure;
        axis equal;
        mesh(x,y,z);
    
        % 使用surf绘制
        figure;
        axis equal;
        surf(x,y,z);
    end
    

    主程序调用drawsphere(1,2,3,2);这种即可,这里也可以改变图形变成画椭球,原理一样就不介绍了

    利用等值面画隐三维函数

    方法和函数来源

    ezimplot3函数

    如引用链接里说的,已经有dalao做出了函数来演示,函数名称为ezimplot3链接下载

    • 输入参数:

      ezimplot3一共有三种参数调用方式

      • ezimplot3(f) 画函数f(X,Y,Z)=0f(X,Y,Z)= 02π<X<2π,2π<Y<2π,2 pi<Z<2π-2\pi< X < 2\pi, -2\pi < Y < 2\pi, -2\ pi < Z < 2\pi上的图形
      • ezimplot3(f, [A,B])画函数f(X,Y,Z)=0f(X,Y,Z)= 0A<X<B,A<Y<B,A<Z<BA< X < B, A < Y < B, A < Z < B上的图形
      • ezimplot3(f, [XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX])画函数f(X,Y,Z)=0f(X,Y,Z)= 0XMIN<X<XMAX,YMIN<Y<YMAX,ZMIN<Z<ZMAXXMIN< X < XMAX, YMIN < Y < YMAX, ZMIN < Z < ZMAX上的图形
    • 通过返回值来改变图像的属性的方法

      实际上在函数文件"ezimplot3.m"的开头可以看到使用的语句是:function h = ezimplot3(varargin),是有返回值的,通过l=ezimplot3(@(x,y,z)x*y*z*log(1+x^2+y^2+z^2)-10,[-20,20])可以得到l变量的属性是patch,是一种填充多边形,后面会介绍

      可以通过点运算符访问成员来改变图像,可以help patch来查询有哪些属性可以改变,一般会去改动的就是面颜色l.FaceColor(默认为[1,0,0]即红色)和面透明度l.FaceAlpha(默认为0.7)两项了

    ezimplot3函数的实现

    留坑,暂时学不会,涉及了很多函数和属性方面的知识

    四元函数的颜色表示

    想法来源:链接

    实际上只针对v=f(x,y,z)v=f(x,y,z)类型的,其中vv的大小用颜色表示

    直接上代码,估计用处不大

    [x,y,z]=meshgrid(1:0.1:10,1:0.1:5,2:0.1:5);
    v=x.^2+3*x.*y+4*y.*z;
    xslice=[2,5,10];
    yslice=2;
    zslice=[2,4];
    slice(x,y,z,v,xslice,yslice,zslice)
    colormap hsv
    

    切平面、截面、朝向等

    切面

    关于“切片”部分的一个来源

    这里的切面指的是V=f(x,y,z)V=f(x,y,z)这种函数的切面,用来反应在某处的函数值

    使用的函数是slide,使用的时候直接help slide即可

    截面

    • 根据Matlab中文论坛的说法,Matlab并没有自带的截面函数

    • 有一种暴力的方法,即使用ezimplot3来实现截面的功能,不过个人觉得有点呆

    奇奇怪怪的技巧

    二维分段函数的简单画法

    思想来源和下一个一样,使用了位运算

    例如,画y={cos(x)x<=0arccos(x)x>0y=\begin{cases}cos(x)&x<=0\\arccos(x)&x>0\end{cases}

    直接上代码(范围可以自定,以[π,2][-\pi,2]为例)

    x=linspace(-pi,2);
    y=(x<=0).*cos(x)+(x>0).*cosh(x);
    plot(x,y),grid on,axis equal
    

    当然使用fplothandle function也是一样的

    fplot(@(x)(x<=0).*cos(x)+(x>0).*cosh(x),[-pi,2]),grid on,axis equal
    

    无论使用什么方法,都比之前介绍的分两段简单得多

    三维分段可用z=f(x,y)z=f(x,y)表示的图形的简单画法

    思想来源:百度知道的链接,下面为答者使用的代码

    [x,y]=meshgrid(-1:0.01:1);
    z1=2*x.^2+y.^2;
    mesh(x,y,z1)
    hold on
    z=1.*(x>=-1&x<=1);
    surf(x,y,z)
    hold off
    

    这个脑洞确实很大,对于其他函数也可以使用类似的方法,见下

    引用中的方法即这种方法的灵魂,利用位运算分割函数,确实是很厉害的想法

    举个例子,如果要画f(x,y)={12(x+y)e(x+y)x>0,y>00othersf(x,y)=\begin{cases}\frac{1}{2}(x+y)e^{-(x+y)}&x>0,y>0\\0&others\end{cases}(函数来自概率论),直接使用下述代码即可

    [x,y]=meshgrid(-1:0.1:4);
    z=(x>=0&y>=0).*(1\2.*(x+y).*exp(-x-y));
    surf(x,y,z)
    

    Matlab概率方面应用


    Matlab中的元胞


    Matlab的程序设计举例

    包括Matlab的函数设计、与其他语言一起编程(走迷宫例子)


    技巧性代码举例


    Matlab中的属性

    坑先放在这,这个是一个大坑,估计要很长时间以后才能填了


    假装有个版权声明

    • 本文本质为BJTU-李远铄的笔记,内容无法保证全对,谨慎使用
    • 后面会一直更新,目前看最重要的部分是元胞和Matlab属性的理解,这部分和建模竞赛其实可能有点距离了,不过好玩就行
    • 文中涉及了很多其他人的内容,我全部都是用引用标出了,如果您不希望您的内容被以此方式转载,请联系本人,我将在更新中删除

    附录

    附录A:希腊字母对照表

    展开全文
  • 13Matlab与excel、txt的交互,包括读取,保存,新建,
  • MATLAB安装

    万次阅读 多人点赞 2018-07-27 18:09:11
    Matlab 2016a 安装包及破解教程百度云分享链接: 链接:https://pan.baidu.com/s/1i6BgD8p 密码:17gg   Matlab安装教程: 1、下载文件,得到R2016a_win64.part1.rar、R2016a_win64.part2.rar两部分安装文件和...

     

    • Matlab安装教程
    • 1、下载文件,得到R2016a_win64.part1.rar、R2016a_win64.part2.rar两部分安装文件和Matlab 2016a Win64 Crack破解文件。
    • 2、解压安装文件(解压R2016a_win64.part1.rar即可)得到“R2016a_win64”文件夹,安装文件为iso格式,打开iso虚拟光驱并运   行“setup.exe”开始安装。
    • 3、安装程序启动后选择”使用文件安装密钥 不需要Internet连接“

              

    • 4、是否接受许可协议的条款,选择“是”
    • 5、选择”我已有我的许可证的文件安装密钥“,在下面输入秘钥:”09806-07443-53955-64350-21751-41297

              

    • 6、选择安装路径,一般情况下不推荐安装在C盘,该软件占用空间比较大,需选择一个非系统盘进行安装,我安装在”D:\Soft\MATLAB\R2016a“

              

    • 7、选择需要安装的产品,建议全选,也可根据自己需要选择要安装的产品,我是全选的,选择之后点击“下一步”

              

    • 8、进入安装选项,快捷方式全选,点击”下一步“,进入安装确认界面进行安装

              

    • 9、进入安装界面,有进度条显示安装进度,安装过程需要较长时间,安装完成后会进入”产品配置说明“界面,点击下一步,完成安装。

     

    • Matlab破解教程:
    • 1、将下载的Matlab 2016a Win64 Crack.rar破解文件解压,解压后文件如图所示,文件夹中的”license_standalone.lic“就是许可文件
    • 2、打开Matlab的安装目录”D:\Soft\MATLAB\R2016a\bin\win64“,点击”activate_matlab.exe“进行激活,选择”在不使用 Internet 的情况下手动激活“

              

    • 3、选择“输入许可证文件的完成路径(包括文件名)”,点击”浏览“,选择刚解压的 Matlab 2016a Win64 Crack 文件夹中的”license_standalone.lic“许可文件。

              

    • 4、之后提示”激活完成“,此时不要打开软件,打开解压的 Matlab 2016a Win64 Crack 文件夹中的MATLAB Production Server\R2016a\bin\win64,复制其中的3个dll文件
    • 5、打开”D:\Soft\MATLAB\R2016a\bin\win64“文件,将复制的dll文件粘贴在这个文件夹中,系统会提示“复制文件”选项,所有文件都选择“复制和替换”即可完成 Matlab 软件破解。

              

    • 6、之后打开软件,就拥有一个完全免费的 Matlab 2016a 中文破解版本了。
    • 上一步安装完成后在执行下一步便能全部安装完成。

    MATLAB2016b,装完了后出现了没有快捷方式,并在菜单栏中没有相应的文件夹,而且打开MATLAB时感觉有点不正常,先是闪现dos那种界面,然后才慢慢打开(MATLAB打开都很慢),而且之前的m文件都不能相关联。

    解决方案如下:

    方案一:

    找到MATLAB的安装目录文件一般是D:\Program Files\Matlab\bin(根据你自己的安装路径,不一定是D盘),然后找到MATLAB.exe,右键,选择“发送”、“到桌面快捷方式”,这样就可以从桌面打开MATLAB了。但缺点是开始菜单没有快捷方式。.m文件也没有关联。

    方案二:

    第一遍安装完后,不会出现勾选创建快捷方式及文件关联的页面,安装完后,关闭;
    再打开安装程序,进行安装,但选择安装组件时,会显示都已安装,随便选择一个需要的组件(选择一个较小的,这样安装过程会快),若提示已安装过,则选择覆盖安装,

    之后就会出现创建快捷方式及文件关联的页面了。勾选“桌面”和“开始菜的那种的所有app”就ok了


    安装完成后,随便打开一个.m文件,然后所有的.m文件都可以和MATLAB关联起来了。这样*.m文件也能关联上了。

    推荐使用第二种方法,从根本上解决了问题

     

    展开全文
  • WIN10系统Matlab R2017a 中文版安装教程

    万次阅读 多人点赞 2017-08-06 20:55:28
    下面带来win10 64-bit Matlab 2017a的安装过程,亲测,可用。 (一)所需文件及下载地址 1.Matlab-R2017a-ISO镜像文件 链接:https://pan.baidu.com/s/1pNhyKGF 密码:cgt2 2.破解文件 链接:...
  • MATLAB R2019b超详细安装教程(附完整安装文件)

    万次阅读 多人点赞 2020-03-03 13:13:46
    摘要:本文详细介绍MATLAB R2019b的安装步骤,为方便安装这里提供了完整安装文件的百度网盘下载链接供大家使用。从文件下载到证书安装本文都给出了每个步骤的截图,按照图示进行即可轻松完成安装使用。本文目录包括...
  • matlab中@的用法

    万次阅读 多人点赞 2018-07-12 15:41:39
    举例:sin是matlab中的一个函数,但sin只是函数名,还不是函数句柄,不可以用于传参。f = @sin;这行代码定义了一个函数句柄,变量名是f。这样就可以当做参数传递了(这就是上面代码中的意义所在),而且还可以跟sin...
  • 基于MATLAB的二值化图像常用的三种方法

    万次阅读 多人点赞 2016-11-24 21:44:14
    图像分割是模式识别和计算机视觉中很重要的一个部分,基于阈值的图像分割具有简单、计算量小、效率高等特点,在实际图像处理中具有广泛的应用。经过国内外学者的广泛努力,已经提出了数以百计的阈值分割的算法,依据...
  • MATLAB安装教程

    千次阅读 2019-06-04 13:48:20
    MATLAB安装教程 https://blog.csdn.net/lalala8866/article/details/77454198
  • MATLAB R2018b 安装教程

    万次阅读 多人点赞 2019-03-26 22:21:50
    MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、...
  • 安装 | MATLAB2018a (64位) 安装教程及安装包下载链接

    万次阅读 多人点赞 2019-04-04 11:39:01
    博主github:https://github.com/MichaelBeechan ... 安装包下载链接:内附MATLAB从入门到精通视频教程 全17讲 链接:https://pan.baidu.com/s/12NM-hWPhXg8mFhdoGbpv7A 提取码:1i4x 链接:https://pan.baidu...
  • matlab 安装教程matlab 2016a(matlab R2016a)

    千次阅读 多人点赞 2019-03-15 09:54:33
    ----------------------...Matlab 2016a 安装包及秘钥: 链接:https://pan.baidu.com/s/1FPVGrNUYwseJZknv1jX20g 提取码:ped4 下载好8个压缩文件在同一个文件夹里(单独文件太大有些格式的U盘不能存储) 全部下...
  • ubuntu16.04安装MATLAB R2017b步骤详解(附完整文件包)

    万次阅读 多人点赞 2018-03-23 22:34:29
    摘要:介绍在ubuntu16.04中从下载到安装成功的完整步骤。...最近由于项目原因,需要在ubuntu上安装MATLAB,在网上找了很久发现一些教程大多步骤繁杂且叙述不够完整。和Windows安装软件的方式有所不同,从找文件包到...
  • MATLAB 2018b 安装与简介

    万次阅读 多人点赞 2019-02-18 13:07:00
    matlab2018b安装教程 该版本是mathworks官方开发的新版本的商业数学软件,可以帮助用户不仅仅将自己的创意停留在桌面,还可以对大型数据集运行分析,并扩展到群集和云。另外matlab代码可以与其他语言集成,使您...
  • 本文已迁移至:https://www.cnblogs.com/coco56/p/11205999.html 如您对电脑操作不太熟悉,需要本人远程帮您安装软件,请查看:https://www.cnblogs.com/coco56/p/13385525.html
  • Matlab安装教程(自己收藏!)

    千次阅读 2019-03-05 23:22:50
    https://blog.csdn.net/qq_38386316/article/details/78302147
  • matlab2019b安装教程

    万次阅读 2019-12-28 12:35:26
    首先下载安装包和crack文件 然后解压得到iso文件 win10上直接右键加载 win7上需要下载加载软件加载 点击setup安装 断网输入序列号 09806-07443-53955-64350-21751-41297 完成后使用crack中的bin覆盖即可 ...
  • matlab2020安装包及详细安装教程

    万次阅读 多人点赞 2020-07-08 12:13:03
    安装教程 1、将安装包解压 2、双击打开matlab 3、以管理员身份运行setup.exe 4、接受条款,下一步 5、输入密钥 09806-07443-53955-64350-21751-41297 6、点击浏览 7、 打开matlab文件夹下面的crack文件夹,...
  • MATLAB 2017b 安装教程 (推荐)

    万次阅读 热门讨论 2018-09-12 22:34:24
    MATLAB 2017b 安装教程 matlab 2017b安装包及安装教程 ... ... ...本Markdown编辑器使用[Sta**重点内容**ckEdit][6]修改而来,用它写博客,将会带来全新的...Matlab安装教程: 1、下载文件,得到破解文件。 * 点...
  • Matlab2018a软件安装包及安装教程

    千次阅读 2019-01-06 16:16:29
    Matlab2018a软件安装包及安装教程 matlab2018a中文版软件安装包及安装教程 matlab2017b软件安装包及安装教程 malab2017a英文版软件安装包及安装教程 获取更多软件请关注微信公众号:朴凡软件库 欢迎使用Markdown...
  • 2016 matlab 中文版软件和安装教程

    万次阅读 多人点赞 2017-08-21 18:56:40
    与网盘资源相对应的安装教程 1.将网盘中的3个文件下载下来后,解压(在当前路径下),得到下面这步。一定注意,下面这五个文件 不是安装路径 2.在上面的 R2016a_win64 文件中 找到 setup.exe ...
  • matlab2019a安装

    千次阅读 2019-07-04 12:20:22
    微信搜索软件管家,然后回复matlab 就会有很多教程,选择matlab2019a 网上搜的很多安装教程会出错,但是这个一次成功
  • MATLAB2018A安装教程

    万次阅读 2018-09-16 10:36:09
    1:同时选中进行解压 a、解压R2018a_Win64.part1~4.rar(网盘为3个安装包R2018a_Win64.part1~3.rar)   b、解压R2018a_Win64.iso到当前文件夹(安装包总大小...2:解压完后打开“setup.exe”进入安装步骤     ...

空空如也

1 2 3 4 5 ... 20
收藏数 357,211
精华内容 142,884
关键字:

负载均衡