Как сделать 3D модель уравнения теплопроводности в Python? - PullRequest
1 голос
/ 27 мая 2020

Дано:

enter image description here

и

У нас есть формула:

enter image description here

Я создаю 3D-модель, но не могу указать условие вроде , когда x = 0 u (0, t) = 0

import math
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
def u(x,t,n):
    for i in range(1,n):
        alpha=((6*(-1)**i-30)/(i**2*np.pi**2))
        e=np.exp((-(np.pi**2)*(i**2)*t))
        sin=np.sin((i*np.pi*x)/3)
        u=alpha*e*sin
    return u

N=20
L = 4  # length
att = 20 # iteration

x = np.linspace(0, L ,N) #x-array
t = np.linspace(0, L, N) #t-array
X, Y = np.meshgrid(x, t)

Z = u(X, Y, att)

fig = plt.figure(figsize = (10,10))

ax = fig.add_subplot(111, projection='3d')

ax.plot_wireframe(X, Y, Z, rstride=10, cstride=1000)
plt.show()

Моя 3D-модель:

enter image description here

1 Ответ

1 голос
/ 27 мая 2020

Было бы полезно, если бы вы на самом деле вычисляли сумму в расчете частичной суммы Фурье, в тот момент, когда вы просто возвращаете последний член этой суммы.

def u(x,t,n):
    u = 0*x
    for i in range(1,n):
        alpha=((6*(-1)**i-30)/(i**2*np.pi**2))
        e=np.exp((-(np.pi**2)*(i**2)*t))
        sin=np.sin((i*np.pi*x)/3)
        u+=alpha*e*sin
    return u

Вы уверены в коэффициентах Фурье? Число 30 в нем для меня несколько подозрительно. Также частота кажется странной, продолжение u(x,0) должно быть нечетным прямоугольником angular волны периода 8. Обратите внимание, это a=3, но L=4.

...