BNU-FZH

fengzhenhua@outlook.com

ArchLinux是一款灵活、强大、可定制的Linux发行版,提供丰富的软件包和工具,支持滚动更新和多种桌面环境,拥有庞大的社区支持和方便的包管理器,适合各种用户需求和使用场景。Endeavour 是一个基于ArchLinux的轻量级和用户友好的发行版,预装了桌面环境和预配置的软件包,旨在提供一个无忧的ArchLinux体验。

阅读全文 »

现在我们来关注黎曼曲率。总的来说,黎曼曲率提供了一种方案,让身处空间内部的人也能计算自身所处空间的弯曲程度。俗话说,“不识庐山真面目,只缘身在此山中”,还有“当局者迷,旁观者清”,等等,因此,能够身处空间之中而发现空间中的弯曲与否,是一件很了不起的事情,就好像我们已经超越了我们现有的空间,到了更高维的空间去“居高临下”那样。真可谓“心有多远,路就有多远,世界就有多远”。

如果站在更高维空间的角度看,就容易发现空间的弯曲。比如弯曲空间中有一条测地线,从更高维的空间看,它就是一条曲线,可以计算曲率等,但是在原来的空间看,它就是直的,测地线就是直线概念的一般化,因此不可能通过这种途径发现空间的弯曲性,必须有一些迂回的途径。可能一下子不容易想到,但是各种途径都殊途同归后,就感觉它是显然的了。

怎么更好地导出黎曼曲率来,使得它能够明显地反映出弯曲空间跟平直空间的本质区别呢?为此笔者思考了很长时间,看了不少参考书(《引力与时空》、《场论》、《引力论》等),比较了几种导出黎曼曲率的方式,简要叙述如下.

求导顺序不能乱

一般的张量分析或者黎曼几何教材中,导出黎曼曲率的方式是考虑二阶协变导数顺序的差别: \[\begin{equation}\label{eq:reimann0} A^\mu_{;\alpha;\beta}-A^\mu_{;\beta;\alpha}=-R^\mu_{\nu\alpha\beta}A^\nu \end{equation}\]

由此可以分离出黎曼曲率张量\(R^\mu_{\nu\alpha\beta}\)来,这确实是一种爽快的途径,但它的几何意义并不明显,很难看出它是怎么反映空间是曲还是直的。而且我们现在还没有定义二阶协变导数(一次协变导数后有两个指标,即相当于一个矩阵而不是向量了,定义高阶协变导数需要细节上的跟进),而这个定义基本上是纯粹代数演算,目前对我们来说意义不大,因此我们这里不作定义,读者直接参考教材即可,所以我们也不对这种方案多作讨论。

在弯曲空间邂逅

