文章目录
1. 求一般函数的微分/导数:diff
2. 解(高阶)常微分方程
- 使用欧拉法进行求解数值解
- 解析解:dsolve、数值解:ode
- 高阶常微分方程(组)
- 一阶常微分方程(组)
3. 解(高阶)偏微分方程
- 转成有限差分格式–> 转成递推方程 -->使用直接递推法求解(效率可能会低一点)。
- 使用pdepe函数进行求解
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. 向量
-
矩阵的应用:
-
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')
-
子图
-
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’用来指定标注显示的位置