小编Dan*_*hoa的帖子

MATLAB - 依赖属性和计算

假设我有以下类来计算二次方程的解:

classdef MyClass < handle
    properties
        a
        b
        c
    end
    properties (Dependent = true)
        x
    end

    methods
        function x = get.x(obj)
            discriminant = sqrt(obj.b^2 - 4*obj.a*obj.c);
            x(1) = (-obj.b + discriminant)/(2*obj.a);
            x(2) = (-obj.b - discriminant)/(2*obj.a);
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

现在假设我运行以下命令:

>>quadcalc = MyClass;
>>quadcalc.a = 1;
>>quadcalc.b = 4;
>>quadcalc.c = 4; 
Run Code Online (Sandbox Code Playgroud)

此时,quadcalc.x = [-2 -2].假设我quadcalc.x多次调用而不调整其他属性,即quadcalc.x = [-2 -2]每次我要求这个属性.被quadcalc.x 重新计算每一次,还是会只是"记住" [-2 -2]

oop matlab

8
推荐指数
1
解决办法
3454
查看次数

如何超时可能挂起的分叉进程?

我正在编写一个Perl脚本,它将编写一些输入并将这些输入发送到外部程序.这个程序有一个很小但非零的机会,我想把它计时:

my $pid = fork;
if ($pid > 0){
    eval{
        local $SIG{ALRM} = sub { die "TIMEOUT!"};
        alarm $num_secs_to_timeout;
        waitpid($pid, 0);
        alarm 0;
    };
}
elsif ($pid == 0){
    exec('echo blahblah | program_of_interest');
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

现在,在$ num_secs_to_timeout之后,program_of_interest仍然存在.我试图在匿名子程序中杀死它,$SIG{ALRM}如下所示:

local $SIG{ALRM} = sub{kill 9, $pid; die "TIMEOUT!"}
Run Code Online (Sandbox Code Playgroud)

但这没有做任何事情.program_of_interest仍然存在.我如何杀死这个过程?

perl fork alarm

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

为什么bash的流控制结构不一致?

我正在自学bash,并使用学习bash Shell这样做.

我注意到在流控制中我们定义了一个if/else语句:

if [ statement_is_true ]; then
    # do stuff here
elif [ some_other_statement]; then
    # other thing
else
    # if all else fails
fi
Run Code Online (Sandbox Code Playgroud)

以及一个案例陈述:

case $expr in
    case1 )
        ;;
    case2 )
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

但是for循环可能被定义为

for i in $list;
do
    # something cool with the various $i
done
Run Code Online (Sandbox Code Playgroud)

和一个循环作为

while [ condition ]; do
    # something that loops
done
Run Code Online (Sandbox Code Playgroud)

为什么结束for,while以及until循环标注done,而不是rof,elihwlitnu分别,喜欢if/fi …

bash

7
推荐指数
1
解决办法
729
查看次数

Emacs - 当我进入主模式时如何自动进入次模式?

对于emacs,我有点像新手.我知道.emacs文件,但是对于做一些比基本内容更先进的事情一点都不知道.

每当我进入乳胶模式时,我也想自动打开flyspell模式,reftex模式,自动填充模式,并将fill-column设置为120.如何编辑我的.emacs文件来执行此操作?

谢谢!

emacs latex

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

MATLAB - 动态更新线的最佳方法是处理'XData和YData?

我正在收集数据并实时绘制数据.数据由运动捕捉系统产生.我有一个类DynamicDataset只是一个2列矩阵的包装器(虽然它比那更细致),并且添加了新数据的事件通知器; 另一个类DynamicPlotter,它监听数据添加事件并动态更新绘图.适当的代码段:

classdef DynamicDataset < handle
    properties
        newestData = [];
        data = []
    end
    events
        DataAdded
    end
    methods
        function append(obj, val)
            obj.data(end+1,:) = val;
            obj.newestData = val;
            notify(obj, 'DataAdded');
        end
    end
end

classdef DynamicPlotter < dynamicprops
    properties
        FH %# figure handle
        AH %# axes handle
        LH %# array of line handles - may have multiple lines on the plot

        dynProps = {} %# cell array of dynamic property names - 
                      %# use to access individual datasets …
Run Code Online (Sandbox Code Playgroud)

matlab figures

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

MATLAB - 为什么抱怨classdef对象的@ -folders?

我已经写了一段时间的OOP MATLAB代码了.但是,我现在第一次在Windows机器上运行MATLAB代码.

我有以下代码:

