エディターでプログラムを起動させると初期に作成した変数が消えて計算出来なくなります。
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
1 개 추천
エディターでプログラムを起動させると初期に作成した変数が消えて、計算出来なくなります。
なにか初期設定が必要でしょうか?
※ワークステーションを新しくして今まで使ってたプログラムで発生しました。
채택된 답변
Kojiro Saito
2020년 4월 10일
편집: Kojiro Saito
2020년 4월 13일
0 개 추천
2020/04/13 追記
FFTという名前の関数を実行しているため、ベースワークスペースで定義した変数がFFTの関数ワークスペースに引き継がれないために起きている事象のようです。
FFTの関数の入力引数に変数yを入力しても、ベースワークスペースからは関数ワークスペースの変数yが見えません。
y = 1;
FFT(y)
途中経過を見るためには、FFTの関数の9行目にブレークポイントを設定して、yの値が正しく入力されているか確認できます。
参考: ブレークポイントを設定する
---
2020/04/10 回答
そのプログラムのどこかにclearやclear allなどのコマンドが使われている可能性があります。
clearはワークスペースを消去するコマンドなので、初期に作成した変数が消えてしまいます。
댓글 수: 11
Kojiro Saito
2020년 4월 13일
回答欄に書いてくださったコメントをコメント欄に移設しますね。
Yushin Matsumoto 2020 年 4 月 13 日 09:21
ご回答ありがとうございます。
しかしながらClearなどのコマンドが無く、FFTを行う簡単なプログラムです。
参考までに
yという変数を作成して・・・
Fs = 16384; % Sampling frequency
T = 1/Fs; % Sampling period
L = length(y); % Length of signal ←ここで変数が消えて計算出来なくなる現象です。
t = (0:L-1)*T; % Time vector
%入力データプロット(X-sec,Y-Real)
figure
subplot(2,2,1);
plot(t,y)
xlabel('Time (s)')
ylabel('Force (N)')
%FFT
Y = fft(y);
YFFT2 = abs(Y);
f = (Fs*(0:(L/2))/L)';
YFFT1 = YFFT2(1:L/2+1);
YFFT1(2:end-1) = 2*YFFT1(2:end-1);
%FFTデータプロット(X-Hz,Y-Real)
subplot(2,2,2);
plot(f,YFFT1)
xlabel('Frequency (Hz)')
ylabel('Force (N)')
%FFTデータプロット(X-Hz,Y-dB)
YFFT3 = 20*log(YFFT1);
subplot(2,2,[3 4]);
plot(f,YFFT3)
xlabel('Frequency (Hz)')
ylabel('Force (dB)')
です。
移設前のワークステーションではこのプログラムでFFTが出来たのですが、移設後に出来なくなってしまいました。
Kojiro Saito
2020년 4월 13일
length関数の中が変わってしまっているのかもしれません。
which length
を実行したときに、組み込み関数(built-in)と表示されますでしょうか?
また、
which length -all
を実行したときに、どこかのMATLABパスにlength.mという名前のファイルが存在したりしていませんでしょうか?
Yushin Matsumoto
2020년 4월 13일
which lengthで(built-in)が出ます。
which length -allでは複数のフォルダーへ探しに行っている様です。
Yushin Matsumoto
2020년 4월 13일
再度確認しましたら、
which length -allでMATLABパスにlength.mファイルが存在しました。
どういうことでしょうか?
Kojiro Saito
2020년 4월 13일
built-inのlengthや、MATLABのインストールフォルダーの下のtoolboxフォルダーが表示されているのは問題ありませんが、それ以外のカスタムで作ったlength.mファイルがあると、そちらを参照している可能性があります。
確認させて欲しいのですが、
yという変数を作成するのと、上記のFs = 16384;以降のコードは同じスクリプトの中で実施されているのでしょうか?それとも上記のコードは別のmファイルになっているのでしょうか?
Yushin Matsumoto
2020년 4월 13일
ご回答ありがとうございます。
同じスクリプトの中で実施しています。
状態を添付します。

Kojiro Saito
2020년 4월 13일
FFTという名前の関数を実行しているため、ベースワークスペースで定義した変数がFFTの関数ワークスペースに引き継がれないために起きている事象のようです。
FFTの関数の入力引数に変数yを入力しても、ベースワークスペースからは関数ワークスペースの変数yが見えません。
y = 1;
FFT(y)
途中経過を見るためには、FFTの関数の9行目にブレークポイントを設定して、yの値が正しく入力されているか確認できます。
参考: ブレークポイントを設定する
Yushin Matsumoto
2020년 4월 14일
お世話になります。
ブレークポイントを作成しても事象が直りません。
いろいろと試しましたが、コマンドウィンドウで”FFT(y)”では、問題無くプログラムが走りました。
※コマンドウィンドウで行うのを忘れてました。
ただエディターの実行で行うとyの変数が消えて止まってしまいます。
このプログラムを作るときにエディターの実行で確認しながら作った覚えがあります。
本件コマンドウィンドウで走ったので問題ありませんが、エディターの実行で走らなくなる理由をご存じですか?
お手数をおかけしますが宜しくお願い致します。
Kojiro Saito
2020년 4월 14일
functionでくくって関数化すると、エディターの実行ボタンをクリックするだけだと入力引数無しで実行されてしまいます。

「実行」ボタンの▼ボタンを押し下げて、「コードを入力して実行」をクリックすると、入力引数を与えて関数を実行することができます。この例では、FFT(y)となります。

この状態にしておけば、コマンドウィンドウでyの変数を設定してから、エディターでFFT.mを開いて「実行」ボタンをクリックしたときにyが入力されて実行されます。
または、FFT.mのファイルの中でセクションを作れば「セクションの実行」または「実行して次に進む」で部分的に実行することができるようになります。パーセント記号(%)を2つ重ねればセクションが作られます。下記の状態の場合、セクション1が選択されて薄い黄色表示されているので、この状態で「セクションの実行」をクリックするとセクション1だけが実行されます。

プログラムを作っているときは、冒頭に「function」を付けずにスクリプトのまま実行されていたりしていませんでしたか?関数でないスクリプトの場合は、ベースワークスペース=スクリプトのワークスペースなので、yをコマンドウィンドウで設定した後、スクリプトをエディターで開いて「実行」ボタンをクリックするとyの値が反映されて実行できます。
Yushin Matsumoto
2020년 4월 14일
お世話になります。
ご丁寧にありがとうございます。
確かにプログラムを作成している時は”Function”を付けずにスクリプトを実行していたと思います。
最後に”Function”を付けて完成させた様な記憶があります。
いろいろとご対応ありがとうございました。
Kojiro Saito
2020년 4월 14일
解決して良かったです。関数化するとその関数の中でのワークスペースの中で処理がされ、入力引数で渡さない限りベースワークスペースの変数が引き継がれないので、今回みたいに変数が見えなくなるということもありますが、その分メモリーの使用を減らせたり、処理を高速化できたり、再利用性が上がったりなどのメリットも多くあります。
スクリプトのほうが色々と試行錯誤がしやすいので、おっしゃるとおり、まずはスクリプトで作成して、うまくいったらfunctionを付けて関数化するというアプローチが良いと思います。
もしよろしければ回答の「採用」ボタンをポチッと押してもらえると嬉しいです。
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 製品のインストール에 대해 자세히 알아보기
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)