• ベストアンサー

プログラムの変更

http://www12.plala.or.jp/ksp/qumtam/squarewall-simu/squarewall-simu.html」このサイトに井戸型ポテンシャルの数値解に関してをグラフに表すプログラムが掲載されているのですが、このプログラムでグラフを表示するにはCPGPLOTライブラリが必要なんです。 そうではなくて、CPGPLOTをインストールしなくてもエクセルに出力して、エクセルでこのサイトの下に載っているようなグラフを表したい場合、どのようなプログラムに変更すればよいのでしょうか?多少の変更で済むと思うのですが、プログラムに関しては知識ないので宜しくお願いします。

noname#5999
noname#5999

質問者が選んだベストアンサー

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.3

ワーニングが鬱陶しいようなら、以下のように全部にvoidの指定をして下さい。 void cpgsci(int i){}; -- > 自分のですとsquarewall-simu[Enter]の部分が無く、最初からParity = ? という事は、VisualC++などで[F5]の実行をしているのでしょうか? DOS,unixどちらでもの書き方をしていたつもりですが、やはりお使いのOS,コンパイラを書いてもらった方が良いかも。 VC++と仮定して、対処法を2つ、 1) コマンドプロンプト [スタート]-[アクセサリ]-[コマンドプロンプト]でDOS窓を起動。 cd[スペース]まで打ち込む。 プログラムのあるフォルダ(squarewall-simu.cの場所にあるDebugフォルダ?)をDOS窓にドラッグ&ドロップ、パスが表示されたら[Enter] メッセージ#2の手順を実行。 2) VC++のオプション変更 VC++メニュー[プロジェクト]-[設定] 「設定」ダイアログ 「デバッグ」タブ 「プログラムの引数」に、 > out.txt を入力。 F5で実行。 (ただし、表示が出なくなるので、1[Enter]2.0[Enter]と打ち込んでしばらく待つ。) -- いずれにせよ、コンパイルした結果、 squarewall-simu.exe や a.out のような実行形式が作成されているはずですので、そのファイルの場所でコマンドラインから1)の手順を実行すればよいハズ。Cインタプリタで無ければ…。

noname#5999
質問者

お礼

お返事が遅くなり申し訳ありませんでした。上記の(2)の方法にて無事エクセルへ出力することが出来ました。深く感謝しています。今後も似たような質問をすると思いますので、その際も宜しくお願いします。 ちなみに自分の環境は、OSはXP、コンパイラはVBC++です。

その他の回答 (2)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

まず、コンパイルと通常の実行はOKだったのでしょうか? プログラムは紹介されたページにあった、"squarewall-simu.c"と、新たに作った、"cpgplot.h"だけです。 -- 通常、 squarewall-simu[Enter] Parity = ? 1[Enter] E = ? 1.083600[Enter] とする代わりに、「>」を使ってテキストファイルにリダイレクトします。 squarewall-simu > out.txt[Enter] 1[Enter] 1.083600[Enter] (表示が行われないので注意!) とすると、通常画面に出力されていた内容がout.txtというファイルに出力されます。 エクセルに読み込んで、[データ]-[区切り位置]などでx,y座標に分割してください。 -- よくよく見ると、グラフのサンプルが載っていましたね。 曲線となる部分だけを描きたいのでしたら、 cpgmove(double x,double y){printf("mv,%lf,%lf\n",x,y);}; ↓ cpgmove(double x,double y){}; と変更してしまって問題ないようです。

noname#5999
質問者

お礼

コンパイルした際エラーは無かったのですが、ヘッダーファイルに以下のような警告が出ました。 「\cpgplot.h(2) : warning C4508: 'cpgsci' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(3) : warning C4508: 'cpgslw' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(4) : warning C4508: 'cpgmove' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(5) : warning C4508: 'cpgdraw' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(6) : warning C4508: 'cpgopen' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(7) : warning C4508: 'cpgpap' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(8) : warning C4508: 'cpgenv' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 \cpgplot.h(9) : warning C4508: 'cpgclos' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。」 >通常、 squarewall-simu[Enter] Parity = ? 1[Enter] E = ? 1.083600[Enter] とありますが、自分のですとsquarewall-simu[Enter]の部分が無く、最初からParity = ? になってしまうので上記の方法は出来ないのですが・・・。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

cpgmove, cpgdrawが描画のための処理っぽいので、 ----ファイル cpgplot.h----- #include<stdio.h> cpgsci(int i){}; cpgslw(int i){}; cpgmove(double x,double y){printf("mv,%lf,%lf\n",x,y);}; cpgdraw(double x,double y){printf("dr,%lf,%lf\n",x,y);}; cpgopen(char* s){}; cpgpap(double x,double y){}; cpgenv(double x1,double y1,double x2,double y2,int i,int j){}; cpgclos(){}; ----- のようなものを作れば、描画情報は取得できます。 但し、出力は mv,5.992000,-0.037224 dr,5.993000,-0.037228 mv,-5.992000,-0.074447 dr,-5.993000,-0.074456 のようになり、移動、描画(draw)を組み合わせて、 (5.992000,-0.037224)から(5.993000,-0.037228)まで線を引く (-5.992000,-0.074447)から(,-5.993000,-0.074456 )まで線を引く とやっているようです。 Excelの標準の散布図では全部のプロット点を繋ぐが、全く繋がないかしかできません。 個別のデータ点の書式設定で線を引く/引かないを設定できますが、こちらでもマクロが必要かも。 -- > 井戸型ポテンシャル 私はこっちの方がわからないので、合ってるかどうか検証できませんが(^^;

noname#5999
質問者

お礼

