ある試験結果の行列Aのデータを列ごとに読み取って計算し、読み取った列の成分数を返し、次の列、次の列へと読み込ませる方法
2 views (last 30 days)
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の列の数、計算を繰り返し行い、最終的には行列の成分の数が元の試験結果と同じ数求まるプログラムを組みたいです。
よい方法をご存じの方がいましたらぜひ教えていただけないでしょうか。
よろしくお願いします。
Accepted Answer
Kenta
on 8 Feb 2020
こんにちは、説明不足だったようで、失礼いたしました。
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 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!