matlab常用代码程序

矩阵取一部分

MATLAB对矩阵的操作十分灵活,下面对最近遇到的进行总结:

说明 ':'代表取全部,‘,’代表分界符,‘,’前面代表行,后面代表列。如果‘,’前面为‘:’则行取全部,如果‘,’后面为':',则列取全部。

格式A(m,n),用于提取矩阵A中符合m,n要求的部分
提取某个元素,则m,n为数字标量,如A(2,3)为第二行第三列的元素。

简单的

1.提取大矩阵的一列、一行元素:
一列元素:  A(:,j)表示提取A矩阵的第j列全部元素
一行元素:  A(i,:)表示提取A矩阵的第i行元素,
于是我们有,A(i, j)表示提取A矩阵的第i行第j列的元素。

2.提取多行多列元素
多行元素:  A(i:i+m,:)表示提取A的第i行到第i+m行的元素。
多列元素:  A(:,j:j+n)表示提取A的第j列到第j+n列的元素。
提取块:     A(i:i+m, j:j+n)表示的是mxn的一个子块的元素。

1、提取某行某列

  A(:,n)提取第n列的所有元素,如A(:,3)提取第三列的所有元素;

  A(m,:)提取第m行的所有元素,如A(3,:)提取第三行的所有元素;

2、提取任意的某部分并重新组成新的矩阵,连续或不连续,单调或不单调

 数字指定:A([1 2 3 4],[2 3]) 返回1 2 3 4行2 3 列的数据;

 步长指定:A(1:2:end,:) A(2:2:end,:)分别提取矩阵A的奇数行和偶数行数据;

                 A(end:-1:1,:) A(:,end:-1:1)分别返回A矩阵行倒序和列倒序的矩阵

 变量指定:A(B(:,1),:),其中B的第一列含有数据,用来指定取矩阵A的哪些行。

矩阵乘法 除法 点乘 点除

*.*的联系和区别。

1,在进行数值运行和数值乘矩阵,这两种没有区别,例如:a*b=a.*b; a*B=a.*B; B*a=B.*a(其中小写字母表示数值,大写字母表示矩阵,下同)。
  2,在处理矩阵乘矩阵时,*表示普通的矩阵乘法,要求前面矩阵的列数等于后面矩阵的行数;.*表示两个矩阵对应元素相乘,要求两个矩阵行数列数都相等。例如:

>> [1,2,3]*[1,2;3,4;5,6]       % 矩阵乘法
>> ans =
>>     22    28

>> [1,2,3].*[4,5,6]            % 矩阵点乘
>> ans =
>>      4    10    18
/./的联系和区别。

1,数值运行时,这两种没有区别,例如:a/b=a./b
  2,数值与矩阵运行时,要分数值在前还是在后。
    (1),数值在前,只能用./
    (2),数值在后,这两种一样:A/b=A./b
  3,矩阵除矩阵,A/B可粗略地看作A*inv(B)(强烈不建议进行求逆运算);A./B表示A矩阵与B矩阵对应元素相除,所以要求A,B行数列数相等。例如:

>> [4,5]/[1,2;3,4]                    % 矩阵除法
>> ans =
>>    -0.5000    1.5000

>> [4,5,6]./[1,2,3]                   % 矩阵点除
>> ans =
>>     4.0000    2.5000    2.0000

矩阵的平方

t^2是矩阵平方,即t×tt.^2是矩阵中每个元素的平方。PS: 若t不是方阵,则t^2会出错

plot画图

plot函数的基本调用格式为:

  1. plot(y)
    y为一向量时,以y元素的值为纵坐标,y的元素序号为横坐标值,用直线依次连接数据点,绘制曲线。当y为一实矩阵时,则以其序号为横坐标,按列绘制每列元素值相对于其序号的曲线, 当y为m×n矩阵时,就由n条曲线。

  2. plot(x,y)
    yx为同维向量,则以x为横坐标,y为纵坐标绘制连线图。若x是向量,y是行数或列数与x长度相等的矩阵,则绘制多条不同色彩的连线图,x被作为这些曲线的共同横坐标。若xy为同型矩阵,则以x,y对应元素分别绘制曲线,曲线条数等于矩阵列数。

  3. plot(x1,y1,x2,y2,……)
    在此格式中,每对x,y必须符合plot(x,y)中的要求,不同对之间没有影响,命令将对每一对x,y绘制曲线。
    以上三种格式中的x,y都可以是表达式。plot是绘制一维曲线的基本函数,但在使用此函数之前,须先定义曲线上每一点的x以及y坐标。

