for文で繰り返し出力される値を配列に代入したい
23 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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の時には、配列に代入しないようにしたいです。
Antworten (1)
Atsushi Ueno
am 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
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
