Matlab基础语法篇(下)

Matlab基础语法(下)

  • 一、逻辑基础
    • (一)逻辑运算符
    • (二)all、any、find函数
    • (三)练习
  • 二、结构基础
    • (一)条件结构
      • (1)if-elseif-else-end
      • (2)switch-case-otherwise-end
    • (二)循环结构
      • (1)for-end
      • (2)while-end
      • (3)break、continue
    • (三)小结 + 练习
  • 三、函数基础
    • (一)自定义函数
      • (1)m文件定义函数
      • (2)匿名函数
    • (二)特殊函数
    • (三)常用函数
      • (1)数值运算、三角函数
      • (2)isempty函数
      • (3)meshgrid函数
      • (4)rng函数

一、逻辑基础

(一)逻辑运算符

在这里插入图片描述
MATLAB 推荐大家直接使用运算符进行计算,因此&、和~这三个符号的功能大家要牢记。
以“&”为例:

  • 针对矩阵运算时:“逻辑与&”是对A和B进行计算的,计算时会比较A和 B对应位置的元素。需要符合算术运算中介绍的五种兼容式即可。
  • “逻辑与&”不仅可以作用在逻辑值0和1上,还可以用于普通的数值上,这时候,MATLAB 会将非零数值视为逻辑1,将数值零视为逻辑0进行运算。
  • “逻辑与&”也可以进行连续运算,例如1&2&3。
  • 为避免运算优先级的问题,直接使用小括号来指定计算顺序。
A = randi([-3,3],2,4)
B = randi([-3,3],1,4)
A & B
A | B
~A
xor(3,4) % 亦或 相当于 xor(1,1)
xor(A,B)

在这里插入图片描述
另:

  1. 支持连续运算
A = randi([-3,3],2,4)
B = randi([-3,3],1,4)
C = randi([-3,3],1,4)
D = A & B & C

在这里插入图片描述

  1. 关系运算符 的优先级高于 逻辑运算符
3>4 & 2>-1 % 相当于 0 & 1

在这里插入图片描述

  1. 辨析:&&和|| vs &和|
    (1)&&和|| 只能标量(只有一个元素) 进行逻辑运算,不能对有多个元素的向量或者矩阵进行运算,而&和|可以
    (2)&&和||有短路功能,可以提高运行效率

(二)all、any、find函数

在这里插入图片描述

  1. all(A,dim) 与 & 类似
    在这里插入图片描述
    在这里插入图片描述
B = randi([1,100],2,5)
B(3) = 0 % 线性索引改值
all(B,1)
all(B,2)

在这里插入图片描述

  1. any(A,dim) 与 | 类似
B = randi([1,100],2,5)
B(3) = 0 % 线性索引改值
any(B,1)
any(B,2)

在这里插入图片描述

  1. find(X,n,direction)
    在这里插入图片描述
A = randi([0,2],2,3)
ind1 = find(A) %返回其中所有 非0元素 的 线性索引
ind2 = find(A,2) %返回其中 前两个非0元素 的 线性索引
ind3 = find(A,2,"last") %返回其中 后两个非0元素 的 线性索引
[row,col] = find(A) %按行列分开 生成 两个向量
[row,col,v] = find(A) % 多生成了一个A中非0元素的列向量

在这里插入图片描述

(三)练习

在这里插入图片描述
这里以5个同学为例

score = randi([50,100],5,3)
% 先将分数矩阵转化为逻辑矩阵
any(score<60,2) % 关注同学 --> 生成列向量
all(score>=60,1) % 关注科目 --> 生成行向量

在这里插入图片描述
在这里插入图片描述
这里也以5个同学为例

score = randi([50,100],5,3)
find(sum(score < 60,2) == 2) 
find(sum(score,2) > 260)

在这里插入图片描述


二、结构基础

(一)条件结构

(1)if-elseif-else-end

在这里插入图片描述

if [1,2;0,2] % 矩阵中的元素都非 0,表达式才会被当所逻辑值 1res = 0;
elseres = 10;
endres

在这里插入图片描述

% 若想要至少有一个元素非 0 就执行 if 语句
A = [1,2;0,2]
A(:)
% A(:) 先用线性索引把 A 拉成一个列向量,不能直接 any(A),这样生成的是向量
if any(A(:)) res = 0;
elseres = 10;
endres

在这里插入图片描述

在这里插入图片描述

score = 87;
if (score >= 90) && (score <= 100)res = 1;
elseif (score >= 80) && (score < 90)  % elseif之间没有空格res = 2;
elseif (score >= 60) && (score < 80)res = 3;
elseif (score >= 0) && (score < 60)res = 4;
elseres = 0;
end % 不要忘了写!res

