matlab常用函数

matlab常用函数

函数解释
abs()绝对值,复数的模
sqrt()开方
exp()指数函数
log()对数,底为e
log10()对数,底为10
log2()对数,底为2
sum()求和
mean()均值
std()标准差
var(),(std())^2方差
cov()协方差
max()最大值
min()最小值
range()极差 max()-min()
median()中位数
mode()众数

矩阵的运算

矩阵表示
%   行矩阵(元素用空格或逗号分隔)
m1 = [1,2,3]
m2 = [1 2 3]

%   列矩阵(分号表示换行)
m3 = [1;2;3]
使用冒号运算符生成矩阵
% m = 初始值:步长:终值(步长默认为1)
1:10
% ans = 1 2 3 4 5 6 7 8 9 10
1:2:10
% ans = 1 3 5 7 9
% m = linspace(初始值,终值,点数)(点数默认为100)
linspace(1, 10, 10)
% ans = 1 2 3 4 5 6 7 8 9 10
拼凑和变形
% 矩阵的拼接
m2 = [1 2 3]
m3 = [4 5 6]
[m2, m3]    %行拼接
% ans = 1 2 3 4 5 6

[m2; m3]    %列拼接
% ans = 1 2 3
%       4 5 6
% 矩阵的变形
m6 = 1:10
% 将m6变成两行五列的矩阵
reshape(m6, [2,5])
% ans = 1 3 5 7 9
%       2 4 6 8 10

几个特殊的矩阵和随机矩阵

特殊矩阵
% 单位矩阵  eye(n) n为阶数
n = 3
eye(n)
% ans = 1 0 0
%       0 1 0
%       0 0 1
% 全0矩阵
zeros(2);
% ans = 0 0 
%       0 0

zeros(2,3)  %也可以用zeros([2,3])表示
% ans = 0 0 0
%       0 0 0
% 全1矩阵
ones(3)
ones([2,3]) % ones([m,n]) m为行数,n为列数
% 三维矩阵  应用:黑白图像(二维矩阵)、彩色图像(三维矩阵,RGB三个通道,每个通道都是一个二维矩阵)
ones([3,5,2])   % [行 列 页]
% ans = 
% ans(:,:,1) =  1 1 1 1 1
%               1 1 1 1 1
%               1 1 1 1 1
%
% ans(:,:,2) =  1 1 1 1 1
%               1 1 1 1 1
%               1 1 1 1 1
随机数矩阵
%   随机数矩阵
%   rand:0-1之间的数(返回的数服从均匀分布)
%   rand(n):n阶随机矩阵
%   rand([m,n]):m为行数,n为列数

rand    %生成随机数
rand(3)     %生成3X3的随机矩阵
rand([3,5])     %生成3X5的随机矩阵
%   随机整数矩阵
%   randi(max):[1,max]的整数
%   randi(max,n):n阶矩阵,元素范围[1, max]
%   randi(max, [m, n]):m*n矩阵,元素范围[1, max]
randi(10);
randi(10,3);
randi(10,[3,5])
%   randn用法同rand一样,只不过randn服从正态分布
randn
矩阵的运算
%   获取矩阵的行列数
m = rand([3,5])
size(m)
%   ans = 3 5
[row,col] = size(m)
%   row = 3   col = 5
%   矩阵的转置、逆矩阵
m = randi(10, 3)
m'  % 矩阵的转置
inv(m)  % 逆矩阵
%   矩阵的特征值和特征向量
m = randi(10,3)
eig(m)  % 矩阵的特征值
[V, D] = eig(m) % V:特征向量矩阵,D:特征值矩阵,对角元素为特征值
%   矩阵加减乘除、乘方运算
a = [1, 2; 3, 4]
b = a
a + b;
a - b;
a * b;
a.*b;   % 对应元素相乘
a / b;  % a*inv(b)
a./b;   % 对应元素相除
a \ b;  % 等价于inv(a)*b
a^5;    % a*a*a*a*a
a.^5;   %对应元素的五次方
广播机制
a = [1,2; 3,4]
b = 1

a+b % 把b广播成 [1,1; 1,1]
%   ans = 2 3
%         4 5
逻辑运算
a = [1,2; 3,4];
b = [2,1; 3,4];

