程序逻辑与算法5_嘘嘘喵

嘘嘘喵 社区会员 2021-09-30 17:02:23

9.30

工作内容

任务4.4.4 堆和栈

栈内存

栈内存存储的是局部变量。局部变量:类中方法内的变量(对应的,类中方法外的变量是全局变量)。

要定义局部变量,就得加载局部变量所在的方法。因此是方法先进入栈内存,再定义局部变量。

局部变量都有自己的作用域,一旦离开这个作用域,变量就会被释放(就行fori循环中的 i ,for循环结束后变量 i 就被释放了,再用变量 i 的时候会提示未定义。因此局部变量的生命周期都很短,因此栈内存的更新速度很快。

栈内存的结构是先进后出的,有点像子弹,最后压进去的子弹会被最先打出来。

堆内存

存储的是对象,凡是new的新对象建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的。

堆内存的结构是先进先出的,有点像排队检票,队伍前面的数据会被先处理。

 

任务4.4.8 折半查找

使用非递归方式对数组[8, 7, 12, 1, 5, 0, 6, 9, 2]执行折半查找

package com.xxm.task4;

/*
使用非递归方式对数组[8, 7, 12, 1, 5, 0, 6, 9, 2]执行折半查找
 */

import java.util.Scanner;
import java.util.Arrays;

public class Quest4_5_BinarySearch {
    public static void main(String[] args) {
        int[] arr = new int[]{8, 7, 12, 1, 5, 0, 6, 9, 2};
        Scanner sc = new Scanner(System.in);
        bubble(arr);
        System.out.println("排序后的数组为" + arr.toString());
        System.out.println("请输入你想查找的数:");
        int num = sc.nextInt();
        if (binarySearch(arr, num) >= 0) {
            System.out.println("您要找的数字是第" + (binarySearch(arr, num) + 1) + "个");
        } else {
            System.out.println("您要找的数字不在该数组中");
        }
    }

    /*
    1、对比mid与num,二分数组
    2、对比mid与num,二分数组。重复N次,设置计数器来记录分半后的数组长度len
            mid与num相等时,返回num的索引值。
            当len<=1时,对比mid与num,如果不等,返回一个负值,代表没找到。
     */
    public static int binarySearch(int[] arr, int num) {
        //定义初始最小、最大索引
        int low = 0;
        int high = arr.length - 1;
        //确保不会出现重复查找,越界
        while (low <= high) {
            //计算出中间索引值
            int mid = (low + high) / 2;
            if (num == arr[mid]) {
                return mid;
                //判断下限
            } else if (num < arr[mid]) {
                high = mid - 1;
                //判断上限
            } else {
                low = mid + 1;
            }
        }
        //若没有,则返回-1
        return -1;
    }

    /*
    二分搜索需要在有序数列中进行,因此用冒泡法将数列排序。
     */
    public static void bubble(int[] arr) {
        for (int i = arr.length; i > 0; i--) {
            for (int j = 0; j < i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = 0;
                    temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }


}


这里需要注意的是,折半查找需要序列是有序的,因此先对数组进行了排序。 

学习内容

inputStream和bufferedReader

InputStream inputStream = System.in;
Reader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String name = bufferedReader.readLine(); //从键盘读取字符串
String sAge = bufferedReader.readLine(); //从键盘读取字符串
int nAge = Integer.parseInt(sAge); //将字符串转换为数字。

假期计划

今天除了上述内容,还在codegym里自己看了3-4课。

假期看看书,然后自己在codegym里也多学学,打下基础。

...全文
653 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕“粒子群优化算法驱动的永磁同步电机电流环多参数协同辨识研究”,提出一种基于Simulink仿真实现的高精度参数辨识方法,旨在解决永磁同步电机(PMSM)在高性能电流控制中因关键参数(如电感、电阻、永磁磁链等)不准确或时变所导致的控制性能下降问题。研究构建了PMSM的精确数学模型,并在Simulink环境中搭建完整的电流环控制系统仿真平台,创新性地引入粒子群优化算法(PSO)对多个关键参数进行在线或多工况下的协同辨识。文中详细阐述了PSO算法的核心机制、适应度函数的设计原则(通常基于模型输出与实际响应的误差最小化)、参数初始化与收敛判据,并通过大量仿真实验验证了该方法在不同负载和运行条件下的辨识精度、收敛速度与强鲁棒性,有效提升了电流环的动态响应能力、抗干扰性和整体控制系统的稳定性。; 适合人群:具备电机控制理论、现代智能优化算法基础及MATLAB/Simulink仿真能力,从事电气工程、自动化控制、新能源汽车电驱动系统等领域的高校研究生、科研人员及企业研发工程师。; 使用场景及目标:①应用于高精度伺服驱动、电动汽车电驱系统等对电机参数敏感的高端装备中,实现控制器的精细化标定与自适应;②为智能优化算法在复杂非线性系统参数辨识领域的工程应用提供完整的仿真案例和技术范本;③服务于电机控制系统的故障诊断、性能评估及下一代自整定控制器的研发。; 阅读建议:建议读者结合提供的Simulink模型与MATLAB代码进行动手实践,重点剖析PSO算法与电机模型的耦合机制,深入理解适应度函数的构建逻辑,并可进一步尝试将该方法拓展至温度补偿、磁饱和等非线性因素的联合辨识,或迁移至其他类型的电机(如感应电机)控制中,以深化对数据驱动与模型驱动融合控制策略的理解。

110

社区成员

发帖
与我相关
我的任务
社区描述
训练、训练、训练!
其他 其他
社区管理员
  • 实训001
  • 非鱼up
  • andy421
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

自律训练,自信挑战!

试试用AI创作助手写篇文章吧