1.1 调出GUIDE界面

Command Window 输入 guide

1.2 矩阵

  1. % 生成矩阵
  2. % 直接法
  3. a = [1,2,3;4,5,6;7,8,9];
  4. % 冒号一维矩阵 a = 开始:步长:结束,步长为1可省略
  5. b = 1:1:10; % 1,2,...10
  6. b = 1:10; %与上一个等价
  7. % 函数生成
  8. % linspace(开始,结束,元素个数),等差生成指定元素数的一维矩阵,省略个数则生成100
  9. c = linspace(0,10,5);
  10. % 特殊矩阵
  11. e = eye(4); % eye(维数)单位阵
  12. z = zeros(1,4); % zeros(维数)全零阵
  13. o = ones(4,1); % ones(维数)全1
  14. r = rand(4); % rand(维数)0~1分布随机阵
  15. rn = randn(4); % randn(维数)0均值Gaussian分布随机阵
  16. % 矩阵运算
  17. diag_a = diag(a,1); % diag(行向量,主对角线上方第k条斜线)用行向量生成对角阵
  18. tril_a = tril(a,1); % tril(矩阵,主对角线上方第k条斜线)生成矩阵的下三角阵,triu上三角阵
  19. % 加、减、乘、乘方
  20. a*a
  21. % 点运算
  22. % a.*b , a./b , a.\b , a.^b 对应元素的*,/,\,^运算
  23. a.*a
  24. % 逆矩阵
  25. pinv(a) % 伪逆矩阵,当a不是方阵,求广义逆矩阵;当a是可逆方阵,结果与逆矩阵相同
  26. % 特征值,特征向量
  27. [v,D] = eig(a); % 输出v为特征向量,D为特征值对角阵
  28. % *行列式
  29. det(a)
  30. % *秩
  31. rank(a)
  32. % *伴随
  33. compan(b)
  34. %%
  35. % 矩阵的修改
  36. %部分替换
  37. chg_a = a;
  38. chg_a(2,3) = 4; % (行,列)元素替换
  39. chg_a(1,:) = [2,2,2]; % (行,:)替换行,为[]删除该行
  40. chg_a(:,1) = []; % (:,列)替换列,为[]删除该列
  41. % 转置
  42. T_a = a';
  43. % 指定维数拼接
  44. c1_a = cat(1,a,a); % 垂直拼接
  45. c2_a = cat(2,a,a); % 水平拼接
  46. % *变维
  47. rs_a = reshape(a,1,9); % 元素个数不变,矩阵变为m*n
  48. %%
  49. % 信息获取
  50. % 矩阵的行列数
  51. [row_a, col_a] = size(a); % [行数,列数]
  52. % 行列中最大的
  53. len_a = length(a);
  54. %%
  55. % 多维数组
  56. % 创建
  57. % 直接法
  58. mul_1(:,:,1) = [1,2,3;2,3,4];
  59. mul_1(:,:,2) = [3,4,5;4,5,6];
  60. % *扩展法
  61. mul_2 = [1,2,3;2,3,4];
  62. mul_2(:,:,2) = [3,4,5;4,5,6]; % 若不赋值第一页,第一页全为0
  63. % cat法
  64. mul_31 = [1,2,3;2,3,4];
  65. mul_32 = [3,4,5;4,5,6];
  66. mul_3 = cat(3,mul_31,mul_32); % 把a1a2按照“3”维连接
  67. %%
  68. % *字符串
  69. % 创建
  70. str0 = 'hello world'; % 单引号引起
  71. str1 = 'I''m a student'; % 字符串中单引号写两遍
  72. str3 = ['I''m' 'a' 'student']; % 方括号链接多字符串
  73. str4 = strcat(str0, str1); % strcat连接字符串函数
  74. str5 = strvcat(str0, str1); % strvcat连接产生多行字符串
  75. str6 = double(str0); % 取str0的ASCII值,也可用abs函数
  76. str7 = char(str6); % 把ASCII转为字符串
  77. % 操作
  78. % 比较
  79. strcmp(str0, str1); % 相等为1,不等为0
  80. strncmp(str0, str1, 3); % 比较前3个是否相等(n)
  81. strcmpi(str0, str1); % 忽略大小写比较(i)
  82. strncmpi(str0, str1, 3); % 忽略大小写比较前3个是否相等
  83. % 查找替换
  84. strfind(str0, str1); % 在str0找到str1的位置
  85. strmatch(str1, str0); % 在str0字符串数组中找到str1开头的行数
  86. strtok(str0); % 截取str0第一个分隔符(空格,tab,回车)前的部分
  87. strrep(str0, str1, str2); % 在str0中用str2替换str1
  88. % 其他
  89. upper(str0); % 转大写,lower转小写
  90. strjust(str0, 'right'); % 将str0右对齐,left左对齐,center中间对齐
  91. strtrim(str0); % 删除str0开头结尾空格
  92. eval(str0); % 将str0作为代码执行
  93. %%
  94. %转换
  95. % ___2___ --> 如num2str,将数字转字符串; dec2hex,将十进制转十六进制
  96. str_b = num2str(b);
  97. % abs,double取ASCII码;char把ASCII转字符串
  98. abs_str = abs('aAaA');