a == b; % 对每个元素进行逻辑判断
%   ans = 0 0
%         1 1

a == 1; % 广播机制
%   ans = 1 0
%         0 0

% 保留a大于2的元素,将小于等于2的元素置为0
(a > 2).*a
矩阵的索引
m = [1,2,3; 4,5,6; 7,8,9]

m(1)    % ans = 1
m(8)    % ans = 6  列方向检索,第8个位置

m([1,3,5])  %列方向检索,第1,3,5个位置的元素
%   ans = 1 7 5

m(2,3)  % ans = 6  第2行第3列位置的元素
m([1,2], 3)     % 第1行和第2行的第3个元素
%   ans = 3 
%         6

m([1,2], [1,2]) % 第1、2行,第1、2列的元素
%   ans =   1   2
%           4   5

1:3 % 冒号运算符(初始值:步长:终值)(步长默认是1)
%   ans =   1   2   3
m(1:2, 1:3)     % 前两行元素
%   ans =   1   2   3
%           4   5   6

m(1:3, 2:3)     % 后两列元素
%   ans =   2   3
%           5   6
%           8   9

变量类型和转换

字符串和数值的转化
%  str2num():字符串转数值
str2num("5")    %   ans = 5
str2num("5") + 4    %   ans = 9

%  num2str():数值转字符串,第二个蚕食为有效数字的位数
num2str(1/3)    
%   ans = '0.33333'
num2str(1/3,2)   
%   ans = '0.33'
输入和输出语句
% 输入语句 input()  输入数值或矩阵
value = input("请输入一个值:")

% 输入字符串,需要加第二个参数's'
string = input("请输入一个字符串:", 's')
% 输出语句,disp输出多个字段时,需要将多个字段转化成字符串矩阵,再进行输出
disp()
disp(["hello",2])
%   "hello" "2"
disp(["1/3=",1/3])
%   "1/3="  "0.33333"
if…else 控制语句
if(1 < 2)
    disp("true")
end

% if 条件1
%   语句1
% elseif 条件2
%   语句2
% else
%   语句3
% end

for循环和while循环
% for循环
% for index = values
%   语句
% end

for i=[1,3,5]
    disp(i)
end

for i = 1:100
    disp(i)
end

% while循环
% while 表达式
%   语句
% end

n = 1
while n < 5
    disp(n)
    n = n + 1
end
break、continue、return
% continue  结束当前循环(continue后面的语句不再执行)
% break     退出整层循环(一层)
% return    退出多层循环
函数、匿名函数和脚本
%   函数
% function [输出参数] = myfun(输入参数)
%   函数体;
% end

s = area(2)
s = area([1, 2])

% 圆的周长
function s = area(r)
    s = pi * r.^2
end
% 匿名函数
% f = @(输入参数) 函数体
% f:函数句柄

f = @(x)x.^2
f(2)
f([2,3])

f1 = @(x,y)x.^2+y.^2+2*x.*y
f2 = @fun
f3 = @(x)fun(x)
f2(5)
f3(6)

function y = fun(x)
    y = x.^2
end
% 使用场景
% 函数体复杂时,使用函数
% 函数体简单时,使用匿名函数

matlab绘图与图形界面GUI

二维绘图命令 plot
% 绘制 y=sin(x)
x = linspace(0, 2*pi, 100);
y = sin(x);

plot(x, y);

% 一幅图形绘制多条曲线
% 方式一:hold
% hold on   开启图形保持功能,绘制多个图形对象
% hold off  关闭图形保持功能

x = linspace(0, 2*pi, 100);
y = sin(x);
y2 = cos(x);

plot(x, y);
hold on;
plot(x, y2);
hold off;

% 一幅图形绘制多条曲线
% 方式二:plot(x1, y1, x2, y2, ......)
plot(x, y, x, y2);

% 添加坐标轴标签(label)、标题(title)、图例(legend)
x = linspace(0, 2*pi, 100);
y = sin(x);
y2 = cos(x);
plot(x, y, x, y2);

xlabel('x');
ylabel('y = sin(x), y2 = cos(x)');
title('y = sin(x), y2 = cos(x)');
legend('y = sin(x)', 'y = cos(x)')

在这里插入图片描述

% 绘制多幅图 figure
% 在每次绘图前面加 figure函数