此外,还有通过测地线偏离(在广义相对论中对应于潮汐力)来导出黎曼曲率的,那也算是一种几何意义和物理意义都很明确的方案,但是涉及到的计算比较繁琐。主要思路是:考虑测地线方程 \[\begin{equation}\label{eq:cedixian0} \frac{d^2x^\mu}{ds^2}+\Gamma^\mu_{\alpha\beta}(x)\frac{dx^\alpha}{ds}\frac{dx^\beta}{ds}=0 \end{equation}\] 假设有另一条测地线\(x(s)+\delta{x}(s)\), 那么定满足方程 \[\begin{equation}\label{eq:cedixian1} \frac{d^2(x^\mu+\delta{x^\mu})}{ds^2}+\Gamma^\mu_{\alpha\beta}(x+\delta{x})\frac{d(x^\alpha+\delta{x^\alpha})}{ds}\frac{d(x^\beta+\delta{x^\beta})}{ds}=0 \end{equation}\] 假设\(\delta{x}\)\(d\delta{x}/ds\)都是无穷小量,两式作差,得到 \[\begin{equation}\label{eq:cedixian2} \frac{d^2\delta{x^\mu}}{ds^2}+\frac{\partial\Gamma^\mu_{\alpha\beta}}{\partial{x^\nu}}\delta{x^\nu}\frac{dx^\alpha}{ds}\frac{x^\beta}{ds}+2\Gamma^\mu_{\alpha\beta}\frac{d\delta{x^\alpha}}{ds}\frac{dx^\beta}{ds}=0 \end{equation}\] 其中\(\delta{x}\)就被称为测地线偏离,在黎曼几何中,称之为“雅可比向量场”。上述形式已经足够简单,然而,我们倾向于写成协变导数的形式,因为协变导数才是在弯曲空间中合理的导数,前面我们已经定义了沿测地线的导数\(\frac{DA^\mu}{Ds}\), 重复一次,我们就能够得到沿测地线的二阶导数\(\frac{D^2A^\mu}{Ds^2}=\frac{D}{Ds}\left(\frac{DA^\mu}{Ds}\right)\), 这是容易办到的,但因为我们这里不是特别关心这种方案,因此就不写出\(\frac{D^2A^\mu}{Ds^2}\)的具体形式了,读者可以自己推导。经过计算后,就会发现 \[\begin{equation}\label{eq:cedixian3} \frac{D^2\delta{x^\mu}}{Ds^2}=-R^\mu_{\nu\alpha\beta}\delta{x^\alpha}\frac{dx^\nu}{ds}\frac{dx^\beta}{ds} \end{equation}\] 这就出现了曲率张量\(R^\mu_{\nu\alpha\beta}\)。从数学来看,非零的\(R^\mu_{\nu\alpha\beta}\)实际上表明了测地线分布的不均匀,这就是弯曲空间的体现之一。

这种方案让笔者想起了几米的漫画作品《向左走·向右走》,说的是男女主角一个习惯向左走,一个习惯向右走,于是他们两个看起来永远不会相遇。但有一天他们在圆形喷水池相遇了——在圆的一端背向行走,最终在圆的另一端相遇了。而在弯曲空间中,比如在球面上,即便两条平行线也有相交的机会。这其实表明,“弯曲”其实更为深刻和有趣,它给予了我们世界更多的可能性。

"溜达"回来的变化

最后还有一种分析向量沿着闭合曲线平移后的变化的方案,我们在这里详细分析它。事实上它跟测地线偏离是等价的,只是它的几何意义更加明显,有助于导出更为深刻的结果。它表明,如果一个向量“溜达”一圈回来之后,它就不一定是原来的向量了。下图的例子就清晰表明了这一点。 溜达回来的变化

假设\(x^\mu\)处有任意一个向量\(A_\mu\),从\(x^\mu\)出发,先平移无穷小量\(dx^\mu\),再平移无穷小量\(\delta{x^\mu}\),然后再平移无穷小量\(−dx^\mu\),最后平移无穷小量\(-\delta{x^\mu}\),也就是沿着一个无穷小的平行四边形走了一圈,回到原点: \[\begin{equation}\label{eq:cedixian4} x^\mu\to x^\mu+dx^\mu \to x^\mu+dx^\mu+\delta{x^\mu} \to x^\mu+\delta{x^\mu} \to x^\mu \end{equation}\]

