for文の書き方について

28 views (last 30 days)
mayu
mayu on 28 Aug 2023
Commented: mayu on 31 Aug 2023
マトラボ以前の質問と思うので恐れ入ります。。。
btn1 = app.Btn1Button.Value;
btn2 = app.Btn2Button.Value;
btn3 = app.Btn3Button.Value;
sldr1 = app.Slider1.Value;
sldr2 = app.Slider2.Value;
sldr3 = app.Slider3.Value;
nbox1 = app.EditField1.Value;
nbox2 = app.EditField2.Value;
nbox3 = app.EditField3.Value;
これを短くしたくて、
for i = 1:3
("btn" + i) = app.("Btn" + i + "Button").Value;
("sldr" + i) = app.("Slider" + i).Value;
("nbox" + i) = app.("EditField" + i).Value;
end
と書いたら、
'=' での解析エラー:使用法は、無効な MATLAB 構文になる可能性があります。
と言われるのですが、どう書いたらいいのでしょうか😓
左側がおかしいのかなと思って、括弧やクォーテーションを外したり変えてみても変わりませんでした。
よろしくお願いいたしますm(__)m💦

Accepted Answer

Hiro Yoshino
Hiro Yoshino on 28 Aug 2023
アイディアを2つお渡しします:
[1] cell 配列を使って情報を保存すると楽かなと思います。
それと、string ベクトルの結合ですが、"i" が数値なのでそのまま結合出来ないと思います。num2str で変換しておきます。
app.Btn1Button.Value = 1;
app.Btn2Button.Value = 2;
app.Btn3Button.Value = 3;
for i = 1:3
btn{i} = app.("Btn" + num2str(i) + "Button").Value;
end
取り出し
btn{:}
ans = 1
ans = 2
ans = 3
[2] eval を使うと、文字ベクトルを評価することができます。これも使い方によっては目的を達成できるかも。
x = rand(10);
for i = 1:2
sampleStr = sprintf("x*x + %f",i) % この string を評価することができる
mysample{i} = eval(sampleStr);
end
sampleStr = "x*x + 1.000000"
mysample = 1×1 cell array
{10×10 double}
sampleStr = "x*x + 2.000000"
mysample = 1×2 cell array
{10×10 double} {10×10 double}
確認:
mysample{:}
ans = 10×10
3.2364 3.0724 3.0012 3.8829 3.2737 3.2315 3.6100 3.2918 2.6290 4.3854 3.0363 2.6288 2.6506 2.3124 3.1440 2.5556 2.8740 3.2044 2.5573 3.4979 3.5392 3.2857 3.2806 3.1913 3.4939 3.1551 3.5127 3.6920 2.9020 4.3439 3.0966 2.7905 2.6119 2.7479 3.1536 2.7661 3.1933 3.1977 2.6465 3.5358 3.3555 3.2036 3.3053 2.8728 3.3998 3.1859 3.1039 3.8000 3.1804 3.9302 3.3423 3.2997 2.9761 3.3593 3.5556 3.2943 3.8559 3.9142 3.0183 3.9473 3.7770 3.1009 3.2219 3.3562 3.9449 3.3768 3.8376 3.9220 3.1548 4.9024 3.3157 2.7619 3.0758 3.4335 3.1084 2.8328 3.2202 3.0481 2.7553 4.2525 4.1994 3.4959 3.3826 3.8562 4.5045 3.8751 4.6156 4.3782 3.7280 5.3289 3.8477 3.7528 3.6505 3.7058 4.2050 3.8145 4.1801 4.4629 3.7634 4.7117
ans = 10×10
4.2364 4.0724 4.0012 4.8829 4.2737 4.2315 4.6100 4.2918 3.6290 5.3854 4.0363 3.6288 3.6506 3.3124 4.1440 3.5556 3.8740 4.2044 3.5573 4.4979 4.5392 4.2857 4.2806 4.1913 4.4939 4.1551 4.5127 4.6920 3.9020 5.3439 4.0966 3.7905 3.6119 3.7479 4.1536 3.7661 4.1933 4.1977 3.6465 4.5358 4.3555 4.2036 4.3053 3.8728 4.3998 4.1859 4.1039 4.8000 4.1804 4.9302 4.3423 4.2997 3.9761 4.3593 4.5556 4.2943 4.8559 4.9142 4.0183 4.9473 4.7770 4.1009 4.2219 4.3562 4.9449 4.3768 4.8376 4.9220 4.1548 5.9024 4.3157 3.7619 4.0758 4.4335 4.1084 3.8328 4.2202 4.0481 3.7553 5.2525 5.1994 4.4959 4.3826 4.8562 5.5045 4.8751 5.6156 5.3782 4.7280 6.3289 4.8477 4.7528 4.6505 4.7058 5.2050 4.8145 5.1801 5.4629 4.7634 5.7117
このあたりの変数の取り扱いが???な場合は、基礎が足らないので "MATLAB 基礎" を受講された方が良いと思います。
もし MATLAB 入門 も無償でありますが、恐らく「足りない」かと思います。
MATLAB 基礎は講師リードのものもありますが、OTS でオンラインで受講もできます。この辺りの学習が終わると、今回のご疑問も解決されるかと思います。
  5 Comments
Hiro Yoshino
Hiro Yoshino on 31 Aug 2023
最初は少し苦労すると思いますが耐えてみてください。徐々に慣れていくと思います。
まずは関数のドキュメンテーションを見て、それ通りに数値を与えてみると問題点が浮かんでくるかと思います。調べてみて分からないことがあれば、Answers が味方してくれますので。
まずは自分で調べてみて、仮説をもってご質問されると回答が付きやすいと思います。興味深い質問には様々な人がコメントをしてくれる傾向がありますので!
mayu
mayu on 31 Aug 2023
ありがとうございます。
仮説を立てて質問できるように意識したいと思います。
また引き続きどうぞよろしくお願いいたします。

Sign in to comment.

More Answers (0)

Categories

Find more on Matrix Indexing in Help Center and File Exchange

Tags

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!