• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:式をC言語で立てれません)

式をC言語で立てる方法

このQ&Aのポイント
  • C言語で円板振動子の中心軸上の音圧分布を求める式をプロットするためのプログラムを作成したが、うまくいかない
  • 与えられた式はP/2ρcV = |sinπ(√(r/λ)^2 + (a/λ)^2)(√はここまで)-(r/λ))|
  • 先生からはx軸のプログラムだけいじればy軸も出てくるとヒントをもらっているが、上手くいかない

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

>m = x/l; //x軸です。 x=r/λの時のグラフを書くのに、この式は必要でしょうか? P/2ρcV = |sin(π(√((r/λ)^2 + (a/λ)^2))-(r/λ))| にx=r/λを代入すれば P/2ρcV = |sin(π(√(x^2 + (a/λ)^2))-x)| ですよね? さらに a/λ=2.5 とわかっているのですから P/2ρcV = |sin(π(√(x^2 + 2.5^2))-x)| になります。λもなくなりましたね。 C言語で書けば double al2,x,p; al2 = 2.5 * 2.5; // (a/λ)^2 for (i=0; i<100; i++) { x= (double) i; p = fabs( sin( M_PI * ( sqrt (x*x + al2) - x) ) );  printf("%9.2f %11.9f\n", x, p); } です。 以下、余談にはなりますが。 >#define F 120 //周波数(Hz) >#define C 1500 //音速(m/s) #defineは「マクロ」を定義するもので、コンパイルの前段階として、プログラム中の文字列を書き換えるものです。 これ自体に、変数型といった情報はありません。 それを踏まえると > l = C/F; //λをlとして音速÷周波数で定義できます。 これは l = 1500 / 120 ; と書いたのと同じ意味になります。 数字だけで値を書いた場合、「整数」として扱われます。 そして、整数÷整数は整数(小数点以下切り捨て)になります。 つまり l=12です。 #define F 120.0 //周波数(Hz) #define C 1500.0 //音速(m/s) と小数点付きで書けば、double型として使用されますので、 l=12.5 になります。 > printf("%9.9f %9.9f\n", m, p); 詳しくは、printfのマニュアルをよく確認してほしいのですが。 %9.9fだと、 小数点以下9桁+小数点+整数部で最低11桁必要です。最初の9で指定した桁におさまりません。 また、科学技術の分野なら、%eを使った指数表示形式の方がふさわしいでしょう。

tropical_123
質問者

お礼

返事が遅れてしまい大変申し訳ございません。 詳しい解説ありがとうございます!無事にプロットできました。

その他の回答 (1)

回答No.2

添付グラフでは、x>0 のときは衰退特性を示します。よって、あなたのプログラムは正解であると思います。 どうしても添付グラフを得たいならば for (i=0; i<100; i++) を double i; for (i=-10.0; i<10.0; i+=0.1) としなければ描画できません。

tropical_123
質問者

お礼

返事が遅れてしまい大変申し訳ございません。 画像まで貼っていただきありがとうございます!無事にプロットできました。

関連するQ&A