我们逐步计算平移过程中\(A^\mu\)的变化,从\(x^\mu\)\(x^\mu+dx^\mu\)\(A_\mu\)变为 \[\begin{equation}\label{eq:cedixian5} A^\mu-\Gamma^\mu_{\alpha\beta}(x)A^\alpha dx^\beta \end{equation}\] 接着从\(x^\mu+dx^\mu\)\(x^\mu+dx^\mu+\delta{x^\mu}\), \(A^\mu\)变为 \[\begin{align}\label{eq:cedixian6} A^\mu&-\Gamma^\mu_{\alpha\beta}(x)A^\alpha dx^\beta-\Gamma^\mu_{\nu\gamma}(x+dx)\left[A^\nu-\Gamma^\nu_{\alpha\beta}(x)A^\alpha dx^\beta\right]\delta{x^\gamma} \notag \\ &=A^\mu-\Gamma^\mu_{\alpha\beta}(x)A^\alpha dx^\beta-\Gamma^\mu_{\nu\gamma}(x)A^\nu\delta{x^\gamma}-\frac{\partial\Gamma^\mu_{\nu\gamma}(x)}{\partial x^\beta}A^\nu d{x^\beta}\delta{x^\gamma} \notag \\ &\quad +\Gamma^\mu_{\nu\gamma}(x)\Gamma^\nu_{\alpha\beta}(x)A^\alpha dx^\beta \delta{x^\gamma} \end{align}\] 这里我们只精确到二阶项。类似地,如果考虑路径\(x^\mu\to x^\mu+\delta{x^\mu}\to x^\mu+dx^\mu+\delta{x^\mu}\)所带来的变化,则只需要将\(dx\)\(\delta{x}\)交换 \[\begin{equation}\label{eq:cedixian7} A^\mu-\Gamma^\mu_{\alpha\beta}(x)A^\alpha \delta{x^\beta}-\Gamma^\mu_{\nu\gamma}(x)A^\nu d{x^\gamma} -\frac{\partial\Gamma^\mu_{\nu\gamma}(x)}{\partial x^\beta}A^\nu \delta{x^\beta}d{x^\gamma}+\Gamma^\mu_{\nu\gamma}(x)\Gamma^\nu_{\alpha\beta}(x)A^\alpha \delta{x^\beta} d{x^\gamma} \end{equation}\] 那么很自然地,路径\(x^\mu+dx^\mu +\delta{x^\mu}\to x^\mu+\delta{x^\mu} \to x^\mu\)所造成的变化就是上式的相反数。于是,整条闭合路径\(x^\mu \to x^\mu+dx^\mu \to x^\mu+dx^\mu+\delta{x^\mu} \to x^\mu+\delta{x^\mu}\to x^\mu\)所带来的变化就是两式这差。调整一下求和指标,然后作差,不难得到 \[\begin{align}\label{eq:cedixian8} \Delta{A^\mu}&=-\left(\frac{\partial\Gamma^\mu_{\alpha\gamma}}{\partial x^\beta}-\frac{\partial \Gamma^\mu_{\alpha\beta}}{\partial x^\gamma}+\Gamma^\mu_{\nu\beta}\Gamma^\nu_{\alpha\gamma}-\Gamma^\mu_{\nu\gamma}\Gamma^\nu_{\alpha\beta}\right)A^\alpha dx^\beta\delta{x^\gamma} \notag \\ &=-R^\mu_{\alpha\beta\gamma}A^\alpha dx^\beta\delta{x^\gamma} \end{align}\] 这里 \[\begin{equation}\label{eq:cedixian9} R^\mu_{\alpha\beta\gamma}=\frac{\partial\Gamma^\mu_{\alpha\gamma}}{\partial x^\beta}-\frac{\partial \Gamma^\mu_{\alpha\beta}}{\partial x^\gamma}+\Gamma^\mu_{\nu\beta}\Gamma^\nu_{\alpha\gamma}-\Gamma^\mu_{\nu\gamma}\Gamma^\nu_{\alpha\beta} \end{equation}\] 就是黎曼曲率张量的定义式了,它有4个指标,是一个非常“宏伟”的量。

一句话来说

三种不同的黎曼曲率张量的导出方式,分别从三个角度表明了弯曲空间与平直空间的区别:平直空间中,协变导数的次序是可以交换的,弯曲空间则不是;平直空间中,测地线分布的均匀的、线性的,弯曲空间则不是;平直空间中,一个向量去“溜达”一圈回来之后,并没有变化,而弯曲空间中,向量去“溜达”完之后,可能就不是原来的向量了。

https://spaces.ac.cn/archives/4014

由于最近入手了一款Logitech的无线机械键盘k865, 在Archlinux下使用非常好,所幸使用pacmanparu查询了一下关于Logitech在Archlinux下相关的软件,然后就发现了这款Archlinux官方仓库中的软件solaar.

简介

Solaar 是一款专为 Linux 系统设计的 Logitech 设备管理工具,支持多种 Logitech 键盘、鼠标及其他无线设备。无论是通过 Unifying、Bolt、Lightspeed 或 Nano 接收器连接的设备,还是通过 USB 线缆或蓝牙连接的设备,Solaar 都能轻松管理。Solaar 并非设备驱动程序,而是通过响应 Linux 输入系统忽略的特殊消息来实现其功能。

