Matlab编程解决常见问题

1. 求一般函数的微分/导数:diff

2. 解(高阶)常微分方程

3. 解(高阶)偏微分方程

4. 求解非线性方程组

  • 使用fsolve函数:百度百科、例题见2016年国赛A题论文:A140

5. 求解多目标优化

  • 思想:多目标优化–>单目标优化
    • 线性加权法:例题见2016年国赛A题论文 A140
    • 熵权法:例题见2016年国赛A题论文 A28
    • **首要次要分析法:**以首要目标进行优化得到一组优化解,再将这组优化解看成约束条件,再进行次要目标的优化求解。例题见:2015年国赛A题(与多目标优化相关的论文)。

6. 匿名函数的使用

  • f=@(x)acos(x) 
    表示 f 为函数句柄,@是定义句柄的运算符。f=@(x)acos(x) 相当于建立了一个函数文件:
    % f.m
    function  y=f(x)
    y=acos(x);
    
       @是匿名函数的意思
       函数句柄的使用方法也和函数是一样的。
    
  • 1.匿名函数的基本用法。
      handle = @(arglist)anonymous_function
      其中handle为调用匿名函数时使用的名字。arglist为匿名函数的输入参数,可以是一个,也可以是多个,用逗号分隔。anonymous_function为匿名函数的表达式。举个例子如下:
      >> f=@(x,y)x^2+y^2; 
      >> f(1,2) 
      ans =  5
      
      例2:
      clc;
      clear;
      X = [-10:0.01:10];
      f = @(x) x.^2;
      plot(X,f(X));
    

7. 随机数、随机变量、随机分布

  • rand(m,n)函数产生由在[0,1]之间均匀分布的随机数组成的m行n列的矩阵(或称为数组)。
    
    rand(m) % 若只给一个输入,则会生成一个方阵
    
    a + rand(m,n)*(b-a) 可以输出在[a,b]之间均匀分布的随机数组成的m行n列的矩阵。
    
    a + rand(m,n)*(b-a)等价于unifrnd(a,b,m,n)
    
    randi([a,b],m,n)函数可在指定区间[a,b]内随机取出大小为m*n的整数矩阵
    
    randi([1,5])   %在区间[1,5]内随机取出1个整数
    
    num2str函数:将数值转换为字符串:num2str(123);
    
    normrnd(MU,SIGMA) :生成一个服从正态分布(MU参数代表均值,SIGMA参数代表标准差,方差开根号是标准差)的随机数
    
    normrnd(10,2)  % 均值为10 标准差为2(方差为4)的正态分布随机数
    
    exprnd(M)表示生成一个均值为M的指数分布随机数(其对应的参数为1/M)
     
    exprnd(5)  % 均值为5的指数分布随机数(对应的参数为0.2)
    
    mean函数是用来求解均值的函数
    
    mean([1,2,3])
    
    unique函数: 剔除一个矩阵或者向量的重复值,并将结果按照从小到大的顺序排列  
    unique([1 2 5; 6 8 9;2 4 6])   
    unique([5 6 8 8 4 1 6 2 2 4 8 4 5 6])
    
    randperm(5)  % 生成1-5组成的一个随机序列(类似于洗牌的操作)
    

8. 拟合

  • https://blog.csdn.net/cliukai/article/details/90723113
  • https://www.cnblogs.com/youngsea/archive/2017/09/10/7501786.html

9. 积分

10. 向量

  • Matlab——向量及其运算

  • 矩阵的应用

  • clc;
    load('joints.mat');
    join = joints;
    join_xy = joints(1:2,:,1:1)' % 矩阵转置
    
    num_all= size(join_xy) % 返回矩阵多少行,多少了列
    num_hang = size(join_xy,1) % 返回矩阵多少行
    num_lie = size(join_xy,2) % 返回矩阵多少列
    % 画出join里面的2列的函数
    x = [1:num_hang]; 
    plot(x,join_xy(:,1),x,join_xy(:,2))
    
  • 向量长度

  • A = [1:2:20];
    A_ = A';
    length_A = length(A) % 返回向量的个数
    

11. Excel文件使用

  • 写入:

  • angle = [-180 -165 -150 -135 -120 -105 -90 -75 -60 -45 -30 -15 0 15 30 45 60 75 90 105 120 135 150 165 180];
    
    CFX = [0.043011 0.055914 0.11613 0.24086 0.42581 0.62366 0.75699 0.7914 0.64946 0.4172 0.20215 0.08172 0.060215 0.13763 0.33978 0.61935 0.84301 0.96344 0.94194 0.84301 0.65806 0.44731 0.19355 0.055914 0.043011];
    
    CFY = [0.14383 0.083721 0.015027 -0.092308 -0.13524 -0.096601 0.01932 0.18247 0.25975 0.20823 0.045081 -0.10089 -0.19964 -0.74919 -0.80072 -0.71055 -0.5517 -0.28122 -0.015027 0.22111 0.38426 0.46583 0.44866 0.3585 0.14812];
    
    CMZ = [0.030108 0.056344 0.07957 0.083441 0.073118 0.054624 0.027527 -0.018495 -0.068387 -0.10495 -0.11183 -0.083871 -0.045161 0.037849 0.076989 0.04172 0.025376 0.0086022 0 -0.008172 -0.014624 -0.020645 -0.055484 -0.027097 0.030108];
    
    
    data = [angle', CFX', CFY', CMZ'];   % 将数据组集到dat
    result = [{'属性1','属性2','属性3','属性4'}; num2cell(data)];
    xlswrite('Excel测试写入', result);
    
    
  • 读取:

  • A = xlsread('Excel路径+Excel的名称','工作表名称')
    例子:
    
    A = xlsread('创新班.xlsx','Sheet2')
    
    A = xlsread('创新班.xlsx','Sheet2','a1:c1') %读取a1 b1 c1的数据
    
    不写工作表名称,默认是第一个。
    

