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

71 visualizaciones (últimos 30 días)
健太郎 石崎
健太郎 石崎 el 4 de Nov. de 2021
Comentada: 健太郎 石崎 el 5 de Nov. de 2021
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 comentario
健太郎 石崎
健太郎 石崎 el 4 de Nov. de 2021
eqnではありませんでした。eqn4です。
配列はsx1,sx2と分けて作成したいです。

Iniciar sesión para comentar.

Respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre 演算子と基本的な演算 en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!