2013-03-05 72 views
-1

我明白,如果我想生成的Y = SIN(2X)y值我可以這樣做:Matlab的函數表示

y = sin(0:.01:2*2); 

但是,如果我想生成值,其中Y = 0,除非x是是1或sqrt(2)的倍數,y = 1時,我將如何處理這個問題?我必須圍繞這些值創建一個窗口,並希望步長足夠小以捕獲它嗎?謝謝。

+0

我無法找到您命名的各個特定點之間的任何關聯。 sqrt(2)作爲罪的輸入?然而,一般來說,你永遠不能依賴浮點數來給你一個精確的等式,所以如果你試圖解決y = 0或者其他什麼的方程,不要這樣做。最後,你的語法不會犯罪(2x)。運算符優先級使其成爲sin(0:0.01:4)。首先生成x並插入。 – Peter 2013-03-05 16:17:27

+0

對不起,不清楚。我使用sin(2x)作爲我如何理解如何生成給定函數的值的例子,但是如果函數沒有很好地表示,我怎麼能生成這些值。例如,對於N中的n和其他地方的x = 0,如果x = n(sqrt(2)),則函數f(x)= 1。謝謝。 – BenM 2013-03-05 16:43:01

回答

1

使用邏輯條件。例如,從一些y(x)開始,然後y(y==1)將生成這個條件的y值和其他地方的零。對於更一般的條件,你可以使用modismember等等。你將會遇到的另一個問題是將整數與浮點數匹配,你必須先循環,然後使用上面提到的函數。

+0

這裏的問題是我爲y生成的數據取決於我的輸入x。我可以爲條件使用二維矢量嗎?假設我有一些'[X,Y(x)]',那麼使用條件語句來生成滿足條件的y值並讓其他人獨立?謝謝。 – BenM 2013-03-05 17:52:41

0

好吧,我明白了。再說一次,浮點算術不會平等,所以你的例子將不起作用。此外,由於您正在以謹慎的間隔抽樣函數,因此很難捕獲delta函數。所以不要這樣做。相反,如果你正在尋找標準分段函數,這裏的想法:

x = 0:.01:2; 
x1_locations = x < 1; 
x2_locations = ~x; 
y = zeros(size(x)); 
y(x1_locations) = sin(2*x(x1_locations)); 
y(x2_locations) = cos(3*x(x2_locations)); 

再次,這不會,比如說工作的原因,x1_locations = (floor(x/sqrt(2)) == x/sqrt(2))是,你永遠也不會打的確切x的位置將顯示此內容,即使您已這樣做,浮點表示中的舍入誤差仍可能使您錯過位置。如果您對近似值沒有問題,請使用您感興趣的值的最大絕對差值。

+0

據我所知,我在間隔時間間隔抽樣間隔,所以我不可能使用平等,但我想要做的事實質上是一個週期性克羅內克三角函數。但我認爲使用帶有條件的最大絕對差異(給我一個小窗口)將爲我做到這一點。 – BenM 2013-03-05 17:55:42