classdef myClass < handle
    properties
        i
    end

    methods
        function obj = myClass()
            obj.i = 0;
        end

        function say(obj)
            obj.i = obj.i + 1;
            fprintf('This is time #%i you invoked me!\n', obj.i);
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

看起来很无害.我尝试实例化一个对象,我得到了这个:

>> m = myClass;
Error using myClass
Error: File: myClass.m Line: 1 Column: 10
A class definition must be an "@" directory.
Run Code Online (Sandbox Code Playgroud)

我在编写OOP MATLAB代码的过程中从未使用@ -folder.我的理解是,如果类方法与classdef文件分开编写(我的不是),或者它是使用旧式的MATLAB类语法(我的不是),这是必需的.

我想我知道这笔交易是什么,我想知道是否有解决方法:我的工作目录是形式

C:\Users\DangKhoa@MyCompany.com\Documents\MATLAB
Run Code Online (Sandbox Code Playgroud)

@抛出MATLAB并让计算机认为我在@ -folder中?如果是,是否有解决方法(除了在我的计算机上创建一个新用户,显然 - 这可能是不可行的)?如果没有,发生了什么?

oop matlab

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

对性能,对象的单元阵列或异构数组有什么好处?

假设我有一些课程foo < handle,而且bar < foo,baz < foo也许qux < foo.我可以通过几种方式存储这些对象的数组:

  • 作为单元格数组: A = {foo bar baz qux} % A(1) would be a cell, A{1} gives me a foo object

  • 从R2011a开始,我可以制作foo <matlab.mixin.Heterogeneous,然后直接构建一个数组:A = [foo bar baz qux] % A(1) directly gives me a foo object

我从维护的角度来看,最好使用第二种方法而不是第一种方法,这样就消除了如何访问的模糊性A.也就是说,当我们需要取消引用单元格数组的元素(单元格A(1)foo对象A{1},它们居住在内部A(1)).

但是使用一种语法与另一种语法有什么样的内存或性能损失(或好处)?

oop performance matlab heterogeneous

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

这个设计模式是否有名称(动态环绕另一个类)?

假设我有一个类uicontrolWrapper,它是a的包装器uicontrol(但不是它的子类).这些uicontrol东西被保存在私人财产中uicontrolWrapper.基本上,我希望能够set/get对包装器进行操作,并且调用将会进入uicontrol.

我能做到这一点:

classdef uicontrolWrapper < handle
    properties (Access = private)
        uic
    end
    properties (Dependent)
        Style
        String
        Value
        ...
    end
    methods
        function set.Style(obj, val)
            obj.uic.Style = val;
        end
        function val = get.Style(obj)
            val = obj.uic.Style;
        end
        ...
    end
Run Code Online (Sandbox Code Playgroud)

但像这样的硬编码显然非常难看.

或者,我可以根据我想要包装的内容动态生成属性:

classdef uicontrolWrapper < dynamicprops
    properties (Access = private)
        uic
    end
    methods
        function obj = uicontrolWrapper(hObj)
            obj.uic = hObj;
            cellfun(@(prop) obj.createProperty(prop, fields(get(hObj));
        end
        function createProperty(obj, prop)
            p = …
Run Code Online (Sandbox Code Playgroud)

oop matlab design-patterns

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

MATLAB - 列出仅由子类提供的所有方法?

我有一个继承自多个超类的类,我想获得该类具有的方法.天真地使用methods()我正在使用的类中的返回方法以及超类方法,但我对超类方法不感兴趣.

知道怎么做吗?我在MATLAB文档中找不到任何内容.

谢谢!

oop matlab

5
推荐指数
1
解决办法
408
查看次数

MATLAB - 在结构的字段上设置/获取访问权限?

假设我有以下课程:

classdef myClass
    properties
        Globals = struct(...
            'G1', 1,     ...
            'G2', 2      ...
        );
    end
    methods
         % methods go here
    end
end
Run Code Online (Sandbox Code Playgroud)

我使用struct,因为还有其他属性是结构.

有没有办法为结构域提供一个setter?天真地提供

function obj = set.Globals.G1(obj, val)
    obj.Globals.G1 = val; % for example
end
Run Code Online (Sandbox Code Playgroud)

不起作用.

oop matlab

5
推荐指数
1
解决办法
2426
查看次数

标签 统计

matlab ×7

oop ×6

alarm ×1

bash ×1

design-patterns ×1

emacs ×1

figures ×1

fork ×1

heterogeneous ×1

latex ×1

performance ×1

perl ×1