使用场景

  1. 多设备管理:对于拥有多款 Logitech 设备的用户,Solaar 提供了一个集中管理平台,方便用户统一管理所有设备。
  2. 设备配置:用户可以通过 Solaar 轻松配置设备的各项设置,如按键映射、灵敏度调整等。
  3. 自动化规则:Solaar 支持根据设备消息自动运行预设规则,适用于需要自动化操作的场景。
  4. 设备维护:Solaar 可以帮助用户快速诊断和解决设备连接问题,提升设备使用体验。

项目特点

  • 多设备支持:Solaar 支持多种 Logitech 设备,无论是无线还是有线设备,都能轻松管理。
  • 灵活配置:用户可以根据个人需求自定义设备设置,满足不同使用场景的需求。
  • 自动化规则:通过设置自动化规则,Solaar 能够根据设备状态自动执行特定操作,提升工作效率。
  • 跨平台兼容:Solaar 完全兼容 Linux 系统,适用于各种 Linux 发行版。
  • 开源免费:Solaar 是一款开源软件,用户可以免费使用并参与项目开发。

Archlinux 下安装和使用

1
2
sudo pacman -S solaar
sudo solaar

虽然solaar建立了启动器图标,但是默认并没有root权限,在使用的时候请在命令行中使用sudo solaar命令打开软件,这样才能看到电脑连接的 Logitech 设备,并设置。

参考文章

简介

在 Linux 中,一个 .desktop 文件就是一个用来运行程序的快捷方式。没有 .desktop 的话,你的应用就不会在应用菜单中显示了,也无法使用像 Synapse 和 Albert 这样的第三方启动起启动了。

大多数应用在安装后都会自动创建 .desktop 文件,并将自己放入应用菜单中以方便访问。然而,如果是你自己从源代码中编译的程序或者自己下载的压缩格式的应用,那就不会做这些事情了,每次你都需要打开终端来执行它的二进制文件。显然这个过程很无聊也很麻烦。

本文将会告诉你如何为应用创建 .desktop 文件,从而让你能在应用菜单中启动该应用。

创建启动器

.desktop 文件基本上就是一个包含程序信息的纯文本文件,通常根据是自己可见还是所有用户可见的不同而放在 ~/.local/share/applications 或者 /usr/share/applications/ 目录中。你在文件管理器中访问这两个目录,都会看到很多系统中已安装应用对应的 .desktop 文件存在。

为了演示,我将会为 Super Tux Kart 创建一个 .desktop 文件,这是一个我很喜欢玩的卡丁车竞赛游戏。Ubuntu 仓库中带了这个游戏,但版本一般不新。

要获得最新的版本就需要下载 tar 包,解压并执行其中的游戏启动文件。

你可以仿照这个步骤来为任何程序创建启动器。

注意:下面步骤假设程序压缩包放在 “Downloads” 目录下。

  1. 跳转到存放压缩包的目录,右击然后选择 “Extract here”。
application-launcher-5
  1. 解压后,进入新创建的目录然后找到可执行的文件。之后右击文件选择 “Run” 来启动程序,确定程序运行正常。
application-launcher-6
  1. 有时候,你在右键菜单中找不到 “Run” 选项。这通常是因为这个可执行文件是一个文本文件。你可以在终端中执行它,如果你使用 GNOME 的话,可以点击上面菜单栏中的 Files 菜单,然后选择 “Preferences”。
application-launcher-linux-1
  1. 选择 “Behavior” 标签页然后选择 “Executable Text Files” 下的 “Run them”。现在右击可执行文本文件后也能出现 “Run” 选项了。
application-launcher-31
  1. 确认应用运行正常后,就可以退出它了。然后运行你的文本编辑器并将下面内容粘贴到空文本文件中:
    1
    2
    3
    4
    5
    6
    7
    8
    [Desktop Entry]
    Encoding=UTF-8
    Version=1.0
    Type=Application
    Terminal=false
    Exec=/path/to/executable
    Name=Name of Application
    Icon=/path/to/icon