1.3 程序结构

  1. %%
  2. a = 5;
  3. x = [1, 2]; y =[3, 4];
  4. %%
  5. %选择结构
  6. %if-elseif-else-end
  7. if a>0
  8. disp(x);
  9. elseif a==0
  10. disp(a);
  11. else
  12. disp(a-1);
  13. end
  14. %switch-case-otherwise-end
  15. switch a
  16. case 0
  17. disp(a);
  18. case 1
  19. disp(a+1);
  20. otherwise
  21. disp('aaa');
  22. end
  23. %try-catch
  24. try
  25. z = x*y;
  26. catch
  27. z = x.*y; % try出错,则执行
  28. end
  29. disp(z);
  30. %%
  31. % 循环结构
  32. % for 循环变量=初值:步长:终值 - end
  33. for i=0:1:10 % 步长为负,则初值大于终值
  34. disp(i); % 循环体内不可对循环变量做修改
  35. end
  36. % while-end
  37. while a>2
  38. disp(a);
  39. a = a-1;
  40. end
  41. %%
  42. %程序控制
  43. %continue 跳过当次循环剩下语句,进入下一循环
  44. %break 跳出当前循环
  45. %return 跳出程序并返回
  46. %%
  47. %m文件
  48. %脚本文件:没有输入输出参数,执行后变量结果返回工作空间,可直接运行
  49. %以下是脚本文件,文件名假设为exp.m
  50. %**********************************************
  51. clear
  52. r = 5;
  53. s = pi*r*r;
  54. p = 2*pi*r;
  55. disp(s)
  56. disp(p)
  57. %**********************************************
  58. %以下是调用
  59. %**********************************************
  60. exp
  61. %**********************************************
  62. %函数文件:以function开头,有输入输出,变量为局部变量不返回工作空间,需要调用
  63. %以下是函数文件
  64. %**********************************************
  65. function [s, p] = circ(r) % 文件命名应与函数名一致,系统找文件名circ.m
  66. %CIRC 计算圆面积和周长 % 简单说明
  67. %参数:输入参数r:圆半径;输出参数s:圆面积,p:周长 % 详细说明
  68. s = pi*r*r;
  69. p = 2*pi*r;
  70. end
  71. %**********************************************
  72. %以下是调用
  73. %**********************************************
  74. [a, b] = circ(5); % 返回为多个参数时,若写a = circ(5)则保留第一个返回值
  75. %**********************************************
  76. %*以下是带子函数的函数文件
  77. %**********************************************
  78. function y = key(w) % 主函数放第一个,函数名为key
  79. if w==0
  80. y = type0(w); % 调用子函数type0
  81. else
  82. y = type1(w);
  83. end
  84. end
  85. function y0 = type0(a) % 子函数,各子函数之间顺序无所谓
  86. y0 = a+1;
  87. end
  88. function y1 = type1(a)
  89. y1 = a+4;
  90. end
  91. %**********************************************
  92. %*函数输入输出参数可以不定
  93. %nargin:输入参数个数,nargout:输出参数个数
  94. %varargin:输入参数内容的元胞数组,varargout:输出参数
  95. %以下是函数文件
  96. %**********************************************
  97. function varargout = idk(varargin)
  98. x = length(varargin);
  99. varargout{1} = x;
  100. varargout{2} = x+1;
  101. end
  102. %**********************************************

