MATLAB任意位置反转并拼接数组

news/2024/10/30 15:33:49/
  1. 初始化变量:

    • 定义原始数组 original_array,例如 [1, 2, 3, 4, 5, 6]
    • 定义仿真时间 simulationTime,表示遍历数组的总时间。
  2. 定义空的结果数组 result_array,用于存储最终生成的数组。

  3. 设置初始时间和索引:

    • 初始化当前时间 currentTime 为 0,表示从仿真开始的时间。
    • 初始化当前索引 currentIndex 为 1,表示开始遍历原始数组的起始位置。
  4. 定义反向遍历标志:

    • 初始化反向遍历标志 reverseFlagfalse,表示正向遍历。
  5. 进入主循环,直到达到仿真时间结束:

    • 在每个循环迭代中,判断是否需要进行反向遍历:

      • 如果 reverseFlagfalse,表示当前是正向遍历,将当前原始数组元素添加到结果数组中。
      • 如果 reverseFlagtrue,表示需要进行反向遍历:
        • 将当前原始数组元素添加到结果数组中。
        • 检查当前原始数组元素是否为 4:
          • 如果是 4,则截断结果数组,去除最后一个元素,表示开始反向遍历。
          • 如果不是 4,则继续正向遍历。
    • 更新当前索引 currentIndex

      • 如果当前索引超过了原始数组长度,将其重置为 1,以循环遍历原始数组。
    • 更新当前时间 currentTime,增加 1。

  6. 循环结束后,得到最终的结果数组 result_array,其中包含按照规律遍历生成的所有元素。

这个编程逻辑的泛化通用框架可以适用于任意给定的原始数组和仿真时间,通过设置合适的原始数组和仿真时间,可以生成符合规律的数组。在示例中,使用了 [1, 2, 3, 4, 5, 6] 作为原始数组,仿真时间为预设的总时间。根据以上的逻辑,生成了符合要求的结果数组。

function result_array = generateArray(original_array, simulationTime)result_array = [];currentTime = 0;currentIndex = 1;reverseFlag = false;while currentTime < simulationTimeif ~reverseFlagresult_array = [result_array, original_array(currentIndex)];elseresult_array = [result_array, original_array(currentIndex)];if original_array(currentIndex) == 4result_array = result_array(1:end-1);  % 截断数组,去除最后一个元素reverseFlag = false;  % 停止反向遍历endendcurrentIndex = currentIndex + 1;if currentIndex > numel(original_array)currentIndex = 1;endcurrentTime = currentTime + 1;end
end

根据给出的两个数组 [1, 2, 3, 4, 5, 6][1, 2, 3, 4, 3, 2, 1, 6, 5, 4, 5, 6, 1, 2, 3, 4],可以观察到以下内在逻辑规律:

  1. 正向遍历阶段:起始数组为 [1, 2, 3, 4, 5, 6],按照正向顺序逐个添加元素到目标数组。

  2. 反向遍历阶段:在遇到数字 4 后,开始进行反向遍历。从数字 4 开始,逆序添加元素到目标数组,直到遇到数字 6。然后再次从数字 1 开始正向添加元素,直到遇到数字 4。

  3. 循环模式:正向遍历和反向遍历的过程会不断循环进行,直到达到预定的仿真时间。

总体而言,这两个数组的内在逻辑规律是在正向遍历过程中按顺序添加元素,遇到特定数字后切换到反向遍历,并在特定数字处再次切换回正向遍历。这种规律会不断循环执行,形成了重复的模式。

根据给出的两个数组 [1, 2, 3, 4, 5, 6][1, 2, 3, 4, 3, 2, 1, 6, 5, 4, 5, 6, 1, 2, 3, 4, 3, 2, 1, 6, 5, 4, 5, 6, 1, 2, ...],可以观察到以下内在逻辑规律:

  1. 正向遍历阶段:起始数组为 [1, 2, 3, 4, 5, 6],按照正向顺序逐个添加元素到目标数组。

  2. 反向遍历阶段:在遇到数字 4 后,开始进行反向遍历。从数字 4 开始,逆序添加元素到目标数组,直到数字 1。然后再次从数字 1 开始正向添加元素,直到遇到数字 4。

  3. 循环模式:正向遍历和反向遍历的过程会不断循环进行。在每次循环中,反向遍历的部分会在数字 1 处切换回正向遍历,并在遇到数字 4 时切换回反向遍历。这种循环会持续进行,使得目标数组不断延伸。

总体而言,这两个数组的内在逻辑规律是在正向遍历过程中按顺序添加元素,遇到特定数字后切换到反向遍历,并在特定数字处再次切换回正向遍历。这种规律会不断循环执行,使得目标数组的长度逐渐增长。

original_array = [1, 2, 3, 4, 5, 6]; % 起始数组
target_array = original_array; % 目标数组初始化为起始数组startIndex = find(original_array == 4); % 找到数字4的索引作为切换点
direction = 1; % 初始方向为正向遍历while trueif direction == 1 % 正向遍历for i = startIndex+1 : length(original_array)target_array = [target_array, original_array(i)];if original_array(i) == 4direction = -1; % 切换到反向遍历startIndex = i;break;endendelse % 反向遍历for i = startIndex-1 : -1 : 1target_array = [target_array, original_array(i)];if original_array(i) == 1direction = 1; % 切换回正向遍历startIndex = i;break;endendend
end