例2 生成的图形是上30个点连成的光滑的正弦曲线。

x=linspace(0,2*pi,30); % 生成一组线性等距的数值 其中x1、x2、N分别为起始值、终止值、元素个数。若默认N,默认点数为100。
y=sin(x);
plot(x,y)

注释:

linspace(x1,x2,N)
功能:linspace是Matlab中的均分计算指令,用于产生x1,x2之间的N点行线性的矢量。其中x1、x2、N分别为起始值、终止值、元素个数。若默认N,默认点数为100。

运行结果:

在这里插入图片描述

在这里插入图片描述

MATLAB中提供的线型属性

在这里插入图片描述

    需要说明的是,LineSpec中设置曲线线型、标识符和颜色三项属性时,控制符的顺序不受限制并可以省略或者部分省略。也就是说'r-.*'、'-.r*'、'*-.r'等形式是等效的,都表示使用红色点划线连接各个节点,各节点使用“*”标识。
subplot函数

subplot是将多个图画到一个平面上的工具。Subplot(m, n, p)其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。

plot3
t=[0:0.2:10*pi];
x=2*t;
y=sin(t);
z=cos(t);
plot3(x,y,z,'bo');
hold on
plot3(x,y,z,'r-','LineWidth',2);
常用画图三联
% 三维坐标
figure;
plot3(measure_Z(1,1:length(t_1)),measure_Z(2,1:length(t_1)),measure_Z(3,1:length(t_1)),'r-','LineWidth',1);
hold on;
plot3(measure_Z(1,length(t_1):end),measure_Z(2,length(t_1):end),measure_Z(3,length(t_1):end),'r-','LineWidth',1);
hold on;
plot3(ENU_X,ENU_Y,ENU_Z,'g-','LineWidth',1);
hold on;
plot3(noise_ENU_X,noise_ENU_Y,noise_ENU_Z,'b-','LineWidth',1);
xlabel('x运动距离 m');
ylabel('y运动距离 m');
zlabel('z运动距离 m');
title('东北天坐标系')
legend('origin CV','origin CA','estimate','noise')


% 三个轴的每一个坐标
figure;
plot(measure_Z(1,:),'r-','LineWidth',1);
hold on;
plot(noise_ENU_X,'b-','LineWidth',1);
hold on;
plot(ENU_X,'g','LineWidth',1);
grid;
set(gca,'xtick',[0:50:length(D)],'xticklabel',[0:50:length(D)]*T);
xlabel('时间/s');
ylabel('运动距离 m');
title('X轴东北天坐标系')
legend('origin ',' noise ','estimate')

figure;
plot(measure_Z(2,:),'r-','LineWidth',1);
hold on;
plot(noise_ENU_Y,'b-','LineWidth',1);
hold on;
plot(ENU_Y,'g','LineWidth',1);
grid;
set(gca,'xtick',[0:50:length(D)],'xticklabel',[0:50:length(D)]*T);
xlabel('时间/s');
ylabel('运动距离 m');
title('Y轴东北天坐标系')
legend('origin ',' noise ','estimate')


figure;
plot(measure_Z(3,:),'r-','LineWidth',1);
hold on;
plot(noise_ENU_Z,'b-','LineWidth',1);
hold on;
plot(ENU_Z,'g','LineWidth',1);
grid;
set(gca,'xtick',[0:50:length(D)],'xticklabel',[0:50:length(D)]*T);
xlabel('时间/s');
ylabel('运动距离 m');
title('Z轴东北天坐标系')
legend('origin ',' noise ','estimate')
--------------------------------------------
 figure;
 subplot(3,1,1)
 plot(estimate_error_X,'g-','LineWidth',1);
 hold on;
 plot(noise_error_X,'b-','LineWidth',1);
 set(gca,'xtick',[0:50:length(D)],'xticklabel',[0:50:length(D)]*T); %xtick就是你要版在哪些地方显示刻度,权xticklabel就是显示什么
 legend('estimate error','noise error');
 xlabel('时间/s');
 ylabel('距离 m');
 title('瞄准线坐标系X轴位置误差')
 grid;
 subplot(3,1,2)
 plot(estimate_error_Y,'g-','LineWidth',2);
 hold on;
 plot(noise_error_Y,'b-','LineWidth',1);
 set(gca,'xtick',[0:50:length(D)],'xticklabel',[0:50:length(D)]*T);
 legend('estimate error','noise error');
 xlabel('时间/s');
 ylabel('距离 m');
 title('瞄准线坐标系Y轴位置误差')
 grid;
 subplot(3,1,3)
 plot(estimate_error_Z,'g-','LineWidth',1);
 hold on;
 plot(noise_error_Z,'b-','LineWidth',1);
 set(gca,'xtick',[0:50:length(D)],'xticklabel',[0:50:length(D)]*T);
 legend('estimate error','noise error');
 xlabel('时间/s');
 ylabel('距离 m');
 title('瞄准线坐标系Z轴位置误差')
 grid;

