for文とif文の併用

21 visualizaciones (últimos 30 días)
hirokazu machida
hirokazu machida el 15 de Abr. de 2020
Comentada: hirokazu machida el 18 de Abr. de 2020
for文とif文を併用した場合,ifで条件指定したモノから外れたものもCの中に0(false)として格納されてしまいます.これをどうにかtrueの部分のみをCに格納できる方法はありませんか?ちなみのやろうとしているのはsr(スライスを入れる直線)とそこに交わっている点を探し出す感じです.下のコードが直したいもので,添付してあるメモがforを使わず実行したい内容になっております.
filename = '4000301_01_fuka_mat'; %データ読み込み
b = xlsread(filename);
Y=b(:,1);
X=(100/10000:100/10000:100); %10000データ
X_1=(100/10000:100/10000:5);
Y_1=Y((1:500),1);
plot(X_1,Y_1,'--bo')
sr=2*10^-3;
yline(sr);
for i=1:(numel(Y_1))-1
A(i)=Y_1(i,1);
B(i)=Y_1((i+1),1);
if A(1,i)<=sr&&B(1,i)>=sr
C(i)=(B(1,i)-A(1,i))/(X_1(1,(i+1))-X_1(1,i)); %傾き
end
end

Respuestas (1)

Akira Agata
Akira Agata el 16 de Abr. de 2020
やりたい内容は、「条件 Y(k) <= sr & Y(k+1) >= sr を満たす点での dY/dX の値を計算し、結果を配列 C として保存したい」と理解しました(間違っていたらご指摘ください)。
以下の方法ではいかがでしょうか。ただし上記条件を満たさない点での配列Cの値はNaNとしています。
% データ読み込み
filename = '4000301_01_fuka_mat.xlsx';
Y = xlsread(filename);
X = (100/10000:100/10000:100)';
sr = 2*10^-3;
% Y(k) <= sr & Y(k+1) >= sr を満たす点でのdY/dXのみをCに保存
C = [diff(Y)/(100/10000);0];
idx = Y <= sr & [Y(2:end);0] >= sr;
C(~idx) = NaN;
% 結果を表示
figure
subplot(2,1,1)
plot(X,Y)
hold on
plot(X(idx),Y(idx),'rx')
yline(sr)
xlabel('X','FontSize',12)
ylabel('Y','FontSize',12)
subplot(2,1,2)
plot(X,C,'o')
xlabel('X','FontSize',12)
ylabel('dY/dX','FontSize',12)
  3 comentarios
Akira Agata
Akira Agata el 16 de Abr. de 2020
配列Cに、NaN以外の値のみを保存したいということでしたら、プログラムの
C(~idx) = NaN;
という行を、以下のように変更すれば可能です。
C = C(idx);
ただしその場合、配列Cのそれぞれの値が、XやYの何番目の要素に対応しているのかが分からなくなりますのでご注意下さい。
hirokazu machida
hirokazu machida el 18 de Abr. de 2020
ご回答していただきありがとうございました.無事にやりたいことを実行することができました.

Iniciar sesión para comentar.

Categorías

Más información sobre Multidimensional Arrays en Help Center y File Exchange.

Productos


Versión

R2019b

Community Treasure Hunt

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

Start Hunting!