1.4 图像绘制

  1. %%
  2. x = 0:0.1:2*pi;
  3. y1 = sin(x);
  4. y2 = cos(x);
  5. %%
  6. % 二维曲线绘制
  7. % 基本函数
  8. % plot(y)
  9. % y为向量
  10. plot(y1); % 纵坐标为y的值;横坐标自动为元素序号(角标+1),此处为1~9
  11. % y为矩阵
  12. figure; % 开启新绘图窗口,下一次绘图在新窗口
  13. y = [y1', y2'];
  14. plot(y); % y为矩阵,按每一列画出曲线,颜色自动区分
  15. % plot(x, y)
  16. % xy为向量
  17. plot(x, y1); % 先绘制曲线
  18. % plot(x1, y1, x2, y2...)
  19. plot(x, y1, x, y2); % 在同一个窗口同一坐标轴绘制多条曲线
  20. % 线性图形格式设置
  21. % 线形颜色数据点
  22. plot(x, y1, 'b:o'); % 蓝色 点线 圆圈
  23. % b g绿 r c m y k w
  24. % -实线 :点线 --虚线 -.点画线
  25. % .实点 o圆圈 x +十字 *星号 s方块 d钻石 v下三角 ^上三角 <左三角 >右三角 p五角星 h六角星
  26. % 坐标轴
  27. plot(x, y1);
  28. axis([-1*pi, 3*pi, -1.5, 1.5]); % 规定横纵坐标范围
  29. % 图形修饰
  30. % 标题标签
  31. title('a title'); % 图像标题
  32. xlabel('this is x'); % x轴标记,同理还有ylabelzlabel
  33. %图例设置
  34. legend('hahaha', 'location', 'best'); % str的顺序与绘图顺序一致; 'best'指图例位置最佳化,还有其他位置
  35. %图形保持
  36. plot(x, y1);
  37. hold on; % 在原有窗口y1曲线上增加绘制下一个图形
  38. plot(x, y2); % y2在同一窗口内被绘制
  39. hold off;
  40. %分割绘制
  41. subplot(2, 2, 1); % 分割成2x2区域,在第一块区域绘制下一个图形
  42. plot(x, y1); % y1被绘制在4块区域的第一块
  43. subplot(2, 2, 2); % 分割方法相同,区域改变
  44. plot(x, y2); % y2在第二块区域
  45. %%
  46. %*二维特殊图形绘制
  47. %柱状图
  48. bar(x, y, width, '参数'); % x横坐标向量,m个元素; y为向量时,每个x画一竖条共m条,矩阵mxn时,每个xn条;
  49. % width宽度默认0.8,超过1各条会重叠;
  50. % 参数有grouped分组式,stacked堆栈式; 默认grouped
  51. % bar垂直柱状图,barh水平柱状图,bar3三维柱状图,barh3水平三维柱状图(三维多一个参数detached, 且为默认)
  52. %饼形图
  53. pie(x, explode, 'lable'); % x为向量显示每个元素占总和百分比, 为矩阵显示每个元素占所有总和百分比
  54. % explode向量与x同长度,为1表示该元素被分离突出显示,默认全0不分离
  55. % pie3绘制三维饼图
  56. %直方图
  57. hist(y, n); % y为向量,把横坐标分为n段绘制
  58. hist(y, x); % x为向量,用于指定每段中间值, 若取N = hist(y, x), N为每段元素个数
  59. %离散数据图
  60. stairs(x, y, 'b-o'); % 阶梯图,参数同plot
  61. stem(x, y, 'fill'); % 火柴杆图,参数fill是填充火柴杆,或定义线形
  62. candle(HI, LO, CL, OP); % 蜡烛图:HI为最高价格向量,LO为最低价格向量,CL为收盘价格向量,OP为开盘价格向量
  63. %向量图
  64. compass(u, v, 'b-o'); % 罗盘图横坐标u纵坐标v
  65. compass(Z, 'b-o'); % 罗盘图复向量Z
  66. feather(u, v, 'b-o'); % 羽毛图横坐标u纵坐标v
  67. feather(Z, 'b-o'); % 羽毛图复向量Z
  68. quiver(x, y, u, v); % 以(x, y)为起点(u, v)为终点向量场图
  69. %极坐标图
  70. % polar(theta, rho, 'b-o'); % 极角theta, 半径rho
  71. theta = -pi:0.01:pi;
  72. rho = sin(theta);
  73. polar(theta, rho, 'b')
  74. %对数坐标图
  75. semilogx(x1, y1, 'b-o'); % x轴对数刻度表示, semilogyy轴对数刻度表示,loglog是两个坐标都用对数表示
  76. %双纵坐标
  77. plotyy(x1, y1, x2, y2, 'fun1', 'fun2'); % fun规定了两条条线的绘制方式,如plot,semilogx,semilogy,loglog,stem
  78. %函数绘图
  79. f = 'sin(2*x)';
  80. ezplot(f, [0, 2*pi]); % 绘制f并规定横坐标范围,也有[xmin, xmax, ymin, ymax]
  81. x = '2*cos(t)';
  82. y = '4*sin(t)';
  83. ezplot(x, y); % 绘制x(t),y(t)在[0, 2*pi]图像, 也可以在最后用[tmin, tmax]规定t的范围
  84. %%
  85. %三维曲线曲面绘制
  86. %三维曲线
  87. x = 0:0.1:2*pi;
  88. y = sin(x); z = cos(x);
  89. plot3(x, y, z, 'b-*');
  90. %三维曲面
  91. %三维网格
  92. x = -5:0.1:5; % 规定了x轴采样点,也规定了x轴范围
  93. y = -4:0.1:4; % 规定了y轴采样点,也规定了y轴范围
  94. [X, Y] = meshgrid(x, y); % 得到了xoy面网格点
  95. Z = X.^2+Y.^2;
  96. mesh(X, Y, Z) % XYmeshgrid得到的网格点,Z是网格顶点,c是用色矩阵可省略
  97. %三维表面图
  98. x = -5:0.1:5;
  99. y = -4:0.1:4;
  100. [X, Y] = meshgrid(x, y);
  101. Z = X.^2+Y.^2; % 以上部分同上
  102. surf(X, Y, Z) % 与上一个类似

