for文で繰り返し出力される値を配列に代入したい
22 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
yの値を以下のeqn4に代入すると、xの値が範囲ごとに出てきます
このプログラムでは、forでyの範囲指定をすると、y=39.2のときのxの値、y=39.21の時のxの値というように繰り返しコマンドウインドウに出力されます。
この繰り返し出力される値を配列(sx1,sx2)に代入したいのですが、どのようにすれば良いのでしょうか?
sx1:出力されたsolx1の値のみが含まれる
sx2:出力されたsolx2の値のみが含まれる
syms x y
%x = -0.1921;
for y = 39.2:0.01:39.26
eqn4 = ((abs(-30+y)/sqrt(x^2+1^2))-8.825226)^2 + ...
((abs(-40+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(10*x-30+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(10*x-40+y)/sqrt(x^2+1^2))-2.941742)^2 + ...
((abs(20*x-30+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(20*x-40+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(30*x-30+y)/sqrt(x^2+1^2))-2.941842)^2 + ...
((abs(30*x-40+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(40*x-30+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(40*x-40+y)/sqrt(x^2+1^2))-8.825226)^2 + ...
((abs(50*x-20+y)/sqrt(x^2+1^2))-8.825226)^2 + ...
((abs(50*x-30+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(60*x-20+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(60*x-30+y)/sqrt(x^2+1^2))-2.941742)^2 + ...
((abs(70*x-20+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(70*x-30+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(80*x-20+y)/sqrt(x^2+1^2))-2.941742)^2 + ...
((abs(80*x-30+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(90*x-20+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(90*x-30+y)/sqrt(x^2+1^2))-8.825226)^2 == 1.000000009427;
solx1 = vpasolve(eqn4,x,[-0.2 -0.143])
solx2 = vpasolve(eqn4,x,[-0.3 -0.2])
end
出力結果は以下のようになっています。
出力される値がemptyの時には、配列に代入しないようにしたいです。
Réponses (1)
Atsushi Ueno
le 4 Nov 2021
syms x y
%x = -0.1921;
sx1 = []; sx2 = [];
for y = 39.2:0.01:39.26
eqn4 = ((abs(-30+y)/sqrt(x^2+1^2))-8.825226)^2 + ...
((abs(-40+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(10*x-30+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(10*x-40+y)/sqrt(x^2+1^2))-2.941742)^2 + ...
((abs(20*x-30+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(20*x-40+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(30*x-30+y)/sqrt(x^2+1^2))-2.941842)^2 + ...
((abs(30*x-40+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(40*x-30+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(40*x-40+y)/sqrt(x^2+1^2))-8.825226)^2 + ...
((abs(50*x-20+y)/sqrt(x^2+1^2))-8.825226)^2 + ...
((abs(50*x-30+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(60*x-20+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(60*x-30+y)/sqrt(x^2+1^2))-2.941742)^2 + ...
((abs(70*x-20+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(70*x-30+y)/sqrt(x^2+1^2))-4.902903)^2 + ...
((abs(80*x-20+y)/sqrt(x^2+1^2))-2.941742)^2 + ...
((abs(80*x-30+y)/sqrt(x^2+1^2))-6.864065)^2 + ...
((abs(90*x-20+y)/sqrt(x^2+1^2))-0.980581)^2 + ...
((abs(90*x-30+y)/sqrt(x^2+1^2))-8.825226)^2 == 1.000000009427;
solx1 = vpasolve(eqn4,x,[-0.2 -0.143]);
solx2 = vpasolve(eqn4,x,[-0.3 -0.2]);
% この繰り返し出力される値を配列(sx1,sx2)に代入したいのですが、どのようにすれば良いのでしょうか?
if ~isempty(solx1)
sx1 = [sx1; solx1]; % sx1:出力されたsolx1の値のみが含まれる
end
if ~isempty(solx2)
sx2 = [sx2; solx2]; % sx2:出力されたsolx2の値のみが含まれる
end
end
sx1
sx2
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
