![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/284869/image.png)
for文とif文の併用
10 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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
0 Commenti
Risposte (1)
Akira Agata
il 16 Apr 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)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/284869/image.png)
3 Commenti
Akira Agata
il 16 Apr 2020
配列Cに、NaN以外の値のみを保存したいということでしたら、プログラムの
C(~idx) = NaN;
という行を、以下のように変更すれば可能です。
C = C(idx);
ただしその場合、配列Cのそれぞれの値が、XやYの何番目の要素に対応しているのかが分からなくなりますのでご注意下さい。
Vedere anche
Categorie
Scopri di più su Multidimensional Arrays in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!