你需要更改 “Exec” 域的值为可执行文件的路径,并且将 “Name” 域的值改成应用的名称。大多数的程序都在压缩包中提供了一个图标,不要忘记把它也填上哦。在我们这个例子中,Super Tux Kart 的启动文件看起来是这样的:

application-launcher-supertuxkart
  1. 将文件以 application-name.desktop 为名保存到 ~/.local/share/applications 目录中。.local 目录位于你的家目录下,是一个隐藏目录,你需要启用 “Show Hidden Files” 模式才能看到它。如果你希望这个应用所有人都能访问,则在终端中运行下面命令:
    1
    sudo mv ~/.local/share/applications/<application-name`.desktop`> /usr/share/applications/

当然,别忘了把命令中的 <application-name.desktop> 改成真实的 .desktop 文件名。

  1. 完成后,打开应用菜单,就能看到应用出现在其中,可以使用了。
application-launcher-2

这个方法应该适用于所有主流的 Linux 操作系统。下面是另一张 Super Tux Kart 在 elementary OS 的应用启动器 (slingshot) 上的截图

application-launcher-4

简介

Stirling-PDF 是一个基于 spring-boot 开发的开源项目,旨在提供一个功能强大本地托管的 PDF 操作工具。它使您能够对 PDF 文件进行多种操作,包括拆分、合并、转换、重新组织、添加图片、旋转、压缩等。该本地托管应用最初由 ChatGPT 完全开发,并已发展成一个功能齐全的工具,可满足您的各种 PDF 需求。

日常生活中经常需要处理 PDF 文件, 当前也有好多处理 PDF 的在线工具,但要么需要会员,要么需要登录等繁琐操作,而且我们的文件也存在泄漏等安全隐患。由于 Stirling-PDF 是一个可以托管到本地的操作工具,对于不习惯使用 pdftk 命令的朋友,安装此软件将是一个相当正确的选择。

Linux 下的安装使用

使用 paru 安装

在 ArchLinux 下安装 Stirling-PDF 是一件相当容易的事情,因为 Stirling-PDF 可以在 Aur 仓库找到,只需要一条命令即可:

1
paru -S stirling-pdf-bin

注意:Stirling-PDF 依赖于最新版的 libreoffice-fresh, 所以安装前把 libreoffice-still 替换为 libreoffice-fresh.

手动启动

起动、停止和重启服务

1
2
3
4
sudo systemctl status stirlingpdf.service
sudo systemctl start stirlingpdf.service
sudo systemctl stop stirlingpdf.service
sudo systemctl restart stirlingpdf.service

使用

  • 启动服务sudo systemctl start stirlingpdf.service
  • 游览器打开:http://localhost:8080
  • 关闭服务sudo systemctl stop stirlingpdf.service
  • 因为处理PDF文件对于个人来讲不是高频率操作,所以手动操作即可。如查想设置为默认启动,请执行
    1
    sudo systemctl enable stirlingpdf.service

参考网站

此处给出几个测试网站,可以使用,但是

Windows 下安装使用

下载Windows版

本节研究使用Odeint解微分方程,并保存为csv数据的方法。本节以官网odeint上的一个例子,写出添加保存数据后的代码。所求解的微分方程为

