• ベストアンサー

Matlabで複数のデータから最大値と次に大きい値を探す方法

Matlabで複数のデータから最大値と次に大きい値を探す方法 現在、Matlabで用意された関数xcorrを使い、相関関数を求め、 出力された値の最大値と、次に大きい値との差を求めようと、mファイルを作ろうとしたのですが、 まったく記述方法が浮かびません。どなたか、詳しい方いらっしゃいましたら教えてください。 どうかよろしくお願いします。

  • yupeo
  • お礼率5% (1/19)

質問者が選んだベストアンサー

  • ベストアンサー
  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

降順にsortして1番目と2番目の差をとればいいのでは。 それから、ここはC/C++カテゴリですけど。

関連するQ&A

  • データの値の近いものをグルーピングする方法について

    以下アルゴリズムについて考えております。 複数のデータの内、差が±1以内のものをグループ分けする。 ただし、複数の候補がある場合は値の近い方をグループとする。 また、差がまったく同じであった場合は番号の若いほうのグループとする。 例1 ・入力 data1=1 data2=1.5 data3=2 data4=5 data5=6 ・出力 グループ1:1,2,3 グループ2:4,5 例2 ・入力 data1=1 data2=1.3 data3=2.3 data4=5 data5=6 ・出力 グループ1:1,2 グループ3:3 グループ2:4,5 例3 ・入力 data1=1 data2=2 data3=3 data4=4 data5=6 ・出力 グループ1:1,2 グループ2:3,4 グループ3:5 このような結果が得られるプログラムを作成中です。 簡単なグループ分けならできるのですが、候補が複数でてきてしまう場合におかしく なってしまいます。 以下に書いてあるものが初めに思いついた方法の概要です。 このプログラムでは適切なグループ分けが出来ませんでした。 現在はデータの差が±1以内ならばフラグを立てて後でグループ分けをするといった 方法でやっておりますがどうも上手くいきません。 そのため、今回のプログラムについて教えて頂きたく質問をさせて頂きました。 よろしくお願いします。 以下、初めに思いついた方法の概要です。 double in_data[] //データの値 double data[][] //データの差 group[]//グループ番号    //例えばgroup[3]=2だったら、データ3はグループ2に入る //data1-data2 //data1-data3 //・・・ //と計算をしていくforループ for(n=0; n<=i; n++){   for(m=n+1; m<i ;m++){     data[n][m]=fabs(in_data[n]-in_data[m]);     if(data[n][m]<=1){       group[n]= num;  //グループ番号振り分け       group[m]= num;       num++;     }   } }

  • MATLAB でのデータ保存について

    MATLAB でシミュレーションを行なっているのですが データの保存方法がいまいちわかりません. グラフに出力してグラフを保存する事はできるのですが データを数値としても保存しておきたいので. save [ファイル名] [変数名] -ascii としても見やすいデータではないので なにかいいデータの保存方法はありませんか? データの利用法は OpenGL によるアニメーションのためです. よろしくお願いします.

  • matlabで、平均値を求める方法を教えて下さい。

    matlabで、複数のファイルにある数値の平均値を求める方法を教えてください。 sample1.nc, sample4.nc, sample7.nc の3つのファイルがあり、 それぞれに3つのデータが含まれています。 sample1.ncには data1,data2,data3 sample4.ncには data4,data5,data6 sample7.ncには data7,data8,data9 以上の計9個のdataがあります。 ここで例えばdataにはある人の身長が書かれているとします。 data1=147cm,data2=150cm,data3=140cm,・・・ など。 この場合に、data1からdata9の9個の数値(身長)の平均値を matlabを用いて求めるプログラムを教えてください。

  • MATLABの使い方に関していくつか質問

    MATLABの使い方に関していくつか質問をお願い致します。 ・MATLABはスクリプトと関数を別のmファイルに記述して保存しますが、 小さな関数が増えてくると関数をいちいち開くのが大変です。 一つのmファイルにスクリプトと関数、あるいは複数の関数を記述して保存することは可能でしょうか? ・プログラムを更新するごとにバックアップを取ることで、何か不具合があっても元に戻せるようにしているのですが MATLABは複数のファイルに内容が書かれてあるため、フォルダ単位でバックアップを取る必要があります。 これら複数のmファイルを一つのプロジェクトファイルにまとめて保存することは可能でしょうか? ・エディターを開いた状態でメインウインドウをクリックすると エディターが隠れてしまいますが、エディターを常に前面表示して、隠れないようにすることは可能でしょうか? ・セミコロン無しでプログラムを書くとコマンドライン上でそれらの値が表示されます。 このとき、 xxx = 12345 のようにイコールの後に二回改行が自動的に入って表示されるのですが この改行を無くして xxx = 12345 のように表示するように変更することは可能でしょうか? よろしくお願いいたします。

  • 複数のチェックボックスの値を書き込む方法

    複数行のチェックボックスの値をそのまま 書き込みたいのですが・・・ .datファイル↓ 1234,1 5678,0  3456,1 7890,0 上記をHTMLとして出力。 1→checkedで出力されるとします。 チェックを入れて、 7890,0 ↓ 7890,1 にするとそれを1行として保存されるようにしたい です。 チェックボックスは同じ名前のためform('check') などで値を取り出したとしても最後の値しか 値を取り出せないでしょう。 画面に複数出た行を全部.datファイルに書き込むには どうすればよいのでしょうか? http://www.futomi.com/lecture/form/cgi-pm.html ↑を参照しましたが、チェックの値は@配列で 取れるような気がしましたが、1行を書き込む 方法がわからないので詳しく教えていただければ 幸いです。 言葉だけよりソースがあるとわかりやすいですm(__)m

    • ベストアンサー
    • Perl
  • 相関係数から別の値を導く方法ってありますか?

    今、2つのグラフのデータが A:69,105,42,23 B:133,181,127,59 となっていて 2つのグラフA,Bの相関係数を求めたら0.93でした。 AとBのグラフが似ているので、Aに新たなデータ(数値)が追加されたときに、 Bには相関が保たれるような値が追加されるはず!」ということを前提に Bに追加される値を求める方法を知りたいんですが、 求める方法をご存知の方がいらっしゃったら教えてください。 プログラムを書いて相関係数が1に近づくまで計算させて、閾値に達したら、 その時の入力値を出力するという方法もあるようですが、 やはりそれでしか求められないでしょうか? 式変形だけでは難しいですか?

  • MATLABの関数で配列の要素を返す方法

    現在MATLABについて勉強しているのですが、関数(function)を用いて配列の値を返す方法が分からず困っています。 関数で定義した配列A(m行n列)を用いて、メイン関数で配列の要素Aijを呼び出す、ということがしたいのです。 function y=Func(x)等で1変数や他変数の入出力の仕方は分かります。 どなたか初心者でも理解できるようご教授お願い致します。

  • matlabでファイルをn行目から変数に読み込む方法

    matlabでファイルをn行目から読み込む方法がわかりません。 具体的にはファイルの上9行に説明文が入っていて、10行目からtab区切りでn×m行列のデータが入っているファイルがあって、その中のn×m行列のデータを変数に代入したいのですが、その方法がわかりません。 loadで読み込もうとしたのですが上手くできません。もし読み込む方法があるのなら誰か教えてください。

  • EXCELで、ある値で検索後、最大値を求める方法について

    EXCELで、ある値での最大値を求める方法がありますでしょうか?数日考えておりましたが結論はでませんでした。 どなたかヒントだけでも結構ですのでご教授頂けないでしょうか? 下記の場合、   A  B  C  D  E  F  G 1       あ  い         2    1  2  2.1    9.6 3    2  3  5.4    5.6    4    3  4  8.2    5.4    5    4  5  1.9    8.2    6    5  1  7.8    4.5    7    6  1  9.6     .    8    7  2  5.6     .    9    8  5  4.5     .    10    9  3  4.8        .    .  .   .         .    .  .   .         .    .  .   .         3000以上 B列の数値をもとにC列の中で検索させ、いくつか該当するとき、その右側のD列の最大値を求めることができるかどうか。 たとえば、B列の1の場合、C列の中で1が2箇所あり、その右側であるD列の値は7.8と9.6となります。そのうちの最大値は9.6ですので、F列の同行に答えとなる値が入ります。そのようなF列の関数等は無いでしょうか? 当方でもいろいろ調べ、DMAX関数が使えそうですが、B列の値が縦(列)となってる場合はうまくいきませんでした。もしB列の値が、縦(列)ではなく横(行)である場合は、OFFSET関数などと併せてうまくいきますが、最大256列(EXCELの制限)までしか扱えません。 何か方法があればヒントだけでも結構ですのでよろしくお願いします。

  • Matlabでの図の最大化の方法

    M-ファイルに図の最大化の命令を記述して,自動的に図を最大化させてからpng形式で保存したいのですが,この方法が分からず困っています. createfigure_xyzで三次元の図を描いています. %Maximizing the figureの位置に図の最大化の命令を記述したいと思っています. コードは以下の通りです. /////////////pg081113.m////////////////////// clear all; for NUMBERS=1:5 X(NUMBERS).mat(:,:)=load(sprintf('Result%i.csv',NUMBERS));% X(1).mat X(NUMBERS).x=X(NUMBERS).mat(:,1);% X(1).x X(NUMBERS).y=X(NUMBERS).mat(:,2);% X(1).y X(NUMBERS).z=X(NUMBERS).mat(:,3);% X(1).z createfigure_xyz(X(NUMBERS).x,X(NUMBERS).y,X(NUMBERS).z); %Maximizing the figure print('-dpng', sprintf('Result%i',NUMBERS)); end /////////////////////////////////////////// どなたかご教授をよろしくお願いいたします.