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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# 競技プログラミングに関する質問です。 3 2022/04/03 19:51
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
ADOによるCSVファイルからのデ...
-
VBAでCSVファイルの特定行を書...
-
エクセルマクロについて CSVフ...
-
openした後、closeしないでプロ...
-
VBAで巨大なファイルの途中から...
-
エディットボックスの表示方法...
-
拡張子 ”log” と ” dat” の違い
-
C言語でのファイルのデータ更...
-
Perlの変数に文字数制限(容量...
-
perlで、後ろの行を読んで、前...
-
2つのCSVファイルをマッチング
-
close()で例外が投げられる理由
-
dos変数の%~dp0は powershellで...
-
C言語で特定の行を抽出する方法...
-
VBA テキストファイルを読み取...
-
改行コードが勝手に
-
vba dir の相対パス
-
はじめまして。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
ReadLineでの読み出し行を指定する
-
エクセルVBA コードが同じでも...
-
csvファイル改行コードの置換に...
-
Perlの変数に文字数制限(容量...
-
perlにて2つのファイル比較
-
C言語でのファイルのデータ更...
-
JavaでCSVファイルを高速に読む...
-
VB6.0でDB接続する際に切断時の...
-
MATLAB グローバル変数の宣言
-
alarmのタイムアウト後の処理で...
-
DBMとテキストファイルのどちら...
-
perlで、後ろの行を読んで、前...
-
拡張子 ”log” と ” dat” の違い
-
5行おきに5行ずつ抽出するに...
-
テキストデータから指定した1...
おすすめ情報