1.5 多项式

  1. %%
  2. %多项式
  3. %创建
  4. p = [1, 2, 3, 4]; % 系数向量,按x降幂排列,最右边是常数
  5. f1 = poly2str(p, 'x'); % 生成好看的字符串 f1 = x^3 + 2 x^2 + 3 x + 4,不被认可的运算式
  6. f2 = poly2sym(p); % 生成可用的符号函数 f2 = x^3 + 2*x^2 + 3*x + 4
  7. %求值
  8. x = 4;
  9. y1 = polyval(p, x); % 代入求值;若x1为矩阵,则对每个值单独求值
  10. %求根
  11. r = roots(p); % p同上,由系数求根,结果为根植矩阵
  12. p0 = poly(r); % 由根求系数,结果为系数矩阵
  13. %%
  14. %数据插值
  15. %一维插值
  16. %yi = interp1(X, Y, xi, 'method')
  17. X = [-3, -1, 0, 1, 3];
  18. Y = [9, 1, 0, 1, 9]; % XY为已知点横纵坐标向量
  19. y2 = interp1(X, Y, 2); % 差值预估在x=2y的值,x不能超过已知范围(此处x<3)
  20. y2m = interp1(X, Y, 2, 'spline'); % spline方法(三次样条)差值预估在x=2y的值
  21. %二维插值
  22. %zi = interp1(X, Y, Z, xi, yi, 'method')
  23. %%
  24. X = [2, 3, 9, 15, 6, 7, 4];
  25. A = [1, 7, 2; 9, 5, 3; 8, 4 ,6];
  26. B = [1, 7, 3; 9, 5, 3; 8, 4 ,6];
  27. %数据统计
  28. %矩阵最大最小值
  29. y = max(X); % 求矩阵X的最大值,min最小值
  30. [y, k] = max(X); % 求最大值,k为该值的角标
  31. [y, k] = max(A, [], 2); % A是矩阵,'2'时返回y每一行最大元素构成的列向量,k元素所在列;'1'时与上述相同
  32. %均值和中值
  33. y = mean(X); % 均值
  34. y = median(X); % 中值
  35. y = mean(A, 2); % '2'时返回y每一行均值构成的列向量;'1'时与上述相同
  36. y = median(A, 2); % '2'时返回y每一行中值构成的列向量;'1'时与上述相同
  37. %排序
  38. Y = sort(A, 1, 'ascend'); % sort(矩阵, dim, 'method')dim1按列排序,2按行排序;ascend升序,descend降序
  39. [Y, I] = sort(A, 1, 'ascend'); % I保留了元素之前在A的位置
  40. %求和求积累加累乘
  41. y = sum(X); % 求和
  42. y = prod(X); % 求积
  43. y = cumsum(X); % 累加
  44. y = cumprod(X); % 累乘
  45. %%
  46. %*数值计算
  47. %最(极)值
  48. %多元函数在给定初值附近找最小值点
  49. x = fminsearch(fun, x0);
  50. %函数零点
  51. x = fzero(fun, x0); % 在给定初值x0附近找零点

