2017-04-14 181 views
0

我正在使用matlab,並且我已經加載了一個包含變量date,pH和pressure_dbar(所有向量)的文件。我正在嘗試編寫一個函數來接收這些變量,以及最大和最小的pressure_dbar變量,並返回兩個新的向量:newDate和newpH。如果日期和pH值> =最小值並且最大值爲<,我想用日期和pH數據填充新的載體。下面是我的代碼,但是我在newDate和newpH上收到錯誤「未定義的函數或變量」。我試圖用newDate = [];在變量之外定義它們。和newpH = [];但那也不成功。我也嘗試了遍歷向量的不同方式,但也沒有任何東西。任何提示將不勝感激,謝謝!未定義函數或變量向量

minimum = min(pressure_dbar); 
maximum = max(pressure_dbar); 

function [newDate, newpH] = oceanpHdepth(date, pH, pressure_dbar, minimum, maximum) 

for i = 1:length(date) 
    for j = 1:length(pH) 
     if (ge(pressure_dbar, minimum) && lt(pressure_dbar, maximum)) 
       newDate = date(i); 
       newpH = pH(j);  
     end 
    end 
end 

end 
+0

條件'(GE(pressure_dbar,最小值)&& LT(pressure_dbar,最大值))'決不是真實的 – Suever

+0

@Suever我最初把它當作(pressure_dbar> = minimum)&&(pressure_dbar btoohey

回答

2

的誤差可能是由於環的從未被達成的內部,並且因此newDatenewpH從不功能的內部實際上限定。這是因爲你沒有實際使用ij索引來訪問單一元素的pressure_dbar,而是你每次它必然有一些false值時間和if語句比較整個陣列隨後將發生的事情總是評估爲假。

真的,它應該是

if (ge(pressure_dbar(i), minimum) && lt(pressure_dbar(i), maximum)) 

而且,你是不是內部循環的結果存儲到一個數組,因爲在所有你覆蓋值每次newpHnewDate。其次,你最好只是用邏輯索引產生newDatenewPH

function [newDate, newpH] = oceanpHdepth(date, pH, pressure_dbar, minimum, maximum) 
    mask = pressure_dbar >= minimum & pressure_dbar < maximum; 
    newDate = date(mask); 
    newpH = pH(mask); 
end 
+0

這實際上很棒,我以前從未使用過面具。但我確實希望這樣做,以便當日期和相應的pH值都在最小值和最大值內時。目前,這只是打印出與我的初始向量相同數量的值。 有沒有辦法同時做到這一點? – btoohey

+0

@btoohey那麼在你最初的代碼中,你出於某種原因比較了'pressure_dbar'。我會用你提到的代碼更新它 – Suever

+0

嗯,我想要比較它。對不起,我沒有解釋清楚。你的代碼對我來說似乎應該可以用於我想要的,但它實際上並沒有從初始向量中刪除任何值。當相應的pressure_dbar值在最小值和最大值範圍內時,我只想將矢量中的日期和pH數據轉換爲新的矢量,這就是您的代碼所做的。所以我不確定這個問題。非常感謝答覆,但。 – btoohey