
永久磁石がある点に作る磁束密度をC言語にて計算したいと考えています。
計算がうまくいかず、どこに間違いがあるのか見つけられていないので、
電磁気ないしC言語に見識のある方のお力添えを頂きたく存じます。
表面磁場 M = 0.24 T
磁石長さ L = 1 mm (y軸方向)
磁石幅 W = 1 mm (z軸方向)
の磁石がある点に作る磁場を求めます。
磁石表面を長さ方向(y軸方向)にn分割してdy、幅方向(z軸方向)にm分割してdzとし、
それぞれの領域が作る磁場をyとzに関する重積分で重畳して求めようとしています。
この時、磁石の表面磁束密度を M で一様だと仮定すると、分割された各要素の
持つ磁極の強さは dy*dz*M [Wb] となります。
したがって、磁場のクーロンの法則より、各要素から r [m]離れた点に磁石の要素が作る磁場dHは、
dH = (1/4πµo) * {(dy*dz*M) / r^2}
磁束密度dB [T]に直して、
dB = (1/4π) * {(dy*dz*M) / r^2)}
ここで、
要素の座標が ( xs0 , ys0 , zs0 ) (添え字はソース点の意味でsです。読みにくくてすみません)
磁束密度を求める点が ( x , y , z )
だとすると、2点間の距離 r = √{(x-xs0)^2 + (y-ys0)^2 + (z-zs0)^2} なので
dB = (1/4π) * [(dy*dz*M) /{(x-xs0)^2 + (y-ys0)^2 + (z-zs0)^2}]
さらに、x軸方向の磁束密度を求めたいため
dB = (1/4π) * [(dy*dz*M) /{(x-xs0)^2 + (y-ys0)^2 + (z-zs0)^2}]
* (x-xs0) / √{(x-xs0)^2 + (y-ys0)^2 + (z-zs0)^2}
としてそれぞれ求め、これを
y軸方向に 0 → 10^(-3) [m]
z軸方向に 0 → 10^(-3) [m]
の範囲で積分して計算しています。
ここまでで間違いはございますでしょうか。
簡単な静磁場の計算ですが、得手でなくお恥ずかしい限りです。
積分には台形公式を用いています。以下、実際のソースコードになります。
このプログラムで計算すると、解が異常に小さく出たり、分割数を変えると解の大きさが
1桁単位で変化したりと、明らかに間違っており、おそらくどこか基礎的なことで躓いている
ことは予想できるのですが、具体的にどこが間違っているのかが分かりません。
見識のある方のお力添えを頂きたく存じます。
#define _USE_MATH_DEFINES
#include<stdio.h>
#include<math.h>
#define f(ys0,zs0) ((x-xs0)*M)/(4*M_PI)/((x-xs0)*(x-xs0)+(y-ys0)*(y-ys0)+(z-zs0)*(z-zs0))/sqrt((x-xs0)*(x-xs0)+(y-ys0)*(y-ys0)+(z-zs0)*(z-zs0))
int main(void) {
int n, m, i;
double L1, L2, W1, W2, M, xs0, xs1, x, ys0, ys1, y;
double zs0, zs1, z, dy, dz, dSy1, dSy2, Sy1, Sy2, dV, V;
//要素分割数
n = 1000;
m = 1000;
//-- パラメータの設定
L1 = 0.000;//yの下限値(磁石の長さ)
L2 = 0.001;//yの上限値
W1 = 0.000;//zの下限値(磁石の幅)
W2 = 0.001;//zの上限値
M = 0.240;//磁石の磁界強度 [T] = [Wb/m^2]
xs0 = 0.000;//ソース点
x = 0.001;//目標点
y = 0.000;//目標点
z = 0.000;//目標点
//--
//微分量の定義
dy = (L2 - L1) / n;
dz = (W2 - W1) / m;
//初期化
V = 0;
//-- 積分
for (i = 1; i < (n-1); i++) {
//y軸ソース位置の指定
ys0 = L1 + dy * i;
ys1 = ys0 + dy;
//ループ毎の初期化
Sy1 = 0;
Sy2 = 0;
for (i = 1; i < (m-1); i++) {
//z軸ソース位置の指定
zs0 = W1 + dz * i;
zs1 = zs0 + dz;
//y軸方向の微小面積計算
dSy1 = (f(ys0, zs0) + f(ys0, zs1)) * dz / 2;
dSy2 = (f(ys1, zs0) + f(ys1, zs1)) * dz / 2;
printf("dSy1 = %lf\ndSy2 = %lf\n", dSy1, dSy2);
//y軸方向の面積総和
Sy1 += dSy1;
Sy2 += dSy2;
}
//z軸方向の微小体積積分
dV = (Sy1 + Sy2)*dy / 2;
//z軸方向の体積総和
V += dV;
}
//-- 積分終了
printf("磁束密度 %lf [T]\n", V);
getchar();
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 示すように,真空中の直交座標系を考える。y平面に平行な つ領域Iと領域Iがあり,軸上の領域Iと領域I 1 2023/06/25 14:46
- 物理学 電磁波に関する問題 1 2023/02/02 21:34
- 物理学 電磁気 肉厚が極めて薄く、無限に長い半径aの円筒状導体に定常電流が一様に流れ ている。 アンペールの 3 2023/07/13 12:36
- 物理学 (2)コイルの位置での磁束密度の大きさと向きを求めよ、ただし、コイル内では磁束密度の大きさは場所によ 1 2023/05/07 01:40
- 大学・短大 大学生です。この問題が分かりません。教えてください。 z軸上に細い導線を置き、z軸正方向に電流Iを流 1 2023/06/13 04:08
- 物理学 電磁気です この問題の電場を求める方法が分かりません ご教示ください z 軸を中心軸として半径 a 1 2023/06/23 11:45
- 物理学 磁束密度Bの一様な磁場中に, 半径aの円板がその面と磁場が直交するように置かれ、中心軸のまわりに角速 4 2022/12/14 23:52
- 物理学 電流が磁場から受ける力についての説明文の解説をお願いします。 5 2023/03/23 09:39
- 大学・短大 電気電子の問題です。この問題が分からないので教えて頂きたいです 幅2mm、長さ5mm、厚さ0.2mm 1 2023/06/21 22:24
- 物理学 円形電流を流した時の中心軸上z離れたところの磁束密度を求める問題なのですが、なぜdbが写真の向きにな 3 2022/10/27 00:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
電卓作成(緊急です!!)
-
65536は2の何乗なのでしょうか?
-
チューリングマシンの状態数に...
-
PHPの関数で、エクセルと共通す...
-
文章中の数値を自動で足すサー...
-
単価や利率などを設定画面を設...
-
エクセルVBAでゴールシークの C...
-
タクシー料金の問題です
-
ガウス積分について
-
時間差を求める
-
時間差の何分かを知りたいんですが
-
functionを含んだプログラムを...
-
この問題を解くために写真のよ...
-
数字の組み合わせ方法について...
-
VB6.0で逆ポーランド記法のソー...
-
fortranからgnuplotへ
-
エクセルの関数計算について
-
円形ボリュームのUIの実装方法
-
基本情報技術者試験の過去問に...
-
CとFORTRANの計算速度はどちら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
変化させるセルが変化しない
-
エクセルで特定のセルのみを任...
-
CとFORTRANの計算速度はどちら...
-
モジュロ
-
バッチファイルでウインドウを...
-
Visual C++でdebugとreleaseで...
-
y=(x^2 +3x+1)^4を微分の定義を...
-
入射角反射角
-
スレッド処理からダイアログを...
-
60進数の四則計算
-
Javaと他言語比較について
-
VBAで関数をつくる
-
C言語 Σをつかったプログラム
-
CRC8を教えてください
-
C言語についてです。 再帰を使...
-
C言語について 下の画像は do-w...
おすすめ情報