飞道的博客

matlab学习

324人阅读  评论(0)

注释用%

clear all清除工作区的所有变量
clc清除命令行窗口中的所有命令

%%清除右侧工作区
% clear
s = 'a'
abs(s) %表示ascll

%%矩阵
A = [1 2 3; 4 5 6; 7,8,9]
B = A'%转置
C = A(:)%一列一列的拉
D = inv(A)%求逆 必须是行列相同的

E = zeros(10,5,3)%十行5列3维
E(:,:,1) = rand(10,5) %rand随机生成0-1之间的数值 rand(m,n)生成m行n列的均匀分布的伪随机数
E(:,:,2) = randi(5,10,5) %最大值是5 十行5列
E(:,:,3) = randn(10,5) %生态分布,有正有负

rand随机生成0-1之间的数值

  • rand(m,n)生成m行n列的均匀分布的伪随机数
  • rand(m, n, double)生成指定精度的均匀分布的伪随机数,参数还可以是single
  • rand(randstream, m, n)利用指定的randstream(随机种子)生成伪随机数
    randn生成标准正态分布的伪随机数(均值为0,方差为1)
    主要语法和上面一样

randi生成均匀分布的伪随机整数(均值为0,方差为1)

  • randi(imax)在开区间(0,imax)生成均匀分布的伪随机整数
  • randi(imax, m, n) 在开区间(0,imax)生成mXn型随机矩阵
  • r = randi([imin, imax], m, n)在开区间(imin, imax)生成 mXn型随机矩阵

元胞数组

元胞数组(Cell Array)将类型不同的相关数据集成到一个单一的变量中,使得大量相关数据的引用和处理变得简单方便。cell元胞数组,存储不同类型的数据。
概念理解上,可以认为它和c语言里面的结构体、c++里面的对象很类似。元胞数组是matlab中的特色数据类型,它不同于其他数据类型(如字符型、字符数组或者字符串)。它有给人一种查询信息的感觉,可以逐渐追踪一直到所有的变量全部翻译成基本的数据信息。它的class函数输出就是cell

%%元胞数组
A = cell(1,6) %一行六列

A{
   2} = eye(3)%matlab的索引是从1开始,不是从0开始的  eye(3)是指3x3的单位矩阵,赋值给A的第二个元素


magic

字面意思是模仿,在matlab中生成n阶幻方。比如三阶幻方就是1-9九个数字,组成一个3*3矩阵,使得该矩阵无论横竖还是斜三个方向上的三个数和和总是相同的。

magic(5) %1-25,然后横竖斜三个方向之和都相等

结构体

相当于python的字典

books = struct('name',{
   {
   'machine learning', 'data mining'}},'price',[30 40])
books.name %属性 cell {
   'machine learning'}    {
   'data mining'}
books.name(1)%cell  {
   'machine learning'}
books.name{
   1}%字符串  'machine learning'




矩阵构造和四则运算

1.矩阵的定义和构造

%%矩阵的定义和构造
A = [1 2 3 5 8 5 4 6]
%B = 1:2:9 %1为起点,9为终点,2是步长 步长不可缺省
B = 1:3:9 
C = repmat(B, 3, 1)%把B这个东西横着重复1次,竖着重复3次
D = ones(2, 4)%生成两行四列,元素全为1






2.矩阵的四则运算

%%矩阵的四则运算
A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]
C = A + B %对应元素相应相加
D = A - B %对应元素对应相减
E = A * B' %A 乘以 B的转置, A的行数和B的列数要相同才能相乘
F = A .* B %对应项相乘
G = A / B %相当于A * B的逆 A * inv(B)
          %G * B = A,   G * B * pinv(B) = A * pinv(B), G = A * pinv(B)  
H = A ./B %对应项相除







3.矩阵的下标

%%矩阵的下标
A = magic(5)
B = A(2, 3)%第二行第三列
C = A(3,:)%第三行
D = (:,4)%4列 但是这边一直报错
[m, n] = find(A > 20) %找大于20的序号值,矩阵, 寻找大于20的元素的下标m行n列


matlab程序结构

1.for循环

for 循环变量 = 初值 :步长:终值
执行语句1
.
.
.
end

%%程序控制
%1^2 + 2^2 + ...... + 5^2
sum = 0;
for n = 1:5  %步长可以省略,省略为1
    sum = sum + n^2;
end


%使用for循环求1+2+3+4+5!
sum = 0
for i = 1:5
    mul = 1;
    for j = 1:i
        mul = mul * j;
    end
    sum = sum + mul;
end



2.while循环

while 循环条件(成立时执行语句体)
执行语句1
.
.
.
end

%1+2+3+...+10的和
sum = 0;
n = 1;
while n <=10  %不用冒号也不用括号
    sum = sum + n;
    n = n + 1;
end


3.分支结构

if 表达式(成立时执行语句体)
语句体1;
else
语句体2;
.
.
.
end

switch 表达式(数值或字符串)
case 数值或字符串1
语句体1;
case 数值或字符串2
语句体2;
otherwise
语句体n;
.
.
.
end

每个分支都必须用end结束

matlab基本绘图操作

1.二维平面绘图

%%二维平面绘图
x = 0:0.01:2*pi;%0开始,每次增加0.01,2pi结束
y = sin(x);
figure  %建立一个幕布
plot(x, y) %绘制当前平面的二维图
title('y = sin(x)')
xlabel('x')
ylabel('sin(x)')
xlim([0 2*pi]) %提取的x坐标的值是0-2pi

2.选项参数

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot') %plotyy是共用一个x坐标,同时绘制不同的y

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot') %plotyy是共用一个x坐标,同时绘制不同的y
set(get(AX(1),'ylabel'),'string','slow decay')%y1坐标的标注
set(get(AX(2),'ylabel'),'string','fast decay')%y2坐标的标注
xlabel('time (\musec)') %x坐标的标注
title('multiple decay rates') %title
set(H1,'linestyle','--') %改变y1的线的样式
set(H2,'linestyle',':')  %改变y2的线的样式

三维绘图

%三维立体绘图
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t)
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
grid on % 在图片当中添加网格线
axis square %将各个方向变成一个正方形

hold on 在同一张图片当中绘制一条线 ,用于添加新绘图的时候保留当前绘图

x = 1:5
y = 2 * x
figure
plot(x, y)
hold on %如果没有hold on则只能保留最后一个绘图
y2 = 3 * x + 1
plot(x, y2)

图片的导出

figure中的导出–文件设置

在这里的宽高调整之后再导出,或者应用之后复制图窗在word中粘贴,可以保证较好的分辨率

%%双峰函数
[x y z] = peaks(30);
mesh(x,y,z)
grid


转载:https://blog.csdn.net/Sophia2333333331/article/details/116139849
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场