teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

書式の改善

2021/09/09 07:48

投稿

ab-3
ab-3

スコア5

title CHANGED
@@ -1,1 +1,1 @@
1
- forループ使って指数関数の計算をしたい
1
+ TypeError:NoneType解決したい
body CHANGED
@@ -1,22 +1,97 @@
1
- 関数40exp(-ax)距離xを離散化し0.1m の距離微小距離dx間隔で原点0から100個の要素i分割たときある位置iおける関数をPyhtonにてforル使って計算したいです。また、最終的にその関数40exp(-ax)が時間に比例するときの計算たいです。時間も離散化されおり、0~0.1秒の間を時間刻み0.001秒で100個の要素nに分割しています。
2
- プログラミング経験がなくネットでいろいろと調べてコードを書いてたのですが、計算したところprint内のmath.40*exp(-a*x)*tが**文字**とし100個表示されるだけでした。iよびnの部分をそれぞれ0.1.2.3....と増やしていきexpの計算結果を出力るためにはどのように設定すればよいでょうか
3
- とても基礎的内容だとは思すが、間違等教え頂きたです
1
+ プログラミング未経験者です。以下リンク科学技術計算講座3-熱伝導方程式シミュレーションリンク内容参考にし厚さ1mmのSi材料ザー光一定時間照射したときの試料の温度分布求めたいと思っています。
2
+ 試料は一次元(深さ)方向のみ考えており位置i、時間nそれぞれを離散化してい。(照射)時間比例、深さ方向に対して指数関数的減少するレーザー光の吸収熱Qを設定し、一次元非定常熱伝導方程式をもとにFTCS差分式の右辺第1項に足しました
3
+ 計算を行ったころ、#①の吸収熱Q のみが計算され#②の部分でTypeError:unsupported operand type(s) for +:'NoneType'and'float'が表示されました。#②の計算式の中で#①で設定した吸収熱QがNoneTypeとなっおり、ほかのtemp[i]どに足せなため、returnで関数に実態をもたせる必要があると調べてみて考えたのですが、プログラミング経験がなこともあり、具体的な解決策が分かっていません
4
+ 基礎的なところかと思いますが、ご回答いただけるとありがたいです。
4
5
 
5
- コードの情報(lx:さ、dx :空間分割の幅、nx:空間分割点数 、tend:計算期間、dt:時間刻み、nt :時間のステップ数)
6
+ コードの情報(lx:さ、dx :空間分割の幅、nx:空間分割点数 、tend:計算期間、dt:時間刻み、nt :時間のステップ数)
6
7
 
8
+ ```import matplotlib.pyplot as plt
9
+ import matplotlib.animation as animation
10
+ import numpy as np
11
+
12
+ # input parameter(材料をSiに変更、厚さ1㎜、a:吸収係数、微小間隔 dx:10㎛、計算期間1μs、時間間隔1nsに変更、表面温度を固定しないためtemp_bcを消去)
13
+ den = 2330.0
14
+ cp = 678.0
15
+ cond = 83.7
16
+ temp_init = 0.0
7
- ```lx = 0.001
17
+ lx = 0.001
8
18
  nx = 101
9
19
  tend = 0.000001
10
20
  dt = 0.000000001
21
+ tout =0.000001
22
+ a=0.064
23
+ alpha = cond / (den * cp)
11
24
  dx = lx / (nx - 1)
12
25
  nt = int(tend / dt)
13
- a=0.064
26
+ nout = int(tout / dt)
14
27
 
28
+
29
+ # ①レーザー光照射による吸収熱Qの設定 ※50ns間照射して表面温度2000℃を想定
15
30
  for i in range(1, nx-1):
16
31
  x=dx*i
17
32
 
18
33
  for n in range(1, nt+1):
19
34
  t=dt*n
20
- print("math.40*exp(-a*x)*t")
35
+ Q=print(40000000000*t*pow(2.718281828,-a*x))
21
36
 
