ある試験結果の行列Aのデータを列ごとに読み取って計算し、読み取った列の成分数を返し、次の列、次の列へと読み込ませる方法
Show older comments
ある試験を行って得た試験結果A=7000×70 double(この試験結果の行と列の数は試験ごとに変わるので、できれば判別してデータを取ってくるプログラムを組みたいです)だったとします。
この時1列ごと(A(1:7000,1)、A(1:7000,2)・・・A(1:7000,70))にある計算のプログラムを通して、その列ごとでプログラムを通したあとの結果を求め最終的にAの列ごとにプログラムを通した結果B(7000×70)の行列を求めたいです。
実際に繰り返し行いたい部分を下記に示させていただきます。
E1=A(1:7000,1);%試験結果Aの1列を抽出%
Ey1 = polyfit(X,E1,3);%3次式の近似式の各係数行列Ey1を導出(以降は行いたい計算過程)%
Eyy1=Ey1(1,4);%p行列の最後の切片要素を取り出す%
Eyyy1=Eyy1+1;%切片に+1を加える%
Eyyyy1=[Ey1(1,1) Ey1(1,2) Ey1(1,3) Eyyy1];%pの係数行列から切片に+1加えた新しい係数行列Eyyyy1を作る%
EY1 = polyval(Eyyyy1,X);%Eyyyy1行列を使ってXに対する近似式EY1を導出%
REY1=E1./EY1;%実際の試験結果E1を近似式EY1で成分ごとに割る(自分が欲しいプログラムを通した結果Bの1列目)%
上記の流れを繰り返し試験結果Aの列の数、計算を繰り返し行い、最終的には行列の成分の数が元の試験結果と同じ数求まるプログラムを組みたいです。
よい方法をご存じの方がいましたらぜひ教えていただけないでしょうか。
よろしくお願いします。
8 Comments
Kenta
on 6 Feb 2020
こんにちは、「この試験結果の行と列の数は試験ごとに変わるので、できれば判別してデータを取ってくるプログラムを組みたいです」というところは
[h w]=size(A);
で解決しそうです。今回の例でいう、h,wにはそれぞれ7000、70の値が入ります。
そのあとの繰り返しは、
for i=1:w
%行いたい計算
E1=A(1:h,i);%試験結果Aのi列を抽出%
Ey1 = polyfit(X,E1,3);%3次式の近似式の各係数行列Ey1を導出(以降は行いたい計算過程)%
Eyy1=Ey1(1,4);%p行列の最後の切片要素を取り出す%
Eyyy1=Eyy1+1;%切片に+1を加える%
Eyyyy1=[Ey1(1,1) Ey1(1,2) Ey1(1,3) Eyyy1];%pの係数行列から切片に+1加えた新しい係数行列Eyyyy1を作る%
EY1 = polyval(Eyyyy1,X);%Eyyyy1行列を使ってXに対する近似式EY1を導出%
REY1=E1./EY1;%実際の試験結果E1を近似式EY1で成分ごとに割る(自分が欲しいプログラムを通した結果Bの1列目)%
end
とすればよく、もし、提示いただいたコードが正しいのであれば、Xをうまく定義すれば動くと思います。ひとまずおおまかな流れはこのようなかんじと思います。
Takeru Katagiri
on 6 Feb 2020
Kenta
on 6 Feb 2020
はい、また問題あれば返信ください。ダミーデータ(1,2,3、、、、と規則的な数字が入っている)などを作成いただけると一緒に考えれるかもしれません。
Takeru Katagiri
on 7 Feb 2020
Kenta
on 7 Feb 2020
[h w]=size(A);
RE=zeros(h,w);
for i=1:w;
%行いたい計算
E1=A(1:h,i);%試験結果Aのi列を抽出%
Ey1 = polyfit(X,Eyoko1,6);%6次式の近似式の各係数行列Ey1を導出(以降は行いたい計算過程)%
REY1 = polyval(Ey1,X);%Ey1行列を使ってXに対する近似式EY1を導出%
RE(:,w)=REY1;
end
こんにちは、このように、結果と同じ形式の変数REを用意しておいて、各ループの終わりのところで代入していけばよいと思います。最終的には7000 by 70の結果(RE)が得られるはずです。
最終結果が7000 by 70でなければ、適宜変更をお願いいたします。
Takeru Katagiri
on 7 Feb 2020
Kenta
on 7 Feb 2020
RE(:,i)
大変失礼しました。少なくともうえのようにすべきでした。
wではなくiが入っています。これで少し改善されましたか?
Takeru Katagiri
on 7 Feb 2020
Accepted Answer
More Answers (0)
Categories
Find more on MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!