2017-04-14 13 views
0

私はmatlabを使用していますが、変数date、pH、およびpressure_dbar(すべてのベクトル)を含むファイルを読み込んでいます。私は、これらの変数と最大と最小のpressure_dbar変数を取り、2つの新しいベクトル、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、最大))'最初にI @Suever – Suever

+0

真にすることはできませんそれを(pressure_dbar> = minimum)&&(pressure_dbar btoohey

答えて

2

誤差はループの内部に達していないので、newDatenewpHが実際に関数の中で定義されることはありませんされないと思われます。その後、う、あなたが実際にpressure_dbar単一要素にアクセスするためにijインデックスを使用していないし、代わりにあなたは配列全体に一部false値とif文を持っているにバインドされるたびに比較しているので、これが起こっています常にfalseに評価されます。

本当に、それは、また、

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

関連する問題