- ベストアンサー
式をC言語で立てる方法
- C言語で円板振動子の中心軸上の音圧分布を求める式をプロットするためのプログラムを作成したが、うまくいかない
- 与えられた式はP/2ρcV = |sinπ(√(r/λ)^2 + (a/λ)^2)(√はここまで)-(r/λ))|
- 先生からはx軸のプログラムだけいじればy軸も出てくるとヒントをもらっているが、上手くいかない
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>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を使った指数表示形式の方がふさわしいでしょう。
その他の回答 (1)
- 和泉 博(@hiroshi09s)
- ベストアンサー率54% (59/109)
お礼
返事が遅れてしまい大変申し訳ございません。 詳しい解説ありがとうございます!無事にプロットできました。