MatLab

这是B站up主@glanny的视频"1小时Matlab速成教程"所整理和补充的笔记
视频链接在此:https://www.bilibili.com/video/BV1hE411Q7T4?t=1205

MATLAB入门(一)

生成矩阵
%直接法
	a = [1,2,3;4,5,6;7,8,9];
		
%冒号一维矩阵 a = 开始 : 步长 : 结束,步长为1可省略
	b = 1 : 1 : 10;
	b = 1:10; %与上式等价
		
%函数生成
	%linspace(开始,结束,元素个数),等差的生成指定元素个数的一维矩阵,省略个数时生成一百个
	c = linspace(0,10,5);		
	%特殊矩阵
		e = eye(4); %四维单位阵
		z = zeros(1,4);%zeros(维数)全零阵,一行四列
		o = onces(4,1);%ones(维数)全1阵
		r = rand(4);%rand(维数)0~1分布随机阵
		rn = randn(4);%randn(维数)0均值高斯分布随机阵
矩阵的运算
%diag的两种用法
	%1
		X = diag(v,k);%v为向量,X为矩阵,将以向量v的元素作为矩阵X的第k条对角线,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。
		>>v=[1,2];
		>>X=diag(v,-1);
		X=
			0 0 0
			1 0 0
			0 2 0
	%2
		v = diag(X,k);%v为向量,X为矩阵,将矩阵X的第K条对角线元素作为向量v
		
tril_a = tril(a,1);%tril(矩阵,主对角线上方第k条斜线)生成矩阵的下三角阵,triu生成矩阵的上三角阵

%加、减、乘、乘方
	a*a;%矩阵乘法
	
%点运算 
	% a.*b, a./b, a.\b, a.`b 对应元素的.* ./ .\ .`运算
	a.*a;%对应元素相乘

%逆矩阵
	pinv(a); %伪逆矩阵,当a不是方阵,求其广义逆矩阵,否则为逆矩阵
	
%特征值,特征向量
	[v,D] = eig(a); %输出v为特征向量,D为特征值对角阵

%行列式
	det(a);

%秩
	rank(a);

%伴随
	compan(a);
矩阵的修改
%部分替换
	chg_a = a;
	chg_a(2,3) = 4; %(行,列)元素替换
	chg_a(1,:) = [2,2,2];%(行,:)替换行,[]为删除该行
	chg_a(:,1) = []; %(:,列)替换列
	
%转置
	T_a = a’;
	
%指定维数拼接
	c1_a = cat(1,a,a);%垂直拼接
	c2_a = cat(2,a,a);%水平拼接
	
%变维
	rs_a = reshape(a,1,9);%元素个数不变,矩阵变为m*n(按顺序重新排列矩阵)
	>>E = eye(2)
	>>e = reshape(E,1,4)
	e = 1 0 0 1

MATLAB中以列优先的方式存储数据

矩阵的信息获取
%矩阵的行列数
	[row_a, col_a] = size(a); %[行数,列数]

%行列中最大的
	len_a = length(a);
创建多维数组
%直接法
	%以2x3x2三位数组为例
		mul_1(:,:,1) = [1,2,3;4,5,6];
		mul_1(:,:,2) = [6,5,4;3,2,1];
	%扩展法
		mul_2(:,:,2) = [3,4,5;6,7,8];%若不赋值第一页,则第一页全为零
	%拼接法
		mul_31 = [1,2,3;4,5,6];
		mul_32 = [6,5,4;3,2,1];
		mul_3 = cat(3,mul_31,mul_32); %把二者按照三维连接
字符串
%创建
	str0 = 'Hello World';  %字符串用单引号引起
	str1 = 'I''m a student';%字符串中的单引号写两遍
	str3 = ['I' 'm' 'a' 'student'];%方括号连接多字符串
	str4 = strcat(str0,str1);%连接字符串函数
	str5 = strvcat(str0,str1);%连接多行字符串
	str6 = double(str0);%取str0的ASCII值,也可以用abs函数
	str7 = char(str6);% 把ASCII码转换为字符串