\[\begin{equation}\label{eq:odeint} \theta''(t)+b\theta'(t)+c\sin(\theta) = 0 \end{equation}\]

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /usr/bin/env python3
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from sympy.abc import t
import pandas as pd

b = 0.25
c = 5.0
y0 = [np.pi-0.1, 0.0]

def spend(y, t, b, c):
theta, omega = y
dydt = [ omega, -b*omega-c*np.sin(theta)]
return dydt

t = np.linspace(0, 15, 1001)
sol = odeint(spend, y0, t, args=(b,c))

# 保存数据
#
u = pd.DataFrame(sol)
u.to_csv('func.csv')

# 及时绘图
plt.plot(t, sol[:, 0], 'b', label='theta(t)')
plt.plot(t, sol[:, 1], 'g', label='omega(t)')
plt.legend(loc='best')
plt.grid()
plt.show()

注意:使用odeint求解完微分方程后,返回结果sol, 其为 \(1001\times 2\) 的数组,可以直接使用DataFrame生成表格数据并保存为func.csv文件,之后再使用veusz绘图。

参考文章

简介

在科研工作中需要求解一些方程,这些方程除了数值解法外没有更好的求解方式,所以通过 Python 或其他程序将函数的映射关系保存为一个 csv 文件,然后随时都可以用绘图软件作图显示。如果不保存数据,每次分析或交流时都要重新跑一遍程序,显然在时间上是不合算的,所以必须将复杂方程的结果保存下来。本文介绍使用 Python 保存函数图象为 csv文件的操作流程。

实例

python3 源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#! /usr/bin/env python3
from os import walk
import numpy as np
import matplotlib.pyplot as plot
from pylab import *
import pandas as pd
import math
import tkinter as tk

x0=-0.2 #初始值z0的x0
y0=0 #初始值z0的y0
a=4 #绘制图的横轴大小
step=0.01 #绘制点的步长
zoom=1.0 #放大倍率

x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step)
y=x**2+2*x+1
z=3*np.sin(x)

