• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:長文で複雑ですが教えて頂けると助かります。)

円板振動子の中心軸上の音圧を求める実験方法と課題

このQ&Aのポイント
  • 円板振動子の中心軸上の音圧を求める実験方法について説明します。また、プログラムを書く上で注意すべき点についてもご紹介します。
  • 式1と式2を用いて、中心軸上の音圧を表すことができます。そのためには、円板振動子までの距離を考慮する必要があります。
  • 式2は積分を使用していますが、プログラムを書く際には細かく短冊状に分けて面積を足すことで表現する必要があります。

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

  • ベストアンサー
  • spring135
  • ベストアンサー率44% (1487/3332)
回答No.1

式2:P/2ρcV = (1/2)*{e^(jωt)}{e^(-jkrb) + e^(-jkra)} はすでに積分されているわけで、この絶対値を取れば 式1になります。 >プログラムを組んだのですが全く違うグラフになってしまいました。 式2としてはどのような式をプログラムにしたのですか。複素数のまま数値積分をしたのでしょうか。 実数部分と虚数部分に分けておいて数値計算は実数を使ってやるほうが見通しがよくて間違いが少ないです。

tropical_123
質問者

お礼

自分でもう1回考え直してみます。ありがとうございました。

tropical_123
質問者

補足

#include <stdio.h> #include <complex.h> #include <math.h> #include <banto.h> #define C 1500.0 //音速 #define F 125000.0 //周波数 int main() { double a, b, c, k, r0, r1, r2, i0, i1, i2; COMPLEX z0, z1, z2, z3, z4, z5, z6; //三平方の定理より値の限界値を定める for (i0= 0.0; i0 <0.03; i0+=0.003) { r0 = (double)i0; for(i1= 0.0; i1 <0.05; i1+=0.005) { r2 = (double)i1; for(i2= 0.0; i2 <0.04; i2+=0.004) { r1= (double)i2; //ω=2πfよりk=2πf/c k = (double)(2*M_PI*F)/(double)(C); //三平方の定理を利用 r1 = r2*r2 - r0*r0; r2 = r0*r0 + r1*r1; //計算式の組み立て a = 2*M_PI; b = -k*r1; c = -k*r2; //オイラーの公式を利用してeをsinとcosに変化  //また、#include <banto.h>によりCseは実数と複素数の加算でCse(1,2)は1+2j  //Csuは複素数と複素数の加算  //Cmuは複素数と複素数の乗算 //Cmu_sは複素数と実数の乗算を表すことができる z0 = Cse(cos(a), sin(a)); z1 = Cse(cos(b), sin(b)); z2 = Cse(cos(c), sin(c)); z5 = Csu(z1,z2); z3 = Cmu(z0,z5); z6 = Cmu_s(z3,(1/2.0));  //x軸を1000倍したのは単位をmmに合わせるためです。 printf("%9.9f %9.9f\n", 1000*r0, z6); } } } return 0; } としました。 短冊状に細かく分割した面積を足し合わせるので、分割数を多くするために 一個一個の短冊の範囲を狭く設定して繰り返し足していけるプログラムに した方がいいと言われました。(短冊の面積は少しずつ増やさなければならないのですが、どこの面積を表しているかわかっておりません) よろしくお願い致します。