2015-11-22 17 views
0

在Matlab中,我一般做的事情,如evaluatiing常數函數Matlab的

f = @(x) x.^2; 
xx = 0:.1:1; 
ff = f(xx); 

所以f是一個功能手柄和兩個XX和FF是1x11載體。

但是,如果由於某種原因,我需要像這樣定義

f = @(x) 1; 

我的功能手柄f和不改變代碼XX和FF,然後XX將仍然是一個載體,但FF不會:這將是一個雙倍的。

這當然很煩人,因爲我的代碼的續集假定ff是一個11x1向量,所以我需要在f發生常量時更改我的代碼。

所以我的第一個問題是,我的代碼是否聽起來開始。 如果是這樣,我該怎麼做才能使它在「恆定f」的情況下工作? 如果不是,我應該如何重寫它?

這是坦誠地相似 matlab constant anonymous function returns only one value instead of an array 但我不能在該線程中找到答案。

+1

難道你不需要'f = @(x)ones(size(x));'? –

回答

2

您鏈接會提供所需的結果回答的微小修改:

f = @(x) ones(size(x)); 

f(x)大小將輸入x的大小相匹配,因爲f輸出那些的向量的大小相同x

+0

謝謝。這有效,但不是有另一種方式嗎? – Tom

+1

@Tom爲什麼要這樣?你想讓你的函數返回一個與'x'大小相同但只包含值1的向量。*完全是*'ones(size(x))'。 –

+1

@Tom我不明白你爲什麼需要別的東西。 'ones(size(x))'是對原始方法的推廣,因爲在MATLAB中'1'實際上等於'ones(1)'。 – mikkola

-1

我找到了一個更好的方法來做到這一點。這顯示了Matlab是多麼愚蠢:

f = @(x) (x-x)+1 

試試吧!