x = linspace(0, 2*pi, 100);
y = sin(x);
y2 = cos(x);

figure;
plot(x, y);
figure;
plot(x, y2);

% 绘制多个子图
% subplot(m, n, i):m行n列 第i个图形

x = linspace(0, 2*pi, 100);
y = sin(x);
y2 = cos(x);

subplot(1, 2, 1);
plot(x, y);
subplot(1, 2, 2);
plot(x, y2);

在这里插入图片描述

图形的美观
% 绘图修饰(线型、线宽、颜色、描点类型、网格、坐标轴刻度 ......)
% plot(x, y, '- r o')        线型、颜色(红色r)、描点类型(顺序可变)

x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y, '- r o')

% 具体可查matlab手册

在这里插入图片描述

plot(x,y,'- b p',...
    'LineWidth',2,...                           % 线宽
    'MarkerEdgeColor','b',...                   % 描点边框颜色
    'MarkerFaceColor',[0.5,0.5,0.5],...         % 描点内部填充颜色
    'MarkerSize',10)                            % 描点大小
% grid on   添加网格
% grid off  取消网格

% axis on   显示坐标轴、刻度线和坐标轴标签
% axis off  关闭坐标轴、刻度线和坐标轴标签

% axis([xmin, xmax, ymin, ymax])    设置x轴和y轴的显示范围
% axis equal    沿每个坐标轴使用相同的数据单位长度
% axis square   使用相同长度的坐标轴线。相应调整数据单位之间的增量
绘制 gif 动图

基本思想:先生成多张静态图,然后组合成gif图

for i = [500, 1000, 5000, 10000]
    x1 = linspace(0, 1, 10000);
    y1 = (1-x1.^2).^0.6;
    
    x2 = rand([1,i]);
    y2 = rand([1,i]);
    
    count = 0;
    for j=1:i
        if x2(j)^2 + y2(j)^2 <= 1
            count = count + 1;
        end
    end
    plot(x1, y1,"k .", x2, y2, ".");
    title([num2str(count) + "/" + num2str(i) + " * " + "4" + " = " + num2str(count/i*4)])
    axis square
    
    frame = getframe(gcf);  % 捕获坐标区或图窗作为影片帧
    I = frame2im(frame);    % 返回与影片帧关联的图像数据
    [I, map] = rgb2ind(I, 256); % 将RGB图像转换为索引图像I,关联颜色图为 map
    
    if i == 500
        imwrite(I, map, 'test.gif', 'gif', 'Loopcount', inf, 'DelayTime', 0.5);
    else
        imwrite(I, map, 'test.gif', 'gif', 'WriteMode', 'append', 'DelayTime', 0.5);
    end
end

test.gif

更多二维绘图命令

  • errorbar含误差条的线图
  • histogram直方图
  • scatter散点图
  • bar柱状图
  • pie饼图
% errorbar:含误差条的线图
% errorbar(x, y, err)   绘制 y 对 x 的图,并在每个数据点处绘制一个垂直误差条

x = linspace(0, 100, 10);
y = x.^0.5;
err = rand(size(x))

errorbar(x, y, err);

在这里插入图片描述

% histogram:直方图
% histogram(x, n)   基于 X 创建直方图,n为区间数量

x = randn([1, 100000]);
n = 10;
histogram(x, n);
% 散点图
% scatter(x, y) 在向量 x 和 y 指定的位置创建一个包含圆形的散点图
% 跟 plot() 的用法差不多

x = linspace(0, 2*pi, 30);
y = sin(x);

scatter(x, y, 'black');
% 柱状图
% bar(y)    创建一个条形图,y 中的每个元素对应一个条形
%           如果 y 是 m x n 的矩阵,则 bar 创建每组包含n个条形的m个组

y = [2 3 6; 11 23 26];
bar(y);

在这里插入图片描述

% 饼图
% pie(X, explode) 使用 X 中的数据绘制饼图。饼图的每个扇区代表 X 中的一个元素;
% 				  explode 将扇区从饼图偏移一定位置
X = [1 3 0.5 2.5 2];
explode = [0 1 0 1 0];
pie(X,explode);

饼图

