MATLAB function 配列(ベクトル)入力
18 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Kimiyasu Sasaki
le 12 Déc 2019
Réponse apportée : Kimiyasu Sasaki
le 13 Déc 2019
MATLABのMファイルで関数を定義する際に入力の値で条件付けて出力するという基本的な関数を書きたいのですが、出力が思う通りに行きません。
function y = func(x)
for i:length(x)
if (x(i) > = 1) && (x(i) < 2)
y = x;
elseif (x(i) >= 2) && (x(i) < 3)
y = x + 1;
else
y = x + 2;
end
end
end
上記のような簡単な関数ですが、xがスカラ値のときは思い通りの値が出てくれます。しかしながら、xがベクトル値のとき例えば、x = [1 2 3 4]'
に対して、y = [3 4 5 6]'となり、どうやら全てelseのときの条件と判定されてしまいます。(この場合は y = [1 3 5 6]'と出てほしいのですが)
どこか記述の仕方が悪いのでしょうか?
基本的なことで恐れ入りますが、どこが間違えでどのようにすればよろしいかご教授いただけませんでしょうか?
以上、よろしくお願いいたします。
0 commentaires
Réponse acceptée
Shunichi Kusano
le 12 Déc 2019
配列であっても、1要素ずつ判定を行って処理をしたい、ということでよろしいでしょうか。
現状のコードですと、判定の部分は問題ないのですが、処理の部分に要素の指定が抜けていて、配列全部に処理が行われる仕様になっています。
ですので、例えば一個目の条件では
y(i) = x(i);
と処理する要素を指定すれば、とりあえずは思った通りの処理になると思います。
なお、このくらいであればいいのですが、もっと配列が大きくなってくるとfor文は避けた方がいいと思いました。興味がありましたらfind関数なんかを調べてみると参考になるかと思います。
1 commentaire
Kenta
le 12 Déc 2019
function y = func(x)
for i=1:length(x)
if (x(i) >= 1) && (x(i) < 2)
y(i) = x(i);
elseif (x(i) >= 2) && (x(i) < 3)
y(i) = x(i) + 1;
else
y(i) = x(i) + 2;
end
end
end
こんにちは、こんな感じでx(i)などとし、i=1:lengthとすれば実行できます。
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur Logical 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!