在这里插入图片描述

在这里插入图片描述

% 找最大值
a = 10;
b = 20;
c = 15;
if a > bif a > cmax = a;elsemax = c;end
elseif b > cmax = b;elsemax = c;end
endmax

在这里插入图片描述

(2)switch-case-otherwise-end

在这里插入图片描述
在这里插入图片描述

% 注:开关表达式的计算结果必须是一个 数值标量或者是一个字符向量/字符串,不能是向量或矩阵
season = randi([1,4])
switch seasoncase 1disp("春季");case 2disp("夏季");    case 3disp("秋季");otherwisedisp("冬季"); % 加不加分号不影响输出结果
end
% 或
if season == 1disp("春季");
elseif season == 2disp("夏季");
elseif season == 3disp("秋季");
elsedisp("冬季");
end

在这里插入图片描述

(二)循环结构

(1)for-end

在这里插入图片描述
循环变量:用于迭代的变量名,它会在每次循环迭代中从向量或矩阵中取出的值。数值向量或者矩阵则表示了循环变量可以取值的范围,一旦循环变量遍历完数值向量或者矩阵中的所有值,循环就会结束

% for后跟的可以是一个向量,也可以是一个矩阵
A = randi([-3,3],2,3)
for i = A % 每次都会取出一 列 的值i
end

在这里插入图片描述
在这里插入图片描述

x = 1:6
res_sum = 0;
for i = xres_sum = res_sum + i;
endres_sum

在这里插入图片描述

在这里插入图片描述

leap_year_num = 0;
for i = 1 : 9999if ((mod(i,4) == 0) && (mod(i,100) ~= 0)) || (mod(i,400) == 0)leap_year_num = leap_year_num + 1;end
endleap_year_num

在这里插入图片描述

(2)while-end

在这里插入图片描述
在这里插入图片描述

f(1) = 1;
f(2) = 1;
n = 2;
while f(n) <= 99999n = n + 1;f(n) = f(n-1) + f(n-2);
end
n
f(n)

在这里插入图片描述

  1. 一个无限循环,在命令行窗口中按下快捷键 Ctrl + C来中断程序的运行
while 1disp("死循环");
end

在这里插入图片描述

  1. while 后面表达式的计算结果不一定非得是逻辑值1或0。如果表达式的计算结果是一个数值常数,则只有当这个常数为非零值时循环才会进行
i = 5;
while ii;i = i - 1;
end
i

在这里插入图片描述

(3)break、continue

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

for i = 1:10if mod(i,2) == 0continue;endi
end

在这里插入图片描述

在这里插入图片描述

n = 9;
is_prime = 1;
for i = 2:n-1if mod(n,i) == 0is_prime = 0;break;end
end
is_prime

在这里插入图片描述

(三)小结 + 练习

在这里插入图片描述
在这里插入图片描述

a = 6;
b = 10;
eps = 1e-8; %误差阈值
while 1c = (a+b)/2;fc = c^3 - 8*c^2 +c - 5;if abs(fc)<epsbreak;endfa = a^3 - 8*a^2 +a - 5;if fa * fc < 0b = c;elsea = c;end
endx0 = c;
x0

在这里插入图片描述


三、函数基础

(一)自定义函数

(1)m文件定义函数

无需关注具体的实现过程,需要编写额外的.m文件,定义完的函数保存为同函数名的m文件,放置在Matlab当前路径下

  1. 函数的基本结构(end可以省略)
    在这里插入图片描述
  2. 函数的调用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
% code1.m 文件中
X = 1:20;
[max,min] = max_min__values(X)
% max_min__values.m文件中
function[max,min] = max_min_values(X)
max = subfun1(X);
min = subfun2(X);function r = subfun1(X)x1 = sort(X,'descend');r = x1(1);endfunction r = subfun2(X)x1 = sort(X);r = x1(1);end
end

在这里插入图片描述

(2)匿名函数

在这里插入图片描述

f1 = @(x,y)x.^2 + y.^2;
f1(2,3)x = 1:5;
y = 0.1:0.1:0.5; %从 0.1,间隔 0.1,到 0.5
f1(x,y)%双重匿名函数
f2 = @(a,b)@(x)a*x+b; % 外层变量:a,b  内层变量:x
f2(2,3) % 输入两个变量,返回一个单变量函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

f = @(a)@(x)exp(x)+x^a+x^(sqrt(x))-100; % 根据 a 的函数,获得 x 的函数
A = 0:0.1:2;
% fzero(fun,x0) x0:预测初始值
x = @(a)fzero(f(a),4); % 将 x 变为 a 的函数
X = @(A)arrayfun(@(a)x(a),A);  % 将函数应用于每个数组元素
Y = X(A)
% 相当于 Solution = @(A)(@(a)fzero(f(a),4),A)

