MATLAB Answers

エディターでプログラ​ムを起動させると初期​に作成した変数が消え​て計算出来なくなりま​す。

조회 수: 15(최근 30일)
エディターでプログラムを起動させると初期に作成した変数が消えて、計算出来なくなります。
なにか初期設定が必要でしょうか?
※ワークステーションを新しくして今まで使ってたプログラムで発生しました。

  댓글 수: 0

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

채택된 답변

Kojiro Saito
Kojiro Saito 10 Apr 2020
편집: Kojiro Saito 13 Apr 2020
2020/04/13 追記
FFTという名前の関数を実行しているため、ベースワークスペースで定義した変数がFFTの関数ワークスペースに引き継がれないために起きている事象のようです。
FFTの関数の入力引数に変数yを入力しても、ベースワークスペースからは関数ワークスペースの変数yが見えません。
y = 1;
FFT(y)
途中経過を見るためには、FFTの関数の9行目にブレークポイントを設定して、yの値が正しく入力されているか確認できます。
---
2020/04/10 回答
そのプログラムのどこかにclearclear allなどのコマンドが使われている可能性があります。
clearはワークスペースを消去するコマンドなので、初期に作成した変数が消えてしまいます。

  댓글 수: 11

표시 이전 댓글 수: 8
Kojiro Saito
Kojiro Saito 14 Apr 2020
functionでくくって関数化すると、エディターの実行ボタンをクリックするだけだと入力引数無しで実行されてしまいます。
「実行」ボタンの▼ボタンを押し下げて、「コードを入力して実行」をクリックすると、入力引数を与えて関数を実行することができます。この例では、FFT(y)となります。
この状態にしておけば、コマンドウィンドウでyの変数を設定してから、エディターでFFT.mを開いて「実行」ボタンをクリックしたときにyが入力されて実行されます。
または、FFT.mのファイルの中でセクションを作れば「セクションの実行」または「実行して次に進む」で部分的に実行することができるようになります。パーセント記号(%)を2つ重ねればセクションが作られます。下記の状態の場合、セクション1が選択されて薄い黄色表示されているので、この状態で「セクションの実行」をクリックするとセクション1だけが実行されます。
プログラムを作っているときは、冒頭に「function」を付けずにスクリプトのまま実行されていたりしていませんでしたか?関数でないスクリプトの場合は、ベースワークスペース=スクリプトのワークスペースなので、yをコマンドウィンドウで設定した後、スクリプトをエディターで開いて「実行」ボタンをクリックするとyの値が反映されて実行できます。
Yushin Matsumoto
Yushin Matsumoto 14 Apr 2020
お世話になります。
ご丁寧にありがとうございます。
確かにプログラムを作成している時は”Function”を付けずにスクリプトを実行していたと思います。
最後に”Function”を付けて完成させた様な記憶があります。
いろいろとご対応ありがとうございました。
Kojiro Saito
Kojiro Saito 14 Apr 2020
解決して良かったです。関数化するとその関数の中でのワークスペースの中で処理がされ、入力引数で渡さない限りベースワークスペースの変数が引き継がれないので、今回みたいに変数が見えなくなるということもありますが、その分メモリーの使用を減らせたり、処理を高速化できたり、再利用性が上がったりなどのメリットも多くあります。
スクリプトのほうが色々と試行錯誤がしやすいので、おっしゃるとおり、まずはスクリプトで作成して、うまくいったらfunctionを付けて関数化するというアプローチが良いと思います。
もしよろしければ回答の「採用」ボタンをポチッと押してもらえると嬉しいです。

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

추가 답변(0개)

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!