for文で繰り返し出力される値を配列に代入したい
25 views (last 30 days)
Show older comments
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の時には、配列に代入しないようにしたいです。
Answers (1)
Atsushi Ueno
on 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
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
