
MATLABプログラミングについて質問です。
毎回同じフォーマットの実験データが出力されるので、個々のデータをあるファンクションでグローバル変数として宣言→実験ファイルのロード、という動きになるように書いたつもりなのですが、
「Undefined function or variable xxxx」(xxxxは私の宣言したはずのグローバル変数)というエラーメッセージが表示されてしまいます。
どう直したらよいのか教えていただけないでしょうか。
私の書いたプログラミングの構成は以下のような感じです。
1. メインのmファイルでグローバル変数を定義するためのfunc1を呼び出す。
2. func1でグローバル変数をひたすら定義。宣言の仕方はオフィシャルサイトと同じ。
global data1;
global data2;
global data3;
3. メインのファイルから実験データをロードする。実験データはmファイル内に宣言した
グローバル変数と同じ名前の変数に代入するような記載になっています。
data1 = 0.005;
data2 = 2800;
data3 = 1.242;
なお、実験結果のmファイルの読み込みだけ単体で実行するとワークスペースに変数とその値が表示されるので、3.ロード の記載が間違っているとは思えません。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
No.2です。
>デバッグで動きを見たところ、グローバル変数の宣言後までは期待通りの動きですが
ここはOKですね。
>[file, path] = uigetfile({'*.m'},'File Selector'); で実験結果ファイルを選択直後、ワークスペースがリセットされ
>(グローバル変数が消え、ファイル選択のために使ったこの関数の変数、file, pathがワークスペースに出現)したので、これが原因かもしれません。
その様ですね。
>にんたまくんさんは、loadで読み込みを行いましたか?
loadなしです。ワークスペースリセット後、再度、グローバル変数を再宣言とかはできないのでしょうか(ここは今、アドリブ的な考えです。)
>お忙しいところ申し訳ありません。もしくは、問題ないようでしたら、スクリプトを拝見させていただけないでしょうか。
>(この場合は自分で読みます)
お恥ずかしいくらい簡単なプログラムですよ。
私の方はloadなしで問題なし。質問者様はloadありで、エラー発生。あなたのNo.2コメントの予測原因が問題なのでしょうね。
何か、不明ありましたら、追加コメント下さい。私の回答できる範囲であれば回答します。
プログラムは以下です。
******** main ******** (main_test.m)
clear
#grobal data1
#grobal data2
#global data3
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a=1
func1(a)
data1 = 0.005;
data2 = 2800;
data3 = 1.242;
who global; ←ここはglobal変数が何かを表示されるコマンドです。
data1
data2
data3
**************************
********* sub1 ******** (func1.m)
function y = func1(x)
global data1;
global data2;
global data3;
y = x;
end
************************
ご説明ありがとうございます。
グローバル変数を再宣言は元々していません。そして、ちょっとよく分からないですが、実験データファイルの取り込み([file, path] = uigetfile({'*.m'},'File Selector');.....)を呼び出す関数内ではなく、メイン関数でやったらうまく動きました。
いろいろとアドバイスありがとうございました。
No.3
- 回答日時:
> 個人のライセンスでないので、mathworksに問い合わせられなくて。
できます。会社のライセンスでも、学校のライセンスでも、研究室のライセンスでも、ライセンス番号があって保守契約が生きていれば、マスワークスは対応してくれます。
言葉足らずですみません。学校に問い合わせても、ITサポートと教務課でたらい回しでライセンス番号含む契約情報を教えてもらえない状況です。
No.2
- 回答日時:
こんばんは。
私自身の簡単なプログラムで確認して見ましたが、上記のエラーは発生せずに、globalになっていることも確認できました。(変数がglobalか否かは "who global⏎"で確認できます。
多分、質問の所の1.と2.あたりがうまく動作していないのではないですか?。
>「Undefined function or variable xxxx」が出ているということはmファイルでdata1,data2,data3という変数は知らないと言っているのでしょうね。
私の確認したプログラムで良ければ、情報提供しますので、私のプログラムと自分のプログラムの違いを見る、私のプログラムをglobal変数宣言の所をコメント文にして、どうなるかを調べて見ますか?。
ご自分のプログラムで、実験ファイルのロードをせずに、グローバル変数を定義し、単純に質問の1,2,3の部分だけでも、同じ様に「Undefined function or variable xxxx」が出ますか?。
→折角、宣言したのに、ロード作業中に何か変わっているものはないかを疑っています。
質問文からすると、特に問題なし、質問者様のプログラミング能力からすると、下手なドジは踏んでいる様には思えませんが。。。
ご丁寧にありがとうございます。
同一ファイルで宣言(global data1;...)と代入(data1 = 0.5;...)を行なったところ、警告(*)は出ましたがワークスペースに変数も値もセットされました。
デバッグで動きを見たところ、グローバル変数の宣言後までは期待通りの動きですが
[file, path] = uigetfile({'*.m'},'File Selector'); で実験結果ファイルを選択直後、ワークスペースがリセットされ(グローバル変数が消え、ファイル選択のために使ったこの関数の変数、file, pathがワークスペースに出現)したので、これが原因かもしれません。
できたら汎用性を持たせたいので実験結果ファイルはユーザに都度任意選択できるものが良いと思いましたが、これが原因なら諦めようと思います。
にんたまくんさんは、loadで読み込みを行いましたか?
お忙しいところ申し訳ありません。もしくは、問題ないようでしたら、スクリプトを拝見させていただけないでしょうか。(この場合は自分で読みます)
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA コードが同じでも...
-
MATLAB グローバル変数の宣言
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
Perlの変数に文字数制限(容量...
-
CSVが可変長の場合の検索方法
-
ReadLineでの読み出し行を指定する
-
エクセルマクロについて CSVフ...
-
データファイルをプロットする(...
-
JavaでCSVファイルを高速に読む...
-
ExcelをCSV書き出す場合のシー...
-
CSVファイルについて
-
Perl-CGI で排他制御はどうすれ...
-
perlからのexcel読み込み
-
C言語で特定の行を抽出する方法...
-
sprintfについて
-
ファイル名を複数個配列で確保...
-
Perl cgiの文字化けを直したい ...
-
C言語でファイル名を取得
-
パスから最後のディレクトリだ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA コードが同じでも...
-
VBAでCSVファイルを途中行まで...
-
ExcelをCSV書き出す場合のシー...
-
MATLAB グローバル変数の宣言
-
ReadLineでの読み出し行を指定する
-
ファイルからある文字列の個数...
-
openした後、closeしないでプロ...
-
DBMとハッシュ
-
Perlの変数に文字数制限(容量...
-
JavaでCSVファイルを高速に読む...
-
2つのCSVファイルをマッチング
-
Shift-jisで正規表現
-
リストボックスから選択、結果...
-
C言語でのファイルのデータ更...
-
perlでのクローリングについて
-
パーミッションについて
-
VB6.0でDB接続する際に切断時の...
-
ファイル入出力のタイミング
-
STDINから何度も読み込むことは...
-
CGIからPHPへデータを渡したい
おすすめ情報