相关疑难解决方法(0)

MATLAB编程最佳实践

我正在寻找有关如何构建中型到大型MATLAB项目的资源,特别是那些涉及多个独立模块的项目.如何管理全局配置变量,如何将项目构建到文件夹中,如何管理模块之间的耦合等.

关于这个主题是否有某种标准文本?看起来大多数MATLAB教科书都是由科学家或工程师编写的.我想,我正在寻找的是由软件工程师编写的任何MATLAB教科书.:-)

matlab

33
推荐指数
2
解决办法
8559
查看次数

MATLAB的垃圾收集器?

你的心理模型是什么?它是如何实现的?它有哪些优点和缺点?MATLAB GC与Python GC

我有时会在使用MATLAB嵌套函数时看到奇怪的性能瓶颈,否则看起来无关紧要,我确信这是因为GC.垃圾收集器是VM的重要组成部分,Mathworks不会将其公开.

我的问题是关于MATLAB自己的和GC!不是关于Java/COM对象的处理/防止"内存不足"错误/堆栈变量的分配.

编辑:第一个回答实际上是元回答"我为什么要关心?".我很关心因为GC在实现链表MVC模式时表现出来.

matlab garbage-collection memory-management

28
推荐指数
2
解决办法
2万
查看次数

matlab初始化对象数组

我在MATLAB中玩OOP,我有以下构造函数:

function obj = Squadron(num_fighters, num_targets, time_steps)            
    if nargin == 0
        num_targets = 100;
        time_steps = 100;
        num_fighters = 10;
    end
    obj.num_shooters = num_fighters;
    for iShooter = 1:obj.num_shooters
       a(iShooter) = Shooter(num_targets, time_steps);
    end
    obj.ShooterArray = a;
    obj.current_detections = zeros(num_fighters, num_targets);
end

那个临时变量'a'闻起来很可怕.有没有更好的方法来初始化一个对象数组,我希望有一个推/弹方法.我相信有更好的方法可以做到这一点.

arrays oop matlab

6
推荐指数
2
解决办法
1万
查看次数

在单元格数组中存储句柄对象时性能下降

我只有一小部分MATLAB代码存在大量性能问题,希望您可以了解如何改进它:

我正在MATLAB中开发一个基于代理的模拟,它创建了许多句柄对象.其中一些是代理,其他可以是例如代理所拥有的对象.

为了清楚地识别每个句柄对象,每个句柄对象都获得由" IdDistributor "对象发出的唯一Id(obj.Id).所述IdDistributor本身被移交给各对象的构造也就是resive ID和从那里调用来发出一个Id-数(giveId).

此外,IdDistributor还保留了一种电话簿(IdRegistry),它将每个Id与对象相关联.因此,鉴于Id,可以在IdRegistry中查找对象.

我通过使用一个单元格数组来实现这一点,该数组数组将不同的句柄对象存储在与其Id匹配的字段中.(正常数组不起作用,因为对象属于不同的类).

测试我的模拟非常慢,MATLAB Profiler显示99%的时间用在IdDistributor上,特别是在IdRegistry中存储对象的(当我尝试创建大约10,000时,每个对象需要花费1秒钟)对象).

现在我想尝试一种类似的解决方案,花费更少的时间.正如你在下面的代码中看到的那样,我已经尝试通过预分配来提高速度(当它已满时,我将IdRegistry扩展10,000个单元,而不是逐个增加1).我还想过试图以某种方式获得当我读到Id不是永久性的并且可以被系统更改时,句柄对象的MATLAB内部Id但没有遵循那条道路.

我非常感谢任何想法如何加快代码或找到解决方法/改进我的概念!

在这里我的代码:

最慢的行是IdDist.IdRegistry(IdNumber)= {obj};

顺便说一句.将其更改为IdDist.IdRegistry {IdNumber} = obj; 没多大帮助

classdef IdDistributor < handle

properties
    Id=int64(1); %Her own ID
    LastId=int64(1);
    IdRegistry={}
end

methods
    function IdDist=IdDistributor()
        IdDist.Id=int64(1);
        IdDist.LastId=int64(1);
        IdDist.register(IdDist);
    end …
Run Code Online (Sandbox Code Playgroud)

arrays oop performance matlab

6
推荐指数
1
解决办法
1006
查看次数