# Python蒸发散物理问题(微积分-线性代数-拉普拉斯和傅立叶变换)

{% tabs %}
{% tab title="关键词" %}
Python | 数学 | Matplotlib | Numpy | 微积分 | 偏微分方程 | 线性代数 | 拉普拉斯 | 傅里叶变换 | 蒸发散 | 物理 | 土壤 | 植物 | 大气 | 气相 | 液相 | 传输方程 | 溶质 | 蒸腾作用
{% endtab %}

{% tab title="梗概" %}
使用Python计算解决土壤物理问题的数值。这里数值过程用于求解微分方程，数值方法将微分转化为代数方程，可以使用传统的线性代数方法求解。

### Python拉普拉斯变换求解微分方程示例

假设我们有微分方程

$$y^{\prime \prime}+2 y^{\prime}+16 y=\cos 4 t$$\


对于未知函数 y(t)。该方程描述了物理学中具有摩擦力的受迫振荡器。作为初始条件，我们选择 $$y(0)=y^{\prime}(0)=0$$。

拉普拉斯变换提供了求解此类方程的最方便的方法。首先，看看如果我们对未知函数的二阶导数进行拉普拉斯变换，会发生什么：

$$\begin{gathered} L\left(y^{\prime \prime}\right)=\int_0^{\infty} y^{\prime \prime}(t) e^{-p t} d t= \\ {\left[y^{\prime}(t) e^{-p t}\right]_0^{\infty}-(-p) \int_0^{\infty} y^{\prime}(t) e^{-p t} d t=} \\ p L\left(y^{\prime}\right)-y^{\prime}(0) \end{gathered}$$\


我们从第一行到第二行使用了部分积分。因此，我们可以通过乘以 $$\mathrm{p}$$ 并减去一阶导数的初始条件来替换二阶导数。对于 $$L\left(y^{\prime}\right)$$ 我们做同样的事情并得到：

$$L\left(y^{\prime}\right)=\int_0^{\infty} y^{\prime}(t) e^{-p t} d t=p L(y)-y(0)$$\
$$L\left(y^{\prime \prime}\right)=p^2 L(y)-p y(0)-y^{\prime}(0)$$

这使我们能够对整个微分方程进行拉普拉斯变换。让我们切换到 Python 并启动 Jupyter notebook。定义符号和微分方程，以及未计算的拉普拉斯变换：

```python
from sympy import *
​
t, p = symbols('t, p')
y = Function('y')
​
Y = laplace_transform(y(t), t, p)
​
eq = Eq(diff(y(t), (t, 2)) + 2 * diff(y(t), t) + 16*y(t), 
        cos(4*t))
```

```python
eq
```

$$16 y(t)+2 \frac{d}{d t} y(t)+\frac{d^2}{d t^2} y(t)=\cos (4 t)$$

```python
Y
```

$$\mathcal{L}_t[y(t)](p)$$

右侧看起来像这样：

```python
laplace_transform(eq.lhs, t, p )
```

$$p^2 \mathcal{L}_t[y(t)](p)+2 p \mathcal{L}_t[y(t)](p)-p y(0)+16 \mathcal{L}_t[y(t)](p)-2 y(0)-\left.\frac{d}{d t} y(t)\right|_{t=0}$$

对于 $$\left.\frac{d}{d t} y(t)\right|_{t=0}$$，使用 Subs 类，它表示表达式的未评估替换。这正是我们所需要的。所以我们的初始条件是

```python
initial ={
    y(0): 0,
    Subs(diff(y(t), t), t, 0): 0
}
```

现在我们可以将微分方程的拉普拉斯变换写为

```python
eq_p=Eq(
    laplace_transform(eq.lhs,t,p).subs(initial),
    laplace_transform(eq.rhs,t,p,noconds=True)
)
```

```python
eq_p
```

$$p^2 \mathcal{L}_t[y(t)](p)+2 p \mathcal{L}_t[y(t)](p)+16 \mathcal{L}_t[y(t)](p)=\frac{p}{p^2+16}$$

求解 L\[y]为：

```python
solve(_,Y)
```

\[p /(p \* \* 4+2 \* p \* \* 3+32 \* p \* \* 2+32 \* p+256)]

```python
sol_Y=_[0]
```

并从拉普拉斯变换回正常空间：

```
inverse_laplace_transform(sol_Y,p,t)
```

$$\frac{\left(15 e^t \sin (4 t)-4 \sqrt{15} \sin (\sqrt{15} t)\right) e^{-t} \theta(t)}{120}$$

稍微整理一下：

```python
expand(_)
```

$$\frac{\sin (4 t) \theta(t)}{8}-\frac{\sqrt{15} e^{-t} \sin (\sqrt{15} t) \theta(t)}{30}$$

```python
collect(_,Heaviside(t))
```

$$\left(\frac{\sin (4 t)}{8}-\frac{\sqrt{15} e^{-t} \sin (\sqrt{15} t)}{30}\right) \theta(t)$$

这是一个简洁的形式，我们将在此停止。 Heaviside $$\theta \theta$$ 函数使所有 t<0 的值等于 0，这是可以的，因为我们只需要 $$t \geq 0$$ 的解。

请注意，拉普拉斯方法会自动处理初始条件，而无需从通解中确定常数！这使得它比大多数其他方法舒服得多。

最后，让我们绘制解：

```python
p1=plot(_,(t,0,10),
		show=False,label='y(t)',legend=True,ylabel='')
p2=plot(cos(4*t),(t,0,10),show=False,label=r'$\cos4t$')
p1.append(p2[0])
p1.show()
```

上面的例子展示了如何解决具有齐次初始条件 $$\left(y(0)=y^{\prime}(0)=0\right)$$ 的问题。但拉普拉斯技术的使用当然不限于此。只需代入非齐次初始条件，求解 Y(p)，进行拉普拉斯逆变换，就得到了解 y(t)。

### 物理属性

土壤基质的几何形状、土壤结构、分形几何、孔隙空间的几何形状、比表面积、平均堆积密度、含水量和孔隙率、变量之间的关系、物理特性典型值 土壤棱柱的体积和体积分数、土壤固相、土壤质地、沉降定律

### 气相和气体扩散

传输方程、土壤中气体的扩散率、计算气体浓度、模拟土壤剖面中的一维稳态氧扩散、数值实现

### 温度和热流

热传导微分方程、土壤温度数据、热流方程的数值解、土壤热属性、数值实现

### 液相和土-水相互作用

水的性质、土壤水势、水势-含水量关系、液相和气相平衡

### 稳态水流和水力电导率

客孔介质中水的作用力、饱和土壤中的水流、饱和水力电导率、不饱和水力电导率

### 性质的变化

频率分布、概率密度函、转换、空间相关性、随机建模方法、数值实现

### 瞬态水流

质量守恒方程、水流、渗透、渗透数值模拟、数值实现

### 不规则三角网络

数字地形模型、不规则三角网络、数值实现、三角测量、GIS 函数、边界、三角形的几何性质、德劳内三角测量

### 三维水流

控制方程、数值公式、耦合地表流和地下流、数值实现、模拟、可视化和结果

### 蒸发

### 耦合传输建模

### 土壤中的溶质运移

### 蒸腾作用和植物-水的关系

### 大气边界条件
{% endtab %}

{% tab title="关联链接" %}
{% embed url="https://viadean.notion.site/Python-7f6125528042437089942a5eaaba31df?pvs=4" %}
{% endtab %}
{% endtabs %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