早くのご回答、有難う御座いました。さっそく上記のヘッダーファイルを作り試してみました。しかし、どうやらエクセルへの出力が上手く出来ないようです・・・。 申し訳ないのですが、エクセルへの出力の仕方も教えて頂けないでしょうか?出来ればプログラム全体を載せてもらえると幸いです。宜しくお願いしますm(__)m

関連するQ&A

  • 井戸型ポテンシャルの数値解シミュレーション

    井戸型ポテンシャルの数値解を「オイラー・クロマー法」を用いてシミュレーションで表す場合、どのようなプログラムにすれば良いのでしょうか?井戸の深さや幅をこちらで任意な数値を代入して、基底状態などにおける固有値や波動関数をグラフに表したいのです。 プログラムに関しては全くの初心者なのでどなたか具体的に教えてもらえれば幸いです。言語はC、グラフィクスの処理はPGPLOTのようなものは使用しないで、単純に結果をエクセルへ出力して求めたいです。

  • 波動関数の近似

    井戸型ポテンシャルの波動関数(基底状態)を、オイラー法を用いて数値的に出し、グラフにしました。オイラー法は近似なので誤差があると思うのですが、誤差がどのくらいあるのかを調べるべく解析的に出したグラフと比較したいのです。基底状態の波動関数を解析的に解いてエクセルにグラフとして表すにはどのようなことをすれば良いのでしょうか? 物理学については無知なので宜しくお願いします。

  • JAVA プログラムが正しく動きません

    プログラム初心者です。Linux suseを使っています。 計算結果を出力するプログラムを作っています。時刻ごとのn個の粒子の様子を計算しています。 forが入れ子になっていて、それをn回計算しているのを、T回計算するように組みました。 時刻tの時のi番目の粒子のポテンシャル(Eという変数)を計算させたつもりなのですが、だんだん減るはずが増えています。 Eは二つの数値を足しているのですが、片方の数値を表示させたところ、毎回微妙に違うのですが [D@1ca318a というような数値(?)が出てきます。 この数値(のようなもの)は一体なんでしょう?文字化け? でもコンパイルできているしEが出てくるってことは計算は一応しているんですよね? この数値とポテンシャルが増えてしまうのは関係があるのでしょうか?それともポテンシャルの計算式が間違っているから増えているんでしょうか? 質問文が曖昧な感じになってしまってすみません。原因がどこにあるのか見当がつかなくて途方にくれています。もし心当たりある方がいらっしゃったら回答お願いします。

  • エクセルの横軸ラベル(数値)について(グラフ作成)

    エクセルの横軸ラベル(数値)について(グラフ作成) エクセル始めたばかりでよく解からないので教えてください。 横軸ラベルとい言うのでしょうか、1 2 3 4 5 6の数値を、 1月 2月 3月・・・と変更したいのですが変更の仕方が分からないので教えて頂きたいのですが。 よく説明できないのですが宜しくお願いします。

  • 数値積分のプログラムについて

    開発環境は,C言語です. 数値積分(台形則)についての質問なのですが, Excelファイル(*fp1)から積分したい数値を読み込んで, 台形則の計算をして,違うファイル(*fp2)に結果を出力させる プログラムを作りたいです. サイトなどを調べてみると,関数f(x)を積分するものだけしか 載っていなくて,ファイルから数値だけを読み込み積分する 方法が載ってなくてわかりませんでした. よろしければ,参考になるプログラム例やサイトなど ありましたら教えて下さい.

  • EXCEL VBA でグラフの名前を変更する方法

    EXCELでグラフを作成した場合にそのグラフの名前が 自動的に"グラフ 1"等とつけられますが EXCEL VBA で既に存在するグラフを扱う際に 分かりやすいようにそのグラフの名前を変更したいのですが方法がわかりません。 プロパティなどを見ても変更できそな項目がありません。 これは変更できないのでしょうか? またプログラムを組んで変更する必要があるのでしょうか?どのようなプログラムになりますか?

  • Excel 2007グラフ の軸を変更すると・・・

    質問を見ていただきありがとうございます グラフのことで教えてください。 Excel2007でグラフを作っているのですが、 軸の数値を変更すると グラフがおかしくなるのです 100% ■ 50% ■ ■ 10% ■ ■ 0%  ■ ■ 自動的に出てきた目盛で、こういう感じだったのですが 軸の数値を希望の数値に変えると 150 100 50 10 0 _ _ _ すべてぺったんこになってしまうのです 直せないかと、色々してみましたが、出来ません 申し訳ないのですが、解決方法を教えてください よろしくお願いします  

  • 流線と流れ関数の関係

    以下のサイトの「流線と流れ関数の関係」のところなのですが http://www12.plala.or.jp/ksp/vectoranalysis/StreamFunction/ 「同一の流線上では流量が零なので、ψ=constantが言えます。」とあるのですが、同一の流線上で流量が0となるのは何故ですか? あと、流れ関数や速度ポテンシャルについて具体的な事例や図などを用いて解説しているサイト・本などがありましたら教えてください。

  • エクセルのグラフで特定の目盛線の色を変更する。

    いつもアドバイスを参考にしています。 エクセルのグラフについて質問があります。エクセルでグラフを作成したとき、ある特定の数値軸(数値軸の値を目盛線にリンクさせ特定の数値軸の目盛線の色を変更する。)の目盛線の色を変更するには、オートシェイプを使用する以外に何か方法はありますか?

  • Excel98でグラフ数値軸の表示単位変更

    こんにちは。Excel98でグラフの数値軸の表示単位を「千」などに変更できないのでしょうか? Excel2000では数値軸の書式設定→目盛→表示単位→百、千、万などに変更できます。しかし98にはその機能がないらしいのです。友人が困っているのですが、私は2000なのでよくわかりません。知っている方教えて下さい。

専門家に質問してみよう