在这里插入图片描述

(二)特殊函数

贝塞尔函数、beta函数、gamma函数……
有需求时去MATLAB帮助中心查看

(三)常用函数

(1)数值运算、三角函数

在这里插入图片描述
在这里插入图片描述

sqrt(1:9)
format long g % 取消掉科学计数法
sqrt(1:9)
sqrt(-4)
format shortexp(1:9)

在这里插入图片描述

(2)isempty函数

在这里插入图片描述
在这里插入图片描述

% 法一:
A = [1:9];
x = 10;
% A == x 元素全为 0 的逻辑向量
~isempty(find(A == x))
% 法二:
A = [1:9];
x = 10;
ismember(x,A)
% 推广:
A = [1:9];
x = 5:10;
ismember(x,A) %找 x 是否在 A 中存在

在这里插入图片描述

(3)meshgrid函数

在这里插入图片描述
在这里插入图片描述

% 基于向量 x 和 y 中包含的坐标来 返回 二维网络坐标
x = 0:4;
y = 0:3;
[X,Y] = meshgrid(x,y)
% 若写成[X,Y] = meshgrid(x),相当于 [X,Y] = meshgrid(x,x)
Z = X.^2 + Y.^2

在这里插入图片描述

(4)rng函数

在这里插入图片描述

% 设置随机数种子,这样能生成可重复的随机数
seed = 3;
rng(seed);
randi(10,3,3)
rng('shuffle'); %根据当前的时间来设置随机数种子

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十、操作符详解

目录 1、操作符分类 2、二进制转换 2.1二进制转十进制 2.1.1、十进制转二进制 2.2、二进制转八进制和十六进制 2.2.1、二进制转八进制 2.2.2、二进制转十六进制 3、原码、反码、补码 4、移位操作符&#xff08;移动的是二进制位&#xff09; 4.1、左移操作符 4.2、右…

VMware虚拟机下安装Ubuntu(详细教程,最小系统的安装,含VMware Tools)

1.VM的下载安装 VMware的下载安装教程_vm16 pro下载-CSDN博客 2. Ubuntu 下载 在官网或者镜像站下载所需版本的.ios镜像&#xff0c;这个镜像在接下来的步骤中会用到&#xff1a; Ubuntu 22.04.4 LTS 下载 和 清华大学开源软件镜像站 - Ubuntu 22.04.4 下载 3. 创建虚拟机 […

【C语言】深入解析希尔排序

文章目录 什么是希尔排序&#xff1f;希尔排序的基本实现代码解释希尔排序的优化希尔排序的性能分析希尔排序的实际应用结论 在C语言编程中&#xff0c;希尔排序是一种高效的排序算法&#xff0c;是插入排序的一种更高效的改进版本。它通过比较相距一定间隔的元素来进行排序&am…

【STM32嵌入式系统设计与开发---拓展】——1_10矩阵按键

这里写目录标题 1、矩阵按键2、代码片段分析 1、矩阵按键 通过将4x4矩阵按键的每一行依次设为低电平&#xff0c;同时保持其它行为高电平&#xff0c;然后读取所有列的电平状态&#xff0c;可以检测到哪个按键被按下。如果某列变为低电平&#xff0c;说明对应行和列的按键被按下…

【Java】详解抽象类和接口的区别

一、抽象类和接口的主要区别表格 特性抽象类接口声明关键字abstractinterface声明访问修饰符public、protected、default&#xff08;不能用private&#xff09;public、default继承关键字extendsimplements变量跟普通类一样&#xff0c;可以包含实例变量、静态变量等 只能包含…

excel表怎么增乱序单词表 和正序单词表四六级要来了?!Excel帮你构建自己的单词库

excel表怎么增乱序单词表 和正序单词表四六级要来了&#xff1f;&#xff01;Excel帮你构建自己的单词库 1.背单词的第一步&#xff0c;当然是先上网找电子版的单词集。 盘搜搜 2. 建立 xls 格式的表格 3. 把下载的单词数据 复制到 表格 粘贴 4.新建一列 辅助列 生成随机数来…

网络编程-TCP/IP

网络概述 网络采用分而治之的方法设计&#xff0c;将网络的功能划分为不同的模块&#xff0c;以分层的形式有机组合在一起。 每层实现不同的功能&#xff0c;其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务&#xff0c;同时使用下层提供的服务 网络体系结构…

SpringMVC注解全解析:构建高效Web应用的终极指南 (上)

