for文で繰り返し出力される値を配列に代入したい

조회 수: 23 (최근 30일)
健太郎 石崎
健太郎 石崎 2021년 11월 4일
댓글: 健太郎 石崎 2021년 11월 5일
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
solx1 = 
solx2 = 
solx1 = 
solx2 = 
solx1 = 
solx2 = 
solx1 = Empty sym: 0-by-1
solx2 = 
solx1 = Empty sym: 0-by-1
solx2 = 
solx1 = Empty sym: 0-by-1
solx2 = 
solx1 = Empty sym: 0-by-1
solx2 = 
出力結果は以下のようになっています。
出力される値がemptyの時には、配列に代入しないようにしたいです。
  댓글 수: 1
健太郎 石崎
健太郎 石崎 2021년 11월 4일
eqnではありませんでした。eqn4です。
配列はsx1,sx2と分けて作成したいです。

댓글을 달려면 로그인하십시오.

답변 (1개)

Atsushi Ueno
Atsushi Ueno 2021년 11월 4일
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
sx1 = 
sx2
sx2 = 
  댓글 수: 1
健太郎 石崎
健太郎 石崎 2021년 11월 5일
実際にやってみたところ、値をまとめて配列に代入することができました。
ありがとうございました。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!