12. 绘图

  • 参考来讲:

  • 实例:

    • 简单三维图像

    • [x,y] = meshgrid(-2:0.1:2); 
      z = y.*exp(-x.^2-y.^2);
      mesh(x,y,z);
      xlabel('x');
      ylabel('y');
      zlabel('z');
      %% 现在我们绘制表面带有渐变颜色的图象。这可以通过 surf 或 surfc 命令做到。
      % 只需简单 的更改上面例子中的命令为:
      % [x,y] = meshgrid(-2:0.1:2); 
      % z = y.*exp(-x.^2-y.^2);
      % surf(x,y,z);
      % xlabel('x');
      % ylabel('y');
      % zlabel('z') 
      
      
    • 子图

      扫描二维码关注公众号,回复: 13467166 查看本文章
    • x = [0:0.01:5];
      y = exp(-1.2*x).*sin(20*x); 
      subplot(1,2,1)  %显示在第一个窗格块中
      plot(x,y),xlabel('x'),ylabel('exp(-1.2x)*sin(20x)'),axis([0 5 -1 1]) 
       y = exp(-2*x).*sin(20*x); 
       subplot(1,2,2)   %显示在第二个窗格块中
       plot(x,y),xlabel('x'),ylabel('exp(–2x)*sin(20x)'),axis([0 5 -1 1]) 
      
      
    • 完整可参考

    • %% 编写函数
      x = 0:pi/100:2*pi;
      y1 =@(x)sin(x);
      y2 =@(x)sin(x-0.25);
      y3 =@(x)sin(x-0.5);
      
      %% 新建图画,若figure(1)即指定图画句柄1
      figure;
      % 设置布画大小,合适的大小可防止粘贴到word文档时图片模糊
      % set(gcf,'unit','centimeters','position',[10 5 14 7]);
      % 设置布画背景色
      set(gcf,'Color',[0.9 0.9 0.9]);
      % hold on画出多条曲线,曲线参数不用更改
      plot(x,y1(x),'-','Color',[251 178 23]/255);
      hold on;
      plot(x,y2(x),'r--','Color',[219 89 32]/255);
      hold on;
      plot(x,y3(x),'b:','Color',[0 90 171]/255);
      
      %% 配置属性
      
      % 批量设置曲线粗细
      set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',2);
      
      grid on; % 显示网格
      
      % 设置坐标轴标注,设置坐标轴字体
      figure_FontSize=8;
      % 设置坐标轴范围
      axis([0, 2*pi, -1.2 1.2])
      
      % 设置x,y轴的字体为最佳
      xlabel('Time (s)','linewidth', 1.1, 'fontsize', 16, 'fontname', 'times'); 
      ylabel('Displacement (m)','linewidth', 1.1, 'fontsize', 16, 'fontname', 'times');
      % 设置标题
      title('sin函数示例图','linewidth', 1.1, 'fontsize', 16);
      % 曲线标注
      legend('\itu_{max}','\itu','你好');
      
      % 点标注
      text(pi,y1(pi),'(x1,y1)');
      text(0.5*pi,y3(0.5*pi),'(x3,y3)');
      
      
      % 设置xy轴在图片中占的比例,可能需要自己微调。
      % set(gca,'Position',[.13 .17 .80 .74]);
      

13. 多重搜索(变步长)的常规写作

14. 常见优化的构建方法

  • 直接法:依照题意,写min或者max这样的优化目标。
  • 误差法:一般在已经求得结果(或者题目已经给出一组结果)时,此时的解设为 α 。通过模型(即将)求解出来的解设为 β 。通过:min = |α - β|或者采用误差平方的方式来构建。此时,一般再画出一条误差曲线(应该是一个值很小的曲线),以及画出 α 和 β 的曲线,然后进一步说明模型效果好。

15. 插值

% 三次样条插值和分段三次埃尔米特插值的对比
x = -pi:pi; 
y = sin(x); 
new_x = -pi:0.1:pi;
p1 = pchip(x,y,new_x);   %分段三次埃尔米特插值
p2 = spline(x,y,new_x);  %三次样条插值
figure(2);
plot(x,y,'o',new_x,p1,'r-',new_x,p2,'b-')
legend('样本点','三次埃尔米特插值','三次样条插值','Location','SouthEast')   %标注显示在东南方向
% 说明:
% LEGEND(string1,string2,string3, …)
% 分别将字符串1、字符串2、字符串3……标注到图中,每个字符串对应的图标为画图时的图标。
% ‘Location’用来指定标注显示的位置

猜你喜欢

转载自blog.csdn.net/weixin_43742062/article/details/109552362
今日推荐