%操作
	%比较
		strcmp(str0,str1);%相等为1,否则为0
		strncmp(str0,str1,3);%将比较前三个字符
		strcmpi(str0,str1);%忽略大小写比较
		strncmpi(str0,str1,3);%忽略大小写比较前3个字符
	%查找替换
		strfind(str0,str1);%在str0找到str1的位置
		strmatch(str1,str0);%在str0字符串数组中找到str1开头的行数
		strtok(str0);%截取str0第一个分隔符(空格,tab,回车)前的部分
		strrep(str0,str1,str2);%在str0中用str2替换str1
	%其他
		upper(str0);%转大写
		strjust(str0,'right');%将str0右对齐,还有left,center
		strtrim(str0);%删除str0开头结尾空格
		eval(str0);%将str0作为代码执行
	%转换
		str_b = num2str(b);%数字转字符串,其他如hex_a = dec2hex(13);
程序流程
%选择结构
	if a>0
		disp(x);
	elseif a == 0
		disp(a);
	else
		disp(a-1);
	end
	
%switch-case-otherwise-end
	switch a
		case 0 
			disp('Wrong')
		case 1
			disp('Right')
		otherwise             %相当于default
			disp('What?')
	end

%try-catch
	try	
		z == x*y;%不匹配的矩阵相乘
	catch  
		z = x.*y;  %若try出错,则执行此句
	end
	disp(z)

%循环
	for i=0:1:10 %步长为负,则初值应当大于终值
		disp(i)
	end
	
	while a>2
		disp(a);
		a = a-1;
	end
	%continue break return 从略	
m文件
%脚本文件:没有输入输出参数,执行后变量结果返回工作空间,可直接运行
	%以下是脚本文件,文件名假设为exp.m
		clear  %清理变量
		i = 5;
		disp(i*i);
	%在命令行窗口输入脚本文件名即可调用该脚本	
    
%函数文件:(函数名应当与文件名相同)
	function [s,p] = circ(r)
		%函数体,返回的参数将在此被直接赋值
		s = pi*r*r;
		p = 2*pi*r;
	end
	%以下是调用
		[a,b] = cicr(5);
	%函数文件可以包含子函数
		function y = key(w)
			if  w==0
				y = type0(w);
			else 
				y = type1(w);
			end
		end		
MATLAB绘图
%二维曲线绘制
	%基本函数
		%plot(y)
            plot(y);%y为向量,纵坐标为y的值,横坐标自动为元素序号(角标+1)
            figuer; %开启新绘图窗口,下一次绘图在新窗口
            y = [y1',y2']; %行向量转置为列向量
            plot(y);%当y为矩阵,按每列向量画出曲线,颜色自动区分
		
		%plot(x,y)
			%x,y为向量
				plot(x,y1);%以x,y为坐标绘制
				plot(x2,y1,x2,y2);%在同一个窗口绘制多条曲线
				
	%图形格式设置
		%线性 颜色和数据点
            plot(x,y1,'b:o'); %蓝色 点线 圆圈
            %b蓝 g青 r红 m紫 y黄 k黑 w白
            %-实线 :点线 --虚线 -。点画线
            %.实点 o圆圈 x叉 +十字 *星号 s方块 
		%坐标轴
			plot(x,y1);
			axis([-1*pi,3*pi,-1.5,1.5]);%规定横坐标范围
	%图形修饰
		%标题标签
        	title('title');%图像标题
        	xlabel('this is x');%x轴标记,同理还有ylable,zlabel
        %图例设置
        legend('one','two','best');%str顺序与uitu顺序一致,best指图例位置最佳化
        %图形保持
        	plot(x,y1);
        	hold on;  %将在原有窗口绘制下一个图形,且不会覆盖原有曲线
        	plot(x,y2);
        	hold off;  
    	%分割图像
    		subplot(2,2,1); %分割成2x2区域,在第一块区域绘制下一个图形
    		plot(x,y1);%y1被绘制在4块区域中的第一块
    		plot(x,y2);%y2在第二块区域

%三维曲线曲面绘制
	%三维曲线
		x = 0:0.1:2*pi;
		y = sin(x); z = cos(x);
		plot3(x,y,'b-*');
	%三维曲面
		%三维网格
			x = -5:0.1:5; %规定了x轴的采样点和范围
			y = -4:0.1:4; %规定了y轴采样点和范围
			[X,Y] = meshgrid(x,y); %得到了xoy面网格点
			Z = X.^2+Y.^2;
			mesh(X,Y,Z);%X,Y是meshgrid得到的网格点,Z是网格顶点
		%三维表面图
			x = -5:0.1:5;
			y = -4:0.1:4;
			[X,Y] = meshgrid(x,y);
			Z = X.^2+Y.^2;
			surf(X,Y,Z);      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值