求解二元二次方程

D=10000;%初始距离
theta=pi/6;%角度30°

%求出初始位置 x_0 ,y_0
syms x y;
eq1=x^2+y^2==D*D;%观测距离方程
eq2=tan(theta)*x+route_shortcut/cos(theta)==y;%直线方程
[X,Y]=solve(eq1,eq2,x,y);%会得出来两个值,我们取大于0的
x_0=double(X(1))
y_0=double(Y(1))

添加噪声

  1. rand生成均匀分布的伪随机数。分布在(0~1)之间
    rand(m,n)生成m行n列的均匀分布的伪随机数
  2. randn生成标准正态分布的伪随机数(均值为0,方差为1)
y=2+3*randn(2,2)%产生一个均值为2,标准差为3的正态分布,方差为9
---------------------------
t=0:0.001:1;
y1=(pi/2)*cos(2*pi*t)+(pi/64)*cos(pi*t/8+pi/3);

temp=y1+0.02*rand(size(y1));

plot(t,y1,t,temp,'r')

矩阵的平方和元素的平方

设t = [2 4;  
   	4 2]
>> t.^2  %t.^2是矩阵中每个元素的平方
   ans = 
   4 16
   4 16
而
>> t^2   %t^2是矩阵平方
  ans =
   12 24
   12 24 
   

可见t^2 是矩阵平方,t.^2是矩阵中每个元素的平方。
   PS: 若t不是方阵,则t^2会出错

矩阵行列计数

(1)size,获取数组的行数和列数
(2)length,数组长度,即行数和列数中的较大值,相当于max(size(a))
(3)numel,返回元素总数

函数求导

求导

参考 这篇文章 MATLAB 函数求导 用法以及实例

diff(函数) , 求的一阶导数;
diff(函数, n) , 求的n阶导数(n是具体整数);
diff(函数,变量名), 求对的偏导数;
diff(函数, 变量名,n) ,求对的n阶偏导数;
带入数值 计算函数

参考这篇文章 Matlab subs函数的用法

R = subs(S, new) 利用new的值代替符号表达式S中的默认符号;
R = subs(S) 用由调用函数或Matlab工作空间中获取的值替代了在符号表达式S中的所有当前的变量;
R = subs(S, old, new) 利用new的值代替符号表达式中old的值。old为符号变量或是字符串变量名。
实例
%D求导 diff_D
syms t;
f(t)=sqrt((x_0-v_0*cos(theta)*t)^2+(y_0-v_0*sin(theta)*t)^2 +z_0^2 );%D的表达式
diff_f=diff(f(t));%D的倒数表达式
% pretty(diff_f)%将当前变量显示为我们常用的书面形式
diff_d_1=subs(diff_f,t,[0:T:15]);%计算出每个时刻的倒数具体值,类型为sym
diff_D_1=double(diff_d_1);%转换类型sym为double

if语句

if后面并不需要":"直接和对应的end符号即可,这一点和python的不同。pythonif后面加一个":",然后if下面缩进,没有与之对应的end

if expression
    statements
end

-----------------------------------
if expression1
    statements1
elseif expression2
    statements2
else
    statements3
end
-----------------------------
x = input('请输入 x=');
if x ~= 0
    y = sin(x)/x;
else
    y = 1;
end
y

预算符关系

<    小于
<=  小于或等于
>        大于
>=      大于或等于
==      等于
~=      不等于

for语句

for后面也不需要":"直接和对应的end符号即可

for index = values
   <program statements>
            ...
end

-----------------------------------
for a = 10:20 
   fprintf('value of a: %d\n', a);
end

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
value of a: 20/

-----------------------------------
for a = 1.0: -0.1: 0.0
   disp(a)
end

 1
 0.90000
 0.80000
 0.70000
 0.60000
 0.50000
 0.40000
 0.30000
 0.20000
 0.10000
 0
 -----------------------------------
for a = [24,18,17,23,28]
   disp(a)
end

24
18
17
23
28

注意细节

atan和atan2的区别

举个例子,a = 1, b = -1,则atan(a/b) = atan(-1) = -pi/4, 而 atan2(a,b) = 3*pi/4

