2016-11-05 83 views
0

我想寫一個函數,該函數接受任意數量值的數組,並在新數組中返回其更改值。接受一個具有n個元素的數組,並將它們返回爲一個數組 - Matlab

function zArray = y(xArray) 
    zArray = []; 
    for x = 1:size(xArray,2) 
     if x >= -2 && x < -1 
      z = ln(x + 2); 
     elseif x >= -1 && x < 0 
      z = (x + 1).^2; 
     elseif x >= 0 && x <= 2 
      z = (x + 1)/(x.^2 + 1); 
     else 
      z = -10 
     end 
     zArray(end + 1) = z; 
    end 
end 

然後調用與功能:

[z1, z2, z3] = y([0, 1, -1]) 

這給了我下面的輸出和消息:

z1 = 

    1.00000 0.60000 -10.00000 

error: element number 2 undefined in return list 

我是新來的Matlab和我不知道如何Matlab的for循環和陣列工作。如果我理解正確,我不會正確地將更改後的值添加到應該保持輸出值的數組中,因此無法以這種方式讀取它們,但如果我沒有弄錯,array(end + 1) = z會將元素z附加到數組的末尾陣列。

我是否犯了一個以上的錯誤?請指出其中的任何一個,因爲我有麻煩的理解Matlab語法,即使我知道如何編程一些其他語言。

+0

你想從z陣列的後面加改變的值? – Bhoke

+0

您的第一個和第二個'if'和'elseif'語句在這裏是多餘的。如果你解釋要做什麼,我可以幫你 – Bhoke

+0

我想在最後添加它們,所以它們的順序與更改它們之前的順序相同。我想從[x1,x2,...,xn]中實現輸出[f(x1),f(x2),...,f(xn)],其中f是一個區間函數。 – Larisa

回答

1

我覺得你的願望以後的事,但你感到困惑與語法:

function zArray = y(xArray) 
zArray = zeros(size(xArray)); 

for x = 1:size(xArray,2) 
    xVal = xArray(x); 
    if xVal >= -2 && xVal < -1 
     zArray(x) = log(xVal + 2); 
    elseif xVal >= -1 && xVal < 0 
     zArray(x) = (xVal + 1).^2; 
    elseif xVal >= 0 && xVal <= 2 
     zArray(x) = (xVal + 1)/(xVal.^2 + 1); 
    else 
     zArray(x) = -10; 
    end 
end 
end 
相關問題