37
+
38
+
39
+ # レーザー光照射時間の指定
40
+ t_intv= 0.00000005
41
+
42
+
43
+ #initial condition
44
+ temp = np.full(nx, temp_init)
45
+ time = 0.0
46
+
47
+ temp_new = np.zeros(nx)
48
+
49
+ # Boundary condition(表面温度temp[0]固定の# Dirichlet @ x=0条件をNeumann条件に変更)
50
+ temp[0] = temp[1]
51
+ temp[nx-1] = temp[nx-2] # Neumann @ x=Lx
52
+
53
+ # graph data array
54
+ ims = []
55
+ fig = plt.figure()
56
+ ax = fig.add_subplot(1, 1, 1)
57
+
58
+ gx = np.zeros(nx)
59
+ for i in range(nx):
60
+ gx[i] = i * dx
61
+
62
+ # time loop
63
+ for n in range(1, nt+1):
64
+
65
+ #② FTCS差分式(右辺第一項に吸収熱を設定/0~50nsの間だけ照射、それ以降はQ=0))
66
+ for i in range(1, nx-1):
67
+ if time < t_intv :
68
+ temp_new[i] = Q+temp[i] + dt * alpha * (temp[i+1] - 2.0 * temp[i] + temp[i-1]) / (dx * dx)
69
+ else :
70
+ temp_new[i] = temp[i] + dt * alpha * (temp[i+1] - 2.0 * temp[i] + temp[i-1]) / (dx * dx)
71
+
72
+ # update
73
+ for i in range(1, nx-1):
74
+ temp[i] = temp_new[i]
75
+
76
+ # Boundary condition(表面温度temp[0]固定の# Dirichlet @ x=0条件をNeumann条件に変更)
77
+ temp[0] = temp[1]
78
+ temp[nx-1] = temp[nx-2] # Neumann @ x=Lx
79
+
80
+ time += dt
81
+
82
+ if n % nout == 0:
83
+ print('n: {0:7d}, time: {1:8.1f}, temp: {2:10.6f}'.format(n, time, temp[nx-1]))
84
+ im_line = ax.plot(gx, temp, 'b')
85
+ im_time = ax.text(0, 110, 'Time = {0:8.1f} [s]'.format(time))
86
+ ims.append(im_line + [im_time])
87
+
88
+ # graph plot
89
+ ax.set_xlabel('x [m]')
90
+ ax.set_ylabel('Temperature [C]')
91
+ ax.grid()
92
+ anm = animation.ArtistAnimation(fig, ims, interval=50)
93
+ anm.save('animation.gif', writer='pillow')
94
+ plt.show()
95
+
96
+
22
97
  ```

6

書式の改善

2021/09/09 07:48

投稿

ab-3
ab-3

スコア5

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  関数40exp(-ax)の距離xを離散化し、0.1m の距離を微小距離dx間隔で原点0から100個の要素iに分割したとき、ある位置iにおける関数をPyhtonにてforループを使って計算したいです。また、最終的にその関数40exp(-ax)が時間に比例するときの計算をしたいです。時間も離散化されており、0~0.1秒の間を時間刻み0.001秒で100個の要素nに分割しています。
2
- プログラミングの経験がなくネットでいろいろと調べてコードを書いてみたのですが、計算したところprint内のmath.40*exp(-a*dx*i)およびmath.40*exp(-a*dx*i)*dt*n が文字としてそれぞれ100個表示されるだけでした。iおよびnの部分をそれぞれ0.1.2.3....と増やしていきexpの計算結果を出力するためにはどのように設定すればよいでしょうか。
2
+ プログラミングの経験がなくネットでいろいろと調べてコードを書いてみたのですが、計算したところprint内のmath.40*exp(-a*x)*tが**文字**として100個表示されるだけでした。iおよびnの部分をそれぞれ0.1.2.3....と増やしていきexpの計算結果を出力するためにはどのように設定すればよいでしょうか。
3
3
  とても基礎的な内容だとは思いますが、間違い等教えて頂きたいです。
4
4
 
5
5
  コードの情報(lx:長さ、dx :空間分割の幅、nx:空間分割点数 、tend:計算期間、dt:時間刻み、nt :時間のステップ数)

5

書式の改善

2021/09/09 06:33

投稿

ab-3
ab-3

スコア5

title CHANGED
File without changes
body CHANGED
@@ -6,20 +6,17 @@
6
6
 
7
7
  ```lx = 0.001