% 参数设置
numPoints = 200; % 离散点的数量% 生成离散的正弦轨迹
samplingRate = numPoints / (2*pi); % 计算采样率
time = linspace(-2*pi, 2*pi, numPoints); % 在-2*pi到2*pi的范围内生成离散时间点
qr0 = sin(time); % 计算每个时间点上的正弦值
m = 10;
qr1 = qr0(m-1:-1:1) ;
qr2 = qr0(numPoints-1:-1:1) ;qr=[qr0(1:1:m) qr1 qr2]num = m+m-1+numPoints-1;
% 绘制离散的正弦轨迹
% plot(1:num, qr, ':', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
plot(1:num, qr, ':', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
xlabel('采样点');
ylabel('角位移');
title('离散的正弦轨迹');
grid on; % 显示网格

numPoints = 200; % 离散点的数量% 生成离散的正弦轨迹
samplingRate = numPoints / (2*pi); % 计算采样率
time = linspace(-2*pi, 2*pi, numPoints); % 在-2*pi到2*pi的范围内生成离散时间点
time1 = linspace(0, 2*pi, numPoints);
time2 = linspace(-2*pi, 0, numPoints);
qr0 = sin(time1); % 计算每个时间点上的正弦值
m = 40;
qr1 = qr0(m-1:-1:1) ;
f = numPoints-20;
qr2 = sin(time2) ;qr=[qr0(1:1:m) qr0(m-1:-1:1) qr2(numPoints-1:-1:f)  qr2(f-1:1:numPoints) qr0(1+1:1:m)  qr0(m-1:-1:1+1)  qr2(numPoints-1+1:-1:f)];num = m+  m-1+ numPoints-1-f+1+   numPoints-f+2  +           m-1  +  m-2+  numPoints-1+1-f+1 ;
% 绘制离散的正弦轨迹
% plot(1:numPoints, sin(time1), '--', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
plot(1:num, qr, ':', 'LineWidth', 2); % 绘制采样点连接线,并设置线宽
xlabel('采样点');
ylabel('角位移');
title('离散的正弦轨迹');
grid on; % 显示网格


http://www.ppmy.cn/news/104112.html

相关文章

跨域图像识别

跨域图像识别 跨域图像识别&#xff08;Cross-domain Image Recognition&#xff09;是指在不同的数据集之间进行图像分类或识别的任务。由于不同数据集之间的分布差异&#xff0c;跨域图像识别面临着很大的挑战。 以下是几种代表性的跨域图像识别算法&#xff1a; DDC&#…

正则表达式必知必会 - 匹配单个字符

目录 一、匹配普通文本&#xff08;plain text&#xff09; 1. 匹配多个结果 2. 字母的大小写问题 二、匹配任意字符 三、匹配特殊字符 一、匹配普通文本&#xff08;plain text&#xff09; mysql> set s:Hello, my name is Ben. Please visit> my website at htt…

vue 【git】

文章目录 前言一、git 工作流程二、常用的git命令1.git 初始化2.修改的内容提交到暂存区3.暂存区的内容提交到本地仓库4.创建分支5.切换分支6.展示分支7.删除分支8.合并指定分支到当前分支9.本地仓库的内容提交到远程仓库10.合并分支11.上传本地仓库分支到远程仓库分支 前言 什…

使用Vue实现 “轮播图” 组件

在本篇博客中&#xff0c;我们将使用Vue来实现一个简单的轮播图组件。我们将利用Vue的生命周期钩子、数据绑定和计算属性等特性来完成这个功能。 准备工作 首先&#xff0c;我们需要创建一个Vue组件&#xff0c;用于展示轮播图。在这个例子中&#xff0c;我们将创建一个名为C…

EMNLP -- Call for Main Conference Papers

以下内容链接&#xff1a;Call for Main Conference Papers - EMNLP 2023 目录 审核流程&#xff1a; 与 ARR 的交叉提交政策 注意&#xff1a; 注意&#xff1a; 重要日期 强制性摘要提交 提交方向 论文提交信息 论文提交和模板 确认 长论文 短文 贡献 演示模式 著作权 引用与…

[SpringBoot]xml写mapper

创建工程[SpringBoot框架]如何使用SpringBoot框架_万物更新_的博客-CSDN博客 实现步骤: 测试: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd…

HTTPS协议深入理解

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 目录 文章目录 一、HTTPS协议的由来及概念 二、加密是什么 三、HTTPS的工作流程 3.1 使用对称密钥 3.2 引入非对称加密 3.3 中间人攻击 3.4 引入证书 一、HTTPS协议的由来及概念 HTTPS 也是…

JSON(一) -- JSON转换工具 -- Jackson的使用

目录 1. Jackson的简介: 2. JSON转换的案例 2.1 对象 => JSON && JSON=> 对象 2.2 Map => JSON && JSON=> Map