我一再想要应用一个函数,使用过去的输出作为新输入.为了便于阅读(我从数学的角度来看,而不是程序员的观点),我想将它定义为一个简单的匿名函数而不是一个完整的函数块.所以,而不是像
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)
这有可能吗?
考虑以下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在命令窗口中显示变量的方式,或强制科学记数法)
对于一个项目,我有一个对象列表(在我的示例代码中,是一个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)