1.6 符号函数

  1. %%
  2. %符号对象创建
  3. %sym函数
  4. p = sin(pi/3);
  5. P = sym(p, 'r'); % 用数值p创建符号常量P'd'浮点数'f'有理分式的浮点数'e'有理数和误差'r'有理数
  6. %syms函数
  7. syms x; % 声明符号变量
  8. f = 7*x^2 + 2*x+9; % 创建符号函数
  9. %符号运算
  10. % 加减乘除外
  11. % '转置 ; ==相等 ; ~=不等
  12. % sin, cos, tan; asin, acos, atan 三角反三角
  13. % sinh, cosh, tanh; asinh, acosh, atanh 双曲反双曲
  14. % conj复数共轭;real复数实部;imag复数虚部;abs复数模;angle复数幅角
  15. % diag矩阵对角;triu矩阵上三角;tril矩阵下三角;inv逆矩阵;det行列式;rank秩;poly特征多项式;
  16. % |----expm矩阵指数函数;eig矩阵特征值和特征向量;svd奇异值分解;
  17. %符号对象精度转换
  18. digits; % 显示当前用于计算的精度
  19. digits(16); % 将计算精度改为16位,降低精度有时可以加快程序运算速度或减少空间占用
  20. a16 = vpa(sqrt(2)); % vpa括起的运算使sqrt(2)运算按照规定的精度执行
  21. a8 = vpa(sqrt(2), 8); % 在vpa内控制精度,离开这一步精度恢复
  22. %%
  23. %符号多项式函数运算
  24. %*符号表达形式与相互转化
  25. %多项式展开整理
  26. g = expand(f); % 展开
  27. h = collect(g); % 整理(默认按x整理)
  28. h1 = collect(f, x); % 按x整理(降幂排列)
  29. %因式分解展开质因数
  30. fac = factor(h); % 因式分解
  31. factor(12); % 对12分解质因数
  32. %符号多项式向量形式与计算
  33. syms a b c;
  34. n = [a, b, c];
  35. roots(n); % 求符号多项式ax^2+bx+c的根
  36. n = [1, 2, 3];
  37. roots(n); % 求符号多项式带入a=1, b=2, c=3的根
  38. %*反函数
  39. fi = finverse(f, x); % 对f中的变量x求反函数
  40. %%
  41. %符号微积分
  42. %函数的极限和级数运算
  43. % 常量a,b
  44. %极限
  45. limit(f, x, 4); % 求f(x), x->4
  46. limit(f, 4); % 默认变量->4
  47. limit(f); % 默认变量->0
  48. limit(f, x, 4, 'right'); % 求f(x), x->4+, 'left' x->4-
  49. %*基本级数运算
  50. %求和
  51. symsum(s, x, 3, 5); % 计算表达式s变量x从3到5的级数和,或symsum(s, x, [a b])或symsum(s, x, [a;b])
  52. symsum(s, 3, 5); % 计算s默认变量从3到5的级数和
  53. symsum(s); % 计算s默认变量从0到n-1的级数和
  54. %一维泰勒展开
  55. taylor(f, x, 4); % f在x=4处展开为五阶泰勒级数
  56. taylor(f, x); % f在x=0处展开为五阶泰勒级数
  57. taylor(f); % f在默认变量=0处展开为五阶泰勒级数
  58. %符号微分
  59. %单变量求导(单变量偏导)
  60. n = 1; % 常量n
  61. fn = diff(f, x, n); % f对x的n阶导
  62. f1 = diff(f, x); % f对x的1阶导
  63. diff(f, n); % f对默认变量的n阶导
  64. diff(f); % 默认变量1阶导
  65. %多元偏导
  66. fxy = diff(f, x, y); % 先求x偏导,再求y偏导
  67. fxyz = diff(f, x, y, z); % 先求x偏导,再求y偏导,再求z偏导
  68. %符号积分
  69. %积分命令
  70. int(f, x, 1, 2); % 函数f变量x在1~2区间定积分
  71. int(f, 1, 2); % 函数f默认变量在ab区间定积分
  72. int(f, x); % 函数f变量x不定积分
  73. int(f); % 函数f默认变量不定积分
  74. % 傅里叶,拉普拉斯,Z变换
  75. %%
  76. %*符号方程求解
  77. %符号代数方程
  78. %一元方程
  79. eqn1 = a*x==b;
  80. S = solve(eqn1); % 返回eqn符号解
  81. %多元方程组
  82. eqn21 = x-y==a;
  83. eqn22 = 2*x+y==b;
  84. [Sx, Sy] = solve(eqn21, eqn22, x, y); % [Svar1,...SvarN]=solve(eqn1,...eqnM, var1,...varN),MN不一定相等
  85. [Sxn, Syn] = solve(eqn21, eqn22, x, y, 'ReturnCondition', true); % 加上参数ReturnCondition可返回通解及解的条件
  86. % 其他参数(参数加上true生效)
  87. % IgnoreProperty,忽略变量定义时一些假设
  88. % IgnoreAnalyticConstraints,忽略分析限制;
  89. % MaxDegree,大于3解显性解;
  90. % PrincipleValue,仅主值
  91. % Real,仅实数解
  92. %非线性fsolve
  93. X = fsolve(fun, X0, optimset(option)); % fun函数.m文件名;X0求根初值;option选项如('Display','off')不显示中间结果等