ある試験結果の行列A​のデータを列ごとに読​み取って計算し、読み​取った列の成分数を返​し、次の列、次の列へ​と読み込ませる方法

2 ビュー (過去 30 日間)
Takeru Katagiri
Takeru Katagiri 2020 年 2 月 5 日
コメント済み: Kenta 2020 年 2 月 14 日
ある試験を行って得た試験結果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 件のコメント
Kenta
Kenta 2020 年 2 月 7 日
RE(:,i)
大変失礼しました。少なくともうえのようにすべきでした。
wではなくiが入っています。これで少し改善されましたか?
Takeru Katagiri
Takeru Katagiri 2020 年 2 月 7 日
自分がプログラムの勉強が足らず、読めないばかりにすいません。
endの上の行を変えました。
すると、REは7000×70の行列にはなるのですが、7000,70列目の結果が1から69列までコピーされたREが出てきました。
まだお付き合いいただけますでしょうか?
[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(:,i)=REY1;
end 

サインインしてコメントする。

採用された回答

Kenta
Kenta 2020 年 2 月 8 日
example.jpg
こんにちは、説明不足だったようで、失礼いたしました。
sinカーブベースの関数の6次のpolyfitで近似する例を作成してみました。
Katagiriさまも同様に、生データをフィッテイングして、それのフィッテイング結果を表示させたいものと推察しました。
下のコードをベースに書き換えると良いと思います。
clear;clc;close all
% ダミーデータの作成
A=linspace(-10, 10,7000);
A=repmat(A',[1 70]);
a1=randi(100,[70 1]);
a2=randi(5,[70 1]);
X=a1.*sin(A')+a2;
figure;plot(A',X(1,:))
hold on
[h w]=size(X);
RE=zeros(h,w);
for i=1:h
%行いたい計算
E1=A(1:end,i);%試験結果Aのi列を抽出%
Ey1 = polyfit(E1',X(i,1:end),6);%6次式の近似式の各係数行列Ey1を導出(以降は行いたい計算過程)%
%%ここのEyokoはE1では??
REY1 = polyval(Ey1,A(1:end,i));%Ey1行列を使ってXに対する近似式EY1を導出%
%%得られた係数Ey1を用いて、データXに関する予測点を計算
%%i番目に関して、再構成した点を変数REに記録する
RE(i,:)=REY1;
end
plot(A',RE(1,:),'b')
legend('予測した値','元の値')
I=getframe(gcf);
imwrite(I.cdata,'example.jpg')
  4 件のコメント
Takeru Katagiri
Takeru Katagiri 2020 年 2 月 14 日
Kenta様
このたびはご回答ありがとうございました。
1週間かかってしまいましたが、すべてを理解し自分でfor文を組めるようになりました。
また、目的の計算プログラムのフィッティングもできました。
Kenta様のご指導のおかげでまた一つMATLABを使えるようになりました。
またご回答をいただけたら大変助かります。
本当にありがとうございました。
Kenta
Kenta 2020 年 2 月 14 日
こんにちは、ご返信ありがとうございます。丁寧にご確認いただいたようでうれしいです。
こちら、解決し、良かったです。はい、またよろしくお願いいたします。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!