8
8
  nx = 101
9
- tend = 0.1
9
+ tend = 0.000001
10
- dt = 0.001
10
+ dt = 0.000000001
11
11
  dx = lx / (nx - 1)
12
12
  nt = int(tend / dt)
13
13
  a=0.064
14
14
 
15
- #関数
16
15
  for i in range(1, nx-1):
17
- print("math.40*exp(-a*dx*i)")
16
+ x=dx*i
18
17
 
19
-
20
- # 上記の関数が時間(dt*n)に比例
21
18
  for n in range(1, nt+1):
19
+ t=dt*n
22
- print("math.40*exp(-a*dx*i)*dt*n")
20
+ print("math.40*exp(-a*x)*t")
23
21
 
24
-
25
22
  ```

4

書式の改善

2021/09/09 06:31

投稿

ab-3
ab-3

スコア5

title CHANGED
@@ -1,1 +1,1 @@
1
- forループを使って離散化された一次元空間の関数を求めたい
1
+ forループを使って指数関数の計算たい
body CHANGED
File without changes

3

書式の改善

2021/09/09 06:00

投稿

ab-3
ab-3

スコア5

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  関数40exp(-ax)の距離xを離散化し、0.1m の距離を微小距離dx間隔で原点0から100個の要素iに分割したとき、ある位置iにおける関数をPyhtonにてforループを使って計算したいです。また、最終的にその関数40exp(-ax)が時間に比例するときの計算をしたいです。時間も離散化されており、0~0.1秒の間を時間刻み0.001秒で100個の要素nに分割しています。
2
- プログラミングの経験がなくネットでいろいろと調べてコードを書いてみたのですが計算できませんでし
2
+ プログラミングの経験がなくネットでいろいろと調べてコードを書いてみたのですが計算したところprint内のmath.40*exp(-a*dx*i)およびmath.40*exp(-a*dx*i)*dt*n が文字としてそれぞれ100個表示されるだけした。iおよびnの部分をそれぞれ0.1.2.3....と増やしていexpの計算結果を出力するためにはどのように設定すればよいでしょうか
3
3
  とても基礎的な内容だとは思いますが、間違い等教えて頂きたいです。
4
4
 
5
5
  コードの情報(lx:長さ、dx :空間分割の幅、nx:空間分割点数 、tend:計算期間、dt:時間刻み、nt :時間のステップ数)

2

書式の改善

2021/09/09 05:57

投稿

ab-3
ab-3

スコア5

title CHANGED
File without changes
body CHANGED
@@ -14,12 +14,12 @@
14
14
 
15
15
  #関数
16
16
  for i in range(1, nx-1):
17
- print(math.40*exp(-a*dx*i))
17
+ print("math.40*exp(-a*dx*i)")
18
18
 
19
19
 
20
20
  # 上記の関数が時間(dt*n)に比例
21
21
  for n in range(1, nt+1):
22
- print(math.40*exp(-a*dx*i)*dt*n)
22
+ print("math.40*exp(-a*dx*i)*dt*n")
23
23
 
24
24
 
25
25
  ```

1

書式の改善

2021/09/09 05:50

投稿

ab-3
ab-3

スコア5

title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
  nt = int(tend / dt)
13
13
  a=0.064
14
14
 
15
- 1
15
+ 関数
16
16
  for i in range(1, nx-1):
17
17
  print(math.40*exp(-a*dx*i))
18
18