SpringMVC 是一个强大的 Web 框架&#xff0c;广泛应用于 Java Web 开发中。它通过注解简化了配置&#xff0c;增强了代码的可读性。本文将全面解析 SpringMVC 中常用的注解及其用法&#xff0c;帮助你构建高效的 Web 应用。 一. MVC介绍 MVC 是 Model View Controller 的缩写…

数字通云平台 智慧政务OA PayslipUser SQL注入漏洞复现

0x01 产品简介 数字通云平台智慧政务OA产品是基于云计算、大数据、人工智能等先进技术,为政府部门量身定制的智能化办公系统。该系统旨在提高政府部门的办公效率、协同能力和信息资源共享水平,推动电子政务向更高层次发展。 0x02 漏洞概述 数字通云平台 智慧政务OA Paysli…

使用百度语音技术实现文字转语音

使用百度语音技术实现文字转语音 SpringBootVue前后端分离项目 调用api接口需要使用AK和SK生成AccessToken,生成getAccessToken的接口有跨域限制,所以统一的由后端处理了 部分参数在控制台->语音技术->在线调试里面能找到 Controller RestController RequestMapping(&q…

PostgreSQL的引号、数据类型转换和数据类型

一、单引号和双引号&#xff08;重要&#xff09;&#xff1a; 1、在mysql没啥区别 2、在pgsql中&#xff0c;实际字符串用单引号&#xff0c;双引号相当于mysql的,用来包含关键字&#xff1b; -- 单引号&#xff0c;表示user_name的字符串实际值 insert into t_user(user_nam…

浏览器跨tab页面通信方式总结

需求&#xff1a; 浏览器不同 tab 标签页之间是独立的&#xff0c; 如果要通信必须通过特殊手段来实现跨标签页通信。 1.StorageEvent 事件 当一个标签页 localStorage 变化时&#xff08;sessionStorage 无效&#xff09;&#xff0c;同源下另一个或其他所有标签页使用 DO…

python多级表头汇总

需求&#xff1a;将图一的数据展示为图二样式 图一&#xff1a; 图二&#xff1a; 图一具体的Excel截图 图二具体样式 python解决办法&#xff1a; # 导入 pandas 库&#xff0c;用于数据处理 import pandas as pd# 加载 Excel 文件 file_path 多级表头读取实例.xl…

科研绘图系列:R语言circos图(circos plot)

介绍 Circos图是一种数据可视化工具,它以圆形布局展示数据,通常用于显示数据之间的关系和模式。这种图表特别适合于展示分层数据或网络关系。Circos图的一些关键特点包括: 圆形布局:数据被组织在一个或多个同心圆中,每个圆可以代表不同的数据维度或层次。扇区:每个圆被划…

【BUG】已解决:SyntaxError invalid syntax

SyntaxError invalid syntax 目录 SyntaxError invalid syntax 【常见模块错误】 错误原因&#xff1a; 解决办法&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于…

图书馆定位导航:RFID、VR与AR技术在图书馆中的应用

图书馆作为知识的宝库&#xff0c;承载着无数求知者的梦想与期待&#xff0c;随着馆藏书籍数量的激增与图书馆布局的日益复杂&#xff0c;读者在寻找目标书籍往往有许多困难。传统的索引号查询方式虽能提供书籍的基本信息&#xff0c;但在寻找过程中&#xff0c;因不熟悉图书馆…

【Android】使用视图绑定ViewBinding来代替findViewById

文章目录 介绍作用用法开启ViewBinding功能自动生成绑定类在Activity中使用访问视图控件 区别 介绍 ViewBinding 是 Android 开发中的一个功能&#xff0c;它简化了访问视图的过程&#xff0c;避免了使用 findViewById 的繁琐步骤。它通过生成与布局文件相对应的绑定类&#xf…

CentOS 7 安装Jenkins2.346.1(war方式安装)

既然想要安装Jenkins&#xff0c;肯定是先要从官网解读所需环境配置信息&#xff0c;如需了解更多自行查阅 https://www.jenkins.io/doc/book/installing/linux/ JDK17&#xff0c;Maven3.9 安装 先从官网分别下载JDK17与Maven3.9 下载好之后上传至服务器、并解压&#xff1a…

算法学习day13(动态规划)

一、打家劫舍III 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 …

ubuntu 24 PXE Server (bios+uefi) 批量部署系统

pxe server 前言 PXE&#xff08;Preboot eXecution Environment&#xff0c;预启动执行环境&#xff09;是一种网络启动协议&#xff0c;允许计算机通过网络启动而不是使用本地硬盘。PXE服务器是实现这一功能的服务器&#xff0c;它提供了启动镜像和引导加载程序&#xff0c;…