エディターでプログラムを起動させると初期に作成した変数が消えて計算出来なくなります。
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
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!Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の 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)