data = {
`xd': x ,
'yd': y ,
'zd': z
}
u = pd.DataFrame(data)
u.to_csv('func.csv')

编程思路

  • x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step) 建立自变量等间隔划分的一个列向量.
  • y=x**2+2*x+1 根据自变量建立了一个二元函数映射列向量.
  • z=3*np.sin(x) 根据自变量建立了一个三解函数映射列向量.
  • 使用三组列向量构建数据表格 data.
  • 使用pandasDataFrame函数建立data对应的数据,并保存为func.csv文件.
  • 使用veusz导入func.csv,选择对应的列数据便可以绘制相应的函数图象.

参考文章

原本使用 Linux 和 Windows11 双系统电脑工作的非常好,直到有一天我更换了 4k 显示器,这时 Grub 尽管可以配置成 WhiteSur 主题,也相当美观,但是每次开机时显示这个 4k 的背景图片都相当慢。如果不使用主题,命令行的启动方式有些不友好,于是决定尝试安装另一个引导加载程序 refind, 因为它默认的配置下启动采用图形模式,同时也要注意它只支持 uefi.

安装

1
2
sudo pacman -S refind
sudo refind-install

注意:不必担心引导多系统的问题,它也能像grub一样自动检测电脑各硬盘中安装的操作系统,并自动添加到启动菜单中。

安装主题

下载安装主题

1
2
3
git clone git@github.com:lukechilds/refind-ambience.git
sudo mkdir /boot/efi/EFI/refind/themes
sudo cp -r refind-ambience /boot/efi/EFI/refind/themes/

启用主题

在文件/boot/efi/EFI/refind/refind.conf的最后添加上如下启用主题配置

/boot/efi/EFI/refind/refind.conf
1
include themes/refind-ambience/theme.conf

卸载 Grub

Before removing grub, make sure that some other boot loader is installed and configured to take over.

$ efibootmgr
1
2
3
4
Boot0000* Windows Boot Manager  HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)
Boot0001* GRUB HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\GRUB\grubx64.efi)
Boot0002* Linux-Firmware-Updater HD(2,GPT,5dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\arch\fwupdx64.efi)
Boot0003* Linux Boot Manager HD(2,GPT,4dabbedf-191b-4432-bc09-8bcbd1d7dabf,0x109000,0x32000)/File(\EFI\systemd\systemd-bootx64.efi)

If BootOrder has grub as the first entry, install another bootloader to put it in front, such as systemd-boot above. grub can then be removed using its bootnum.

1
sudo efibootmgr --delete-bootnum -b 1

注意:如果您不想删除Grub,那也可以在/boot/efi/EFI/refind/refind.conf 查找dont_scan_dirs, 然后把不想显示的Grub菜单启动项添加在这里。由于EFI分区空间只有500M, 所以在使用熟练后还是建议只保留一个引导程序。

参考文章

程序源代码

由于毕业论文要切换成非线性的缘故,需要我拿出一些时间来研究绘制各种分叉图。下面举一个例子来说明绘图的思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from tqdm import tqdm
import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure(figsize=(10,8),dpi=100)
def LogisticMap():
mu = np.arange(0, 4, 0.01)
x = 0.1 # 初值
iters = 1000 # 不进行输出的迭代次数
last = 200 # 最后画出结果的迭代次数
for i in tqdm(range(iters+last)):
x = mu * x * (1 - x)
if i >= iters:
plt.plot(mu, x, alpha=0.5) #
plt.ylim(0, 1)
plt.xlim(0, 4)
plt.title(r' $x_{n+1} = \mu x_{n} (1-x_{n}).$ n = '+ str(i+1) )
plt.ylabel('x-Random number')
plt.xlabel('r-Rate')
plt.show()
LogisticMap()

绘图分析

  1. 绘图的叠代公式 \[\begin{equation}\label{eq:diedai} x_{n+1}=\mu x_n(1-x_n) \qquad 0\leq \mu\leq 4, 0<x<1 \end{equation}\]

  2. 将参数\(\mu\)\(0\)\(4\)均分成\(100\)份,然后将其作为自变量,遍历区间取值。

  3. 对于任意一个\(\mu\)值,选择初值 \(x_0=0.1\), 使用式\(\eqref{eq:diedai}\)叠代\(1000\)次, 但是这些叠代值并不输出, 然后输出\(1001\)次到\(1200\)次的叠代结果。 其原理为:如果参数\(\mu\)在某个值时,无数次叠代后它会收敛到某个值附近,那这样的点就是一个嘛吸引点。但是,有的点以无数次叠代后仍然不收敛,所以在固定一个较大的次数\(1000\)后,再叠代\(100\)次, 将这\(100\)次的结果输出,就能判断这\(100\)个点的分布情况。

当光入射到样品上,入射光子与样品中的分子或原子发生碰撞散射改变运动方向。根据光子能量是否发生变化分为弹性散射非弹性散射

弹性散射

光子能量没有发生变化的散射叫弹性散射。弹射散射有Rayleigh scattering)和Mie scattering)。当散射微粒的直径远小于入射光波长时,一般小于波长\(1/10\),发生瑞利散射,强度与波长四次方成反比。当微粒尺寸增大到与波长相当时,发生米氏散射,强度与波长二次方成反比,且随着微粒增大,散射强度变弱。半导体中的弹性散射多为瑞利散射。

非弹性散射

光子能量的散射叫非弹性散射。非弹性散射中,散射光子能量减小的散射称为斯托克斯散射(Stokes),散射光子能量增加的散射称为反斯托克斯散射(Anti-Stokes)。散射光能量的改变与半导体中的声子有关,光学声子(Optical photon,OP)参与的称拉曼散射(Raman scattering),声学声子(Acoustic photon,AP)参与的称布里渊散射(Brillouin scattering)。声学声子能量较低,因此布里渊散射频移较小。光学声子能量略高,拉曼散射频移略大。拉曼散射和布里渊散射都有斯托克斯线和非斯托克斯线。

特性分析

在散射光中,绝大部分光都是瑞利散射,拉曼散射和布里渊散射都非常弱。

对于拉曼散射,一般情况下,反斯托克斯线比斯托克斯线低,因为处于振动基态能级的粒子数远大于振动激发态的粒子数,粒子吸收能量的比例远大于释放能量的比例。所以在拉曼光谱测试中,常测试的是斯托克斯线。晶格中的的光学声子对应有横光学声子(TO)和纵光学声子(LO),因此拉曼散射光具有偏振性,偏振与晶体的结构对称性有关。

拉曼散射实验中的两个难点,一是散射光强度很低,需要高精度的探测器,二是散射光谱线距离入射激光很近,需要排除入射激光的影响。拉曼散射的谱线仅与晶体结构有关,与振动和转动能级有关,与入射光频率无关,因此可以使用拉曼散射进行物质的鉴定和分析。

本文略调整了一下排版,全文引用自:布里渊散射,拉曼散射,瑞利散射的区别