小编San*_*ses的帖子

是否可以在MATLAB中使用递归匿名函数?

我一再想要应用一个函数,使用过去的输出作为新输入.为了便于阅读(我从数学的角度来看,而不是程序员的观点),我想将它定义为一个简单的匿名函数而不是一个完整的函数块.所以,而不是像

function f=myfun(x,n)
    if n>1
        f=myfun(myfun(x,n-1),1);
    else
        f=expression(x);
    end
end
Run Code Online (Sandbox Code Playgroud)

我想能写

f=@(x,n) ????
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

matlab functional-programming anonymous-function

3
推荐指数
1
解决办法
821
查看次数

是否可以用科学记数法标记等高线图?

考虑以下MWE来创建等高线图:

close all
[X,Y]=meshgrid(0:100,0:100);
Z=(X+Y.^2)*1e10;
[C,h]=contour(X,Y,Z);
h.ShowText='on';
Run Code Online (Sandbox Code Playgroud)

但是,标签始终显示轮廓的完整整数表示法.有没有合理的方法来改变这种行为?(比如,MATLAB在命令窗口中显示变量的方式,或强制科学记数法)

在此输入图像描述

matlab plot contour

3
推荐指数
1
解决办法
506
查看次数

c ++使用std :: list隐式复制*this

对于一个项目,我有一个对象列表(在我的示例代码中,是一个Garden).每个花园都包含一个植物,它引用了它所在的花园.这在制作单个花园时非常有效,但是当我创建一个花园对象的std ::列表时,突然在我不知道的地方创建了一个副本,我不知道如何解决它.对象如下:

struct Garden; //Forward declaration
struct Plant {
    Plant(Garden & myGarden) : theGarden(myGarden) { }; //Constructor
    Garden & theGarden; //reference to garden this Plant is in
};
struct Garden {
    Garden(int size) :  thePlant(*this), size(size) { }; //Constructor
    Plant thePlant; //Plant contained in this Garden
    int size;       //Size of this garden
};
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在,我可以创建一个独立的花园,或者将其放入列表中.预期的行为是,如果我改变'size'变量,它会随处变化,也会变化theGarden.但是,在列表中,它只会在"原始"中更改Garden,而不会在引用中更改theGarden

int main() {
    //Works
    Garden oneGarden(1);
    std::cout << "Expected: 1 1, result: "
            << oneGarden.size << " "
            << …
Run Code Online (Sandbox Code Playgroud)

c++ oop reference list std

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