三维绘图之曲线、曲面和散点图
  • 三维曲线 plot3
  • 散点图 scatter3
  • 三维曲面 mesh、surf 基本思想:连点成面
% plot3(X1,Y1,Z1,LineSpec1,...,Xn,Yn,Zn,LineSpecn)

x = linspace(0, 6*pi, 200);
y = sin(x);
z = cos(x);
plot3(y, z, x)
xlabel('x');
ylabel('sin(x)');
zlabel('cos(x)');
title('y = sin(x),z = cos(x)');

在这里插入图片描述

% 三维散点图
% scatter3 用法类似scatter

x = linspace(0, 6*pi, 300);
y = sin(x);
z = cos(x);

scatter3(x, y, z, 'o', 'MarkerEdgeColor','b','MarkerFaceColor','r')

三维散点图

% mesh  网格图
% surf  曲面图
% 绘制 z = x*e^(-(x^2+y^2))

[x, y] = meshgrid(-10:1:10, -10:1:10);
z = x.*exp(-(x.^2+y.^2));
mesh(x, y, z);
surf(x, y, z);

matlab的文件读写

文件读写

  • 将数据写入文件:writetable(txt、Excel)
  • 从文件读取数据:readtable(txt、Excel)
% 将数据写入文件
% writetable(m, filename):将m写入名为filename的文件
% 支持的文件扩展名:.txt、.csv、.xls、.xlsm 或 .xlsx

m = rand(4) + 1;
t = table(m);
writetable(t, 'm.txt')  % 相对路径
writetable(t, 'E:\m.txt')       % 绝对路径
% delimiter(指定分隔符):","(默认)、" "、"\t"、";"、"|"
writetable(t, 'm.txt', "Delimiter", "\t");  % 相对路径
% "WriteVariableNames":是否写入变量名
writetable(t, 'm.txt', "delimiter", "\t", "WriteVariableNames", flase); % 相对路径
% 将多个矩阵保存在同一文件 "WriteMode" "append"追加
t2 = table(eye(4))
writetable(t2, 'm.txt', "Delimiter", "\t", "WriteVariableNames", false", "WriteMode", "append");	% 相对路径
从文件中读取数据
% t = readtable(filename) 从filename文件中读取数据
% 支持的文件扩展名:.txt、.csv、.xls、.xlsm 或 .xlsx

t = readtable('m.txt')
m = table2array(t)

方程和方程组的解析解(solve)

solve函数用法:solve(方程1, 方程2, …, 变量1, 变量2, …)

多项式合并: ( x + 3 x − 5 x ) x / 4 (x+3x-5x)x/4 (x+3x5x)x/4

syms x
(x+3*x-5*x)*x/4

在这里插入图片描述

方程1: a x 2 + b x + c = 0 ax^2+bx+c = 0 ax2+bx+c=0

syms a b c x
solve(a*x^2 + b*x + c, x)

在这里插入图片描述

方程2: 2 x − x 2 = e − x 2x-x^2=e^{-x} 2xx2=ex

syms x
y = 2*x - x^2 - exp(-x);
solve(y, x)

在这里插入图片描述

方程组1: { x + b y = 5 a x − y = x \left\{\begin{array}{l} x+b y=5 \\ a x-y=x \end{array}\right. {x+by=5axy=x

syms a b x y
y1 = x + b*y - 5;
y2 = a*x - y - x;
res = solve(y1, y2, x, y);
res.x;
res.y;

在这里插入图片描述

方程组2: { e − e − x 1 − x 2 = x 2 ( 1 + x 1 2 ) x 1 cos ⁡ ( x 2 ) + x 2 sin ⁡ ( x 1 ) = 1 2 \left\{\begin{array}{l} e^{-e^{-x_{1}-x_{2}}}=x_{2}\left(1+x_{1}^{2}\right) \\ x_{1} \cos \left(x_{2}\right)+x_{2} \sin \left(x_{1}\right)=\frac{1}{2} \end{array}\right. {eex1x2=x2(1+x12)x1cos(x2)+x2sin(x1)=21

syms x1 x2
y1 = exp(-exp(-x1-x2)) - x2*(1+x1^2);
y2 = x1*cos(x2)+x2*sin(x1)-1/2;
res = solve(y1, y2, x1, x2);
res.x1
res.x2

在这里插入图片描述

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值