
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ランキング
-
MATLAB グローバル変数の宣言
-
エディットボックスの表示方法...
-
ExcelをCSV書き出す場合のシー...
-
Javaで同一のファイルを読み込...
-
CSVが可変長の場合の検索方法
-
エクセルVBA コードが同じでも...
-
VB6.0でDB接続する際に切断時の...
-
CSVファイルについて
-
vba dir の相対パス
-
window.open でのファイル指定方法
-
batファイルでrenameができませ...
-
read() on unopened filehandle...
-
C言語でファイル名を取得
-
フォルダが開かなくなりました。
-
全角と半角文字が混在している...
-
VB6で"r"みたいな文字が返って...
-
ANSI Cでファイル名、ディレク...
-
[awk]uniq -cで複数ファイルの...
-
ファイル名に日付を入れてアッ...
-
バッチファイルで、記号を含む...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
VBAでCSVファイルを途中行まで...
-
ReadLineでの読み出し行を指定する
-
VBAで巨大なファイルの途中から...
-
VB6.0でDB接続する際に切断時の...
-
MATLAB グローバル変数の宣言
-
openした後、closeしないでプロ...
-
CSVが可変長の場合の検索方法
-
データファイルの行を削除する
-
5行おきに5行ずつ抽出するに...
-
データファイルをプロットする(...
-
Perlの変数に文字数制限(容量...
-
拡張子 ”log” と ” dat” の違い
-
【VBA】複数のエクセルファイル...
-
JavaでCSVファイルを高速に読む...
-
CGI(Perl)でWeb上から作成...
-
検索ボックスから製品名を検索...
-
CSVファイルの内容を編集する方...
-
ADOによるCSVファイルからのデ...
おすすめ情報