精华内容
下载资源
问答
  • 由于单核计算无法承担LNG冷箱中降温过程动态模拟的高负荷,采用共享内存模式下的对称多核并行计算方法实现带预冷的氮膨胀液化流程中冷箱降温过程的动态模拟。动态模型中,板翅式换热器采用一维模型,压缩机、膨胀机...
  • 利用集中供热空调系统水力工况计算机模拟分析软件,确定了系统水力工况调节...设想利用现代控制理论和计算机模拟分析相集合,采用系统实际运行工况动态检测数据对系统的水力工况进行模拟分析,实现系统的远程自动控制。
  • 精馏塔动态过程模拟研究对于确定精馏塔系统从开工过程达到系统稳态运行的时间上限具有重要意义,开工过程动态模拟研究可以为系统产品质量控制方案和控制策略提供理论指导。针对氢同位素精馏分离过程,基于严格热力学...
  • 动态模拟CPU源码.rar

    2019-08-29 19:20:37
    采用WPF进行开发,实现动态模拟CPU曲线图,可拖拽、放大缩小 二、功能介绍 本源码是一个动态模拟CPU的曲线图源码,适合初学者,欢迎下载 三、注意事项 1、开发环境为Visual Studio 2010,使用.net 4.0开发。
  • 针对这个问题,提出一种结合Qsplat算法与IFS(迭代函数系统)算法的粒子系统的积云模拟方法,并考虑了积云的结构特点。基于Qsplat算法的细节层次树形结构建立树型结构粒子系统,以加速粒子系统搜索速度;对距离视点...
  •  动态数据采集有着采集范围大、采集点众多、数据通信困难、布线空间有限、自动作业等特点,传统的以总线方式组成网络的采集系统很难满足这种应用要求。在此动态数据采集系统的设计充分借鉴无线传感器网络设计思想,...
  • 本文将介绍其特点、工作原理,及其在70dB大动态范围控制系统中的应用,给出了两种级联控制的电路连接方法并对二者性能做出了比较分析。AD8367芯片介绍AD8367是基于AD公司X-AMP结构的可变增益中频放大器,能够实现...
  • MAX12557型高速A/D转换器的特点及应用 罗勇,王莹,周资伟 1 引言 MAX12557是Maxim公司开发的一款高速、低功耗、高性能的14位模/数转换器。该模/数转换器具有完全差分的双通道带宽采样保持(T/H)输入端,采样速率为...
  • 为了实现汽车动力系统排放及燃油经济性台架试验,需要采用动态负载模拟算法,利用测功机对动力系统进行加载,以模拟整车...实验结果表明:该方法具有模拟精度高、稳定性较好的特点动态负载模拟算法的实测转矩、转速和
  • 为了模拟大规模动态水面场景,首先采用控制参数叠加来实现水域表面的流动性,其次使用Gerstner波叠加来实现水域表面波峰和波谷的不规则性。利用视野范围的特点,对不同视点的水域表面细节数据进行分析,采用基于视点的...
  • 针对现有地下水流模拟软件在数据预处理、三维可视化效果等方面的不足,以Visual C++...在此基础上完成了地下水动态模拟分析功能,实现了虚拟地理信息技术在地下水工作中的系统应用,具有功能开放、丰富、灵活的特点
  • 为了探讨高频振动筛横梁的应力分布特点,以与实际工况相似为原则,采用数值模拟方法对其进行分析,结果表明,其应力数值较小,远低于其屈服极限,主要集中于横梁中部及两侧法兰处,为该筛机今后的设计改进及动态强度的试验...
  • 介绍了利用电力系统动态模拟进行计算机实时控制研究方面进行的一些工作,描述了以PDP-11计算机为核心的一个数据采集和控制系统的硬件、软件以及应用中的一些特点,举出了利用这个系统进行计算机实时控制的一个...
  • 目前,土地利用变化中的一个显著特点是城市化扩张,而城市化扩张是一个动态的、非线性的、多反馈回路的复合系统。神经网络在非线性系统的建模和预测中具有明显的优越性。以泰安市城区及周边为研究区域,依据近年来的...
  • 针对布料动态模拟中快速稳定求解的瓶颈问题, 提出了一种局部自适应的混合积分方法。在每一时间步长, 网格中质点利用自身模拟参数求解一稳定的判断准则, 据此自适应判定该质点相连弹簧不同弹性力部分引起的运动方程...
  • 应用辐射增殖氮循环细菌进行了净化湖水氮污染的动态模拟实验。研究结果表明,富营养化湖水经固定化氮循环细菌净化后,总氮下降 72.4%。氨氮下降85.6%,出水水质得到明显改善。固定化氮循环细菌在冬季低温(7℃)条件下仍...
  • 根据单晶硅各向异性腐蚀的特点,以晶格内部原子键密度为主要因素,温度、腐蚀液浓度等环境因素为校正因子,建立了一个新颖的硅各向
  • 设计Ⅰ号、Ⅱ号、Ⅲ号、Ⅳ号模拟煤层的初始气体压力分别为1.0,1.4,1.8,2.2 MPa,通过叠置含气系统煤层气合采物理模拟实验,分析了合采过程中煤层渗透率动态演化特点及其影响因素。结果表明:① 合采过程中模拟煤层...
  • 这些新的器件凭借ADI公司系统级信号链和医学应用的专家经验,既可以独立使用,也可以一起使用提供一种完整的、最佳的模拟前端(AFE),不仅提高了超声设备的动态范围和图像分辨率,还减小了封装尺寸、每通道功耗和原...
  • 采用高效质点追踪算法,运用最新的软件编程技术,开发了拉格朗日法描述的二维非恒定流场动态模拟软件。软件图形编程基于GDI+,直接图形输出方式大大增强了动态显示的灵活性,先进的编程模式使得用户可在动态流场模拟...
  • 针对矿用防爆胶轮车井下作业时受力复杂的特点,...应用虚拟样机技术模拟真实的工况,提取搓板路面工况下随机激励的峰值,进而通过有限元法对车架进行动态应力分析。有限元分析结果表明整个车架的最大动应力满足强度要求。
  • 模拟退火算法的优缺点

    千次阅读 2020-12-24 21:53:11
    与以往的近似算法相比,模拟退火算法具有描述简单、使用灵活、运用广泛、运行效率高和较少受到初始条件约束等优点模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升...

    该算法是一种新的随机搜索方法,它是近年来提出的一种适合于解决大规模组合优化问题的通用而有效的近似算法。与以往的近似算法相比,模拟退火算法具有描述简单、使用灵活、运用广泛、运行效率高和较少受到初始条件约束等优点

    模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e-ΔE/(kT),其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S。

    3.5.1 模拟退火算法的模型

    模拟退火算法可以分解为解空间、目标函数和初始解三部分。

    模拟退火的基本思想:

    (1) 初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点), 每个T值的迭代次数L

    (2) 对k=1,……,L做第(3)至第6步:

    (3) 产生新解S′

    (4) 计算增量Δt′=C(S′)-C(S),其中C(S)为评价函数

    (5) 若Δt′&lt0则接受S′作为新的当前解,否则以概率exp(-Δt′/T)接受S′作为新的当前解.

    (6) 如果满足终止条件则输出当前解作为最优解,结束程序。

    终止条件通常取为连续若干个新解都没有被接受时终止算法。

    (7) T逐渐减少,且T-&gt0,然后转第2步。

    算法对应动态演示图:

    模拟退火算法新解的产生和接受可分为如下四个步骤:

    第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。

    第二步是计算与新解所对应的目标函数差。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算。事实表明,对大多数应用而言,这是计算目标函数差的最快方法。

    第三步是判断新解是否被接受,判断的依据是一

    展开全文
  • 结合突水水流流动的水力特征,解算了突水水流的漫延速度和到达时间,建立了能够真实模拟水流漫延过程的时空动态性变化的三维动态仿真模型,以国内某典型矿山的实际数据为例,验证了突水过程三维动态仿真模型的有效性...
  • 为此,结合虚拟仪器的I/O 子系统设置和数据同步,研究了基于MSComm 控件实现串口中断采集的多线程设计方法,研制了一种基于虚拟仪器平台的模拟钻柱动态力无线测量装置,用于模拟钻柱旋转过程中轴向力、侧向力和扭矩...
  • 多级反馈队列调度的模拟。 本算法设置了三个优先级从高到低的队列,时间片长度分别为: 队列一:2 队列二:4 队列三:8 三、实现思路: 采用自定义类Progress实例化进程对象,组成进程数组; 初始化三个优先级从...

    一、实验目的:

    了解动态分区分配方式中的数据结构和分配算法,
    并进一步加深对动态分区存储管理方式及其实现过程的理解。
    

    二、实验内容:

    1. 用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。其中,空闲分区通过空闲分区链(表)来管理;在进行内存分配时,系统优先使用空闲区低端的空间。
    2. 假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:
      •作业1申请130KB
      •作业2申请60KB
      •作业3申请100KB
      •作业2释放60KB
      •作业4申请200KB
      •作业3释放100KB
      •作业1释放130KB
      •作业5申请140KB
      •作业6申请60KB
      •作业7申请50KB
      •作业8申请60KB
      分别采用首次适应算法和最佳适应算法进行内存的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。

    三、实现思路:

    1. 采用java的ArrayList数据结构存储自定义分区类Block的实例对象分区作为分区链。
    2. 根据最先适应/最佳适应的思想为作业分配内存(改变内存属性大小、当前作业id、分配始址等),并根据实际情况来释放或合并Block对象的空间属性大小。

    四、主要的数据结构:

    //ArrayList 分区链
    private static List<Block> blockList = new ArrayList<>();
    /**
     * 自定义Block类,分区
     */
    private static class Block {
        int address; //分区首地址
        int size;    //分区大小
        int id;      //进程id
    }
    

    五、程序流程图:

    • 最先适应算法FF:
      在这里插入图片描述
    • 最佳适应算法BF:
    • 在这里插入图片描述

    六、算法关键代码:

    /** 最先适应算法FF
     * 寻找空闲分区并为新作业分配空间
     * @param id
     * @param size
     */
    private static boolean allocation(int id, int size){
        //分配成功与否的标志
        boolean flag = false;
        int blockAddress = 0;
        int blockSize = 0;
        int blockId = 0;
    
        /*顺序遍历所有分区*/
        for(int i = 0; i < blockList.size(); i++){
            blockAddress = blockList.get(i).address;
            blockSize = blockList.get(i).size;
            blockId = blockList.get(i).id;
            /*若存在空闲且内存合适的分区,重新分配*/
            if(blockId == -1 && blockSize >= size) {
                blockList.get(i).id = id;
                blockList.get(i).size = size;
                /*若当前分区重新分配后有剩余内存,
                  则将其作为新的分区并设置新的address 和 size*/
                if (blockSize > size) {
                    FirstFit.Block newBlock = new Block();
                    newBlock.id = -1;
                    newBlock.address = blockAddress + size;
                    newBlock.size = blockSize - size;
                    blockList.add(i + 1, newBlock);
                }
                flag = true;
                break;
            }
        }
        //返回分配结果
        return flag;
    }
    /** 最佳适应算法BF
         * 寻找空闲分区并为新作业分配空间
         * @param id
         * @param size
         */
        private static boolean allocation(int id, int size){
            //分配成功与否的标志
            boolean flag = false;
            int blockAddress = 0;
            int blockSize = 0;
            int blockId = 0;
            //标记最佳分区的位置
            int mark = 0;
            int min = 0;
            int count = 0;
    
            /*顺序遍历所有分区*/
            for(int i = 0; i < blockList.size(); i++){
                blockAddress = blockList.get(i).address;
                blockSize = blockList.get(i).size;
                blockId = blockList.get(i).id;
                /*若存在空闲且内存合适的分区,重新分配*/
                if(blockId == -1 && blockSize >= size) {
                    count++;
                    if(count == 1) {
                        min = blockSize - size;
                        mark = i;
                    }else if(count > 1) {
                        if (min > blockSize - size) {
                            min = blockSize - size;
                            mark = i;
                        }
                    }
                    flag = true;
                }
            }
            if(flag) {
                blockAddress = blockList.get(mark).address;
                blockSize = blockList.get(mark).size;
                blockList.get(mark).id = id;
                blockList.get(mark).size = size;
                /*若当前分区重新分配后有剩余内存,
                  则将其作为新的分区并设置新的address 和 size*/
                if (blockSize > size) {
                    BestFit.Block newBlock = new BestFit.Block();
                    newBlock.id = -1;
                    newBlock.address = blockAddress + size;
                    newBlock.size = blockSize - size;
                    blockList.add(mark + 1, newBlock);
                }
            }
            //返回分配结果
            return flag;
        }
    
    /** FF与BF二者共用的内存释放算法
     * 释放内存并合并空闲分区
     * @param id
     */
    public static boolean release(List<Block> block_List, int id) {
        //释放成功与否的标志
        block_List = blockList;
        boolean flag = false;
        int blockId = 0;
        int blockSize = 0;
    
        for(int i = 0; i < block_List.size(); i++) {
            blockId = block_List.get(i).id;
            blockSize = block_List.get(i).size;
            //释放成功
            if (blockId == id) {
                block_List.get(i).id = -1;
                /*当分区为第一个时*/
                if(i == 0){
                    //若与之相邻下一个分区空闲
                    if (block_List.get(i + 1).id == -1) {
                        /*更新本分区的size并删除下一分区*/
                        block_List.get(i).size += block_List.get(i + 1).size;
                        block_List.remove(i + 1);
                    }
                }
                /*当分区不是第一个也不是最后一个*/
                else if(i < block_List.size() - 1) {
                    //若与之相邻上一个分区空闲且下一分区不空闲
                    if (block_List.get(i - 1).id == -1 && block_List.get(i + 1).id != -1) {
                        /*更新上一分区的size并删除本分区*/
                        block_List.get(i - 1).size += block_List.get(i).size;
                        block_List.remove(i);
                    }
                    //若与之相邻下一个分区空闲且上一分区不空闲
                    else if (block_List.get(i + 1).id == -1 && block_List.get(i - 1).id != -1) {
                        /*更新本分区的size并删除下一分区*/
                        block_List.get(i).size += block_List.get(i + 1).size;
                        block_List.remove(i + 1);
                    }
                    //若与之相邻上下分区都空闲
                    else if (block_List.get(i - 1).id == -1 && block_List.get(i + 1).id == -1) {
                        /*更新上一分区的size并删除本、下一分区*/
                        block_List.get(i - 1).size += blockSize;
                        block_List.get(i - 1).size += block_List.get(i + 1).size;
                        block_List.remove(i);
                        block_List.remove(i);
                    }
                }
                /*当分区为最后一个分区时*/
                else if(i == blockList.size() - 1){
                    //若与之相邻上一个分区空闲
                    if (blockList.get(i - 1).id == -1) {
                        /*更新上一分区的size并删除本分区*/
                        blockList.get(i - 1).size += blockList.get(i).size;
                        blockList.remove(i);
                    }
                }
                flag = true;
                break;
            }
        }
        return flag;
    }
    
    
    

    七、运行测试:

    测试数据:

    • 最先适应算法FF:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      可以看出运行结果体现出了“最先适应”的思想,并且正确实现了内存回收和分区合并。

    • 最佳适应算法BF:
      -
      在这里插入图片描述
      在这里插入图片描述
      可以看出运行结果体现出了“最佳适应”的思想,并且正确实现了内存回收和分区合并。

    八、总结:

    在这次实验中,我经历了多次debug的过程,使得我对于算法的思想策略了解的更加明彻。最终达到想要的效果后,我觉得其实操作系统的一些算法只要理解了就不难实现。这也使我更加喜爱操作系统这门课程。

    展开全文
  • 对研究动态再结晶微观组织的几种模拟方法进行简要的阐迷,并指出了各种模拟方法的特点及缺点,最后对模拟方法的前景进行了展望。结论是基于物理-有限元-唯象耦合模型的数值模拟方法最能与实际结果相符,也最能说明其...
  • 本文提出了基于视频动态纹理与粒子系统相结合的思想,结合了粒子系统随机性、高效性,视频纹理方法简单,计算量小的特点,基于VC++和OpenGL平台对算法进行了模拟,通过实验在满足真实感的同时兼顾实时性.
  • 分析了以动态阈值NMOS晶体管作为输入信号的输入晶体管,利用4个动态阈值NMOS和2个有源电阻设计和实现的一种1.2 V低功耗CMOS模拟乘法器电路。该电路具有节省输入晶体管数目、偏置晶体管和偏置电路,以及性能指标优良...
  • 主要通过筛机与实际工况相似的原则简化高频振动筛模型,而后对其进行动力学分析,研究其内部应力分布规律,研究结果可作为今后筛机动态强度校核和结构改进的依据。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 86,950
精华内容 34,780
关键字:

动态模拟的特点