マトラボ以前の質問と思うので恐れ入ります。。。
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💦

 채택된 답변

Hiro Yoshino
Hiro Yoshino 2023년 8월 28일

0 개 추천

アイディアを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

mayu
mayu 2023년 8월 29일
ご教示いただきましてありがとうございます❕
(1)のほうがわかりそうなので、そちらを参考にさせていただいて、ファイル出力しようとしているのですが、
以下の用に書くと
for i = 1:3 % btn,sldr,nboxの値を変数に代入
btn{i} = app.("Btn" + num2str(i) + "Button").Value;
sldr{i} = app.("Slider" + num2str(i)).Value;
nbox{i} = app.("EditField" + num2str(i)).Value;
filename = "workspace.mat";
save(filename, "btn{i}","sldr{i}","nbox{i}"); % ワークスペースの指定変数をmatファイルに保存
whos -file workspace.mat;
end
とエラーが出ました。
save(filename, btn{i},sldr{i},nbox{i});
にしてみたら、
となりました。
btn{i}のところを、btn1などに置き換えるとエラーは出なくなるのですが、btn{i}で設定することはできないのでしょうか。
また、入力データを消すボタンに、コールバック設定して
clear;
と書いたのですが、値が消えませんでした。
for i = 1:3
app.("EditField" + i).Value = 0;
app.("Slider" + i).Value = 0;
app.("Btn" + i + "Button").Value = 0;
end
と書いたらいちおう消えました。(0が設定されました)
clearは、「ワークスペースからすべての変数を削除できます」とあるのですが、何が原因で消えないのでしょうか。
もしお分かりでしたらご教示いただけますと幸いです。
2の方法についても確認させていただいたのですが、分からなかったので、マトラボ入門の復習と、「基礎」についても検討をさせていただきたいと思います。
お忙しいところ度々お手数おかけいたしますが、どうぞよろしくお願いいたします。
Hiro Yoshino
Hiro Yoshino 2023년 8월 29일
save(filename, "btn","sldr","nbox");
としてください。とりあえずこれで動作はするはずです。
それと、変数型の扱いと、関数の使い方とその調べ方が身についておられないようなので、「MATLAB 基礎」でサッと基礎を抑えるか、documentation をご自身で読み進められるのがよろしいかと。
今回の質問のされ方ですと、今後は回答が付きにくいと思います。この場では、「できません、教えてください」は推奨されません。例えば、
save(filename, btn{i},sldr{i},nbox{i});
が動作しないというのは、save 関数の docmentation を見れば当たり前なので、取説すら読んでいないような質問ですと、「できません、教えてください」と見なされ回答が付きにくいです。
save(filename, "btn{i}","sldr{i}","nbox{i}");
が動作しないのもワークスペースに btn{i} という変数が存在しないからです。まずは、documentation save を確認してみてください。
mayu
mayu 2023년 8월 31일
편집: mayu 2023년 8월 31일
度々ありがとうございます。
ドキュメンテーションは一応一通り読んで、" "で囲むなどしたのですが動かなくて、プログラミングもわかってないので内容もあまり理解できておらずでした((+_+))
マトラボの基本的なところとプログラミングを学習しながら、まずは書いてあること理解できるようにしたいと思います。
お忙しいところ、ご教示いただきありがとうございました。
Hiro Yoshino
Hiro Yoshino 2023년 8월 31일
最初は少し苦労すると思いますが耐えてみてください。徐々に慣れていくと思います。
まずは関数のドキュメンテーションを見て、それ通りに数値を与えてみると問題点が浮かんでくるかと思います。調べてみて分からないことがあれば、Answers が味方してくれますので。
まずは自分で調べてみて、仮説をもってご質問されると回答が付きやすいと思います。興味深い質問には様々な人がコメントをしてくれる傾向がありますので!
mayu
mayu 2023년 8월 31일
ありがとうございます。
仮説を立てて質問できるように意識したいと思います。
また引き続きどうぞよろしくお願いいたします。

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 ループと条件付きステートメント에 대해 자세히 알아보기

제품

릴리스

R2021b

태그

질문:

2023년 8월 28일

댓글:

2023년 8월 31일

Community Treasure Hunt

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

Start Hunting!