範囲を指定して演算する。
34 views (last 30 days)
Show older comments
xの値は秒を表すのですが、例えば、xが1秒から10秒の間のY(各々が1)サンプルABのYの総和をmatlabで求めるにはどうしたら良いでしょうか?
0 Comments
Accepted Answer
Kojiro Saito
on 20 Dec 2019
コード例はこちらです。
t = readtable('timestamps EX.xlsx','Range', 'A3:D49','ReadVariableNames', false);
% Aのデータ
tA = t(:,1:2);
tA.Properties.VariableNames = {'x', 'y'};
% Bのデータ
tB = t(:,3:4);
tB.Properties.VariableNames = {'x', 'y'};
% xが1から10の間のインデックスを取得
idxA = (tA.x >= 1) & (tA.x <=10);
idxB = (tB.x >= 1) & (tB.x <=10);
% 上記インデックスのAとBのyの合計を計算
result = sum(tA.y(idxA)) + sum(tB.y(idxB));
tAやtBの記述は冗長かもしれませんが、処理が分かりやすくなるかと思い入れました。
MATLAB本体だけでできます。
2 Comments
Kenta
on 21 Dec 2019
Edited: Kenta
on 21 Dec 2019
こんにちは、指定時間内の値の総和であれば、上の回答者さまの方法が良いと思いました。
一方、適宜内挿して、時間内の変化量のようなものを見たければ、下のような方法でもよいと思いました。参考までに載せさせてください。お役に立ては幸いです。
内挿をわかりやすくするために、Yの値を変更しました。もとの点を黄色でプロットしています。
close all;clear;clc
%xlsxデータの読み込み
data =xlsread('timestamps EX.xlsx');
% Aのデータを読み込み
dataA = data(:,1:2);
%dataAのYの値を書き換え
dataA(:,2)=rand(size(dataA,1),1)+(abs(dataA(:,1)-10)).^2;
%Yの値を内挿
X_int = (1:0.01:round(dataA(:,1)));%内挿の間隔を指定
Y_interp = interp1(dataA(:,1),dataA(:,2),X_int,'pchip');
%サンプルと内挿された値をプロット
figure;plot(dataA(:,1),dataA(:,2),'o','color','y')
hold on
XY=horzcat([dataA(:,1);X_int'],[dataA(:,2);Y_interp']);
XY=sortrows(XY,1);
plot(XY(:,1),XY(:,2))
% xが1~10の場所を検索
idxA = (XY(:,1) >= 1) & (XY(:,1) <=10);
% xが1から10の間の面積を計算(=値を補完した後の総和)
distance = trapz(XY(idxA ,1),XY(idxA ,2),1);
title(sprintf('distance is %d',distance))
More Answers (1)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!