2016-09-15 7 views
1

私はあるエンジンスピードとスロットルポジションでAirFuelRatio値の行列を得ました。 (例えば、AFRは2500rpmで60%のスロットルで14である) マトリックスは今では25x10で、エンジン速度は1200〜6000rpmの範囲で200rpm、スロットルの範囲は0.1〜0.1である。MATLABで行列のデータを素早く簡単にマージして平均化する方法は?

私は新しい値を測定したと言います。 2138rpmでAFRが13.5、スロットルが74,3%の場合、どのようにマージするのですか?行列の最も近い値は、2000または2200rpmと70または80%のスロットルです。またi 新しいデータをに変更すると、古いデータがに置き換えられます。行列をこの値にして、新しい値を考慮してその値を調整するにはどうすればよいですか?私はちょうど3 rpmで15.5のAFR値を測定 2 4 6 8 14 16 18 20

簡体私は、次のx軸の値(一番上の行)と(下)の1x4行列を有します。 AFRマトリックスを補間すると、15を得ることになるので、この値は通常とは異なります。 私は行列にこのデータをとり、それに他の変数を調整する必要があります。より多くのデータをより信頼性高く正確に配置できるようにすべてを平均化します。したがって、単純化された場合、行列は次のようになります。 2 4 6 8 14.3 16.3 18.2 20.1 したがって、古いデータと新しいデータの平均です。私は連結についてのドキュメントを読んだが、私は私の問題がその機能で解決できないと信じている。

編集:私の質問を明確にするために、次の視覚的明確化。 enter image description here 'マトリックス'は、新しいデータポイントが追加される間に5ポイントの同じサイズを保持します。新しいデータが考慮され、それに応じて行列が調整されます。これが私が達成しようとしていることです。より多くの散乱データが得られるほど、マトリックスはより正確になります。これは、単純なマージ/平均の問題ではありません

乾杯

答えて

2

(とはいこの場合、緑色の点は、外れ値になりますが、それは私の場合を説明します)。私はあなたが前提を単純化しない限り、これを行うための迅速な方法はないと思います。あなたが望むのは、根底にある傾向の統計的推測です。この問題を解決するにはガウスプロセス回帰を使用することをお勧めします。 RasmussenとWilliamsのMATLABツールボックスはGPMLと呼ばれています。 http://www.gaussianprocess.org/gpml/

+0

これは、私が欲しいものを行うことができるようです。散乱データを平均化して1つのマトリックスにする。私はそれを使うことができると思うが、それはかなり複雑に見え、私はまだ教育のエンジニアである。私はそれを調べて、私のためにうまくいくなら答えとしてあなたの返答をマークします.thx – Bart

2

これは、私にとってデータフィッティングのタスクのように聞こえます。あなたが示唆しているのは、最良の線形フィットを得るための一連の測定値があることです。データの表を作成する代わりに、必要なものは値の表であり、次にそれらの値に最適なものを見つけることができます。したがって、たとえば、記録されたすべての値を持つ行列Aを作成することができます。始まるのをしてみましょう:

A=[2,14;3,15.5;4,16;6,18;8,20]; 

私は今

(その値は1とxのセットがあり、この例では、それが線形であると仮定することができますこれは、)私のカーブフィッティングへの入力のためのポイントの行列を必要としますあなたが行は、xの値のために通り抜けることをポイントにしたい場合

B\A(:,2) 

か、を:

B=[ones(size(A,1),1), A(:,1)]; 

我々は使用して(それがy軸と勾配をカット)線形フィットパラメータを見つけることができます:

B*(B\A(:,2)) 

これがポイントになり:これらの点を通る最良適合線を表し

2,14.1897 3,15.1552 4,16.1207 6,18.0517 8,19.9828 

これを手動で多項式近似に拡張したり、Matlab関数polyfitを使用することができます。手動でプロセスを拡張するには、修正されたBマトリックスを使用する必要があります。最後の行に指定された点集合だけを生成することもできます。完全なコードは、次のようになります。

% Original measurements - could be read in from a file, 
% but for this example we will set it to a matrix 
% Note that not all tabulated values need to be present 
A=[2,14; 3,15.5; 4,16; 5,17; 8,20]; 

% Now create the polynomial values of x corresponding to 
% the data points. Choosing a second order polynomial... 
B=[ones(size(A,1),1), A(:,1), A(:,1).^2]; 

% Find the polynomial coefficients for the best fit curve 
coeffs=B\A(:,2); 

% Now generate a table of values at specific points 
% First define the x-values 
tabinds = 2:2:8; 
% Then generate the polynomial values of x 
tabpolys=[ones(length(tabinds),1), tabinds', (tabinds').^2]; 
% Finally, multiply by the coefficients found 
curve_table = [tabinds', tabpolys*coeffs]; 
% and display the results 
disp(curve_table); 
+0

これは既存の行列のフィルタリングされたバージョンを作成します。それとも、曲線にフィットします。それは私の目的が何ではない。私は行列にデータを追加する必要があるので、行列の大きさは同じままですが、新しいデータで平均します。 – Bart

+1

マトリックスにデータを追加する場合、どのように同じサイズのままになるのかわかりません! 2,4,6,8などの値を表にしたいが、基礎となるデータによってこれらの値を調整できるようにするには、基本的に展開された行列に適合しているが、最後の行では何をすべきか係数をBで乗算する代わりに、 'tabvals = [ones(1,4)、(2:2:8) '];' tabvals *(B \ A(:、2) ) 'を使用して、指定した正規のグリッドの集計値のみを取得します。これはあなたの後のことですか? – Dave

+1

あなたが保存したものがすべて最終的な表の値であれば、いくつか問題があると付け加えておきます。新しい価値が生まれたときにどのようにテーブルを調整するかは、どのように知っていますか?あなたの例では、なぜ単にすべての値に0.5を加えなかったのですか?外れ値が1つある場合はどうなりますが、残りのデータはすべて良好です。データを格納せずに、または少なくともそのデータに関する統計情報を格納しないと、実際にはテーブルを調整するための基礎が全くありません。そのため、測定データの保存を提案してから、そのデータに最適な線形近似を行うことを提案しています。 – Dave

関連する問題