atan2(a,b)是4象限反正切,它的取值不仅取决于正切值a/b,还取决于点 (b, a) 落入哪个象限
  当点(b, a) 落入第一象限时,atan2(a,b)的范围是  0 ~ pi/2;
 当点(b, a) 落入第二象限时,atan2(a,b)的范围是  pi/2 ~ pi;
  当点(b, a) 落入第三象限时,atan2(a,b)的范围是  -pi/2~0;
 当点(b, a) 落入第四象限时,atan2(a,b)的范围是 -pi~-pi/2


而 atan(a/b) 仅仅根据正切值为a/b求出对应的角度 (可以看作仅仅是2象限反正切)
   当 a/b > 0 时,atan(a/b)取值范围是 0 ~ pi/2;
   当 a/b < 0 时,atan(a/b)取值范围是 -pi/2~0

第1章 BP神经网络的数据分类——语音特征信号分类 第2章 BP神经网络的非线性系统建模——非线性函数拟合 第3章 遗传算法优化BP神经网络——非线性函数拟合 第4章 神经网络遗传算法函数极值寻优——非线性函数极值寻优 第5章 基于BP_Adaboost的强分类器设计——公司财务预警建模 第6章 PID神经元网络解耦控制算法——多变量系统控制 第7章 RBF网络的回归--非线性函数回归的实现 第8章 GRNN网络的预测----基于广义回归神经网络的货运量预测 第9章 离散Hopfield神经网络的联想记忆——数字识别 第10章 离散Hopfield神经网络的分类——高校科研能力评价 第11章 连续Hopfield神经网络的优化——旅行商问题优化计算 第12章 初始SVM分类与回归 第13章 LIBSVM参数实例详解 第14章 基于SVM的数据分类预测——意大利葡萄酒种类识别 第15章 SVM的参数优化——如何更好的提升分类器的性能 第16章 基于SVM的回归预测分析——上证指数开盘指数预测. 第17章 基于SVM的信息粒化时序回归预测——上证指数开盘指数变化趋势和变化空间预测 第18章 基于SVM的图像分割-真彩色图像分割 第19章 基于SVM的手写字体识别 第20章 LIBSVM-FarutoUltimate工具箱及GUI版本介绍与使用 第21章 自组织竞争网络在模式分类中的应用—患者癌症发病预测 第22章 SOM神经网络的数据分类--柴油机故障诊断 第23章 Elman神经网络的数据预测----电力负荷预测模型研究 第24章 概率神经网络的分类预测--基于PNN的变压器故障诊断 第25章 基于MIV的神经网络变量筛选----基于BP神经网络的变量筛选 第26章 LVQ神经网络的分类——乳腺肿瘤诊断 第27章 LVQ神经网络的预测——人脸朝向识别 第28章 决策树分类器的应用研究——乳腺癌诊断 第29章 极限学习机在回归拟合及分类问题中的应用研究——对比实验 第30章 基于随机森林思想的组合分类器设计——乳腺癌诊断 第31章 思维进化算法优化BP神经网络——非线性函数拟合 第32章 小波神经网络的时间序列预测——短时交通流量预测 第33章 模糊神经网络的预测算法——嘉陵江水质评价 第34章 广义神经网络的聚类算法——网络入侵聚类 第35章 粒子群优化算法的寻优算法——非线性函数极值寻优 第36章 遗传算法优化计算——建模自变量降维 第37章 基于灰色神经网络的预测算法研究——订单需求预测 第38章 基于Kohonen网络的聚类算法——网络入侵聚类 第39章 神经网络GUI的实现——基于GUI的神经网络拟合、模式识别、聚类 第40章 动态神经网络时间序列预测研究——基于MATLAB的NARX实现 第41章 定制神经网络的实现——神经网络的个性化建模与仿真 第42章 并行运算与神经网络——基于CPU/GPU的并行神经网络运算 第43章 神经网络高效编程技巧——基于MATLAB R2012b新版本特性的探讨 第44章 层次分析法 第45章 灰色关联度 第46章 熵权法 第47章 主成分分析 第48章 主成分回归 第49章 偏最小二乘 第50章 逐步回归分析 第51章 模拟退火 第52章 RBF,GRNN,PNN-神经网络 第53章 竞争神经网络与SOM神经网络 第54章 蚁群算法tsp求解 第55章 灰色预测GM1-1 第56章 模糊综合评价 第57章 曲线拟合 目前没空,后面继续整理,还有很多类似的代码,欢迎下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值