BNU-FZH

fengzhenhua@outlook.com

原本使用 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),因此拉曼散射光具有偏振性,偏振与晶体的结构对称性有关。

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

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

2024年11月07日微信在其官方网站https://weixin.qq.com/正式上线并提供测试版 App 下载. 微信官方表示,此次发布的 Linux 版本在架构上进行了全面重构,不仅提升了性能,还实现了与 Windows 、 macOS 等平台在功能和界面上的一致性。这包括消息撤回、朋友圈浏览刷新、通讯录界面改版以及深色与浅色模式的切换等。

ArchLinux 安装 WeChat

1
2
paru -S wechat-bin
sudo pacman -S noto-fonst-cjk

参考文章

科研工作中离不开绘制各种各样的科研图片,通过程序可以将数据保存下来,然后使用绘图软件绘制图片。其中CSV数据文件( Comma Separated Values, 逗号分隔的值)是比较常用的文件,本文介绍CSV数据文件。

CSV 文件优点

  • 简单易懂:CSV 文件基于纯文本格式,因此可以使用任何文本编辑器(如neovim)轻松打开和编辑。
  • 数据兼容性:CSV 文件中的数据可以很容易地跨平台进行传输和处理,任何具有 CSV 处理功能的软件(如Microsoft ExcelGoogle Sheets、甚至编程语言库)都能处理该类型的文件。
  • 资源占用低:CSV 文件以纯文本形式存储数据,其体积相对较小,便于节省存储空间。

CSV 文件结构

  • 每行表示一条记录:CSV 文件中的每一行代表一条记录,相当于数据库中的一行数据。
  • 逗号分隔:每行数据中,使用逗号, 进行数据分隔,代表不同的数据。
  • 引号包围:当数据单元格中的内容含有逗号时,为避免混淆,需要引号 (单引号 ' 或双引号 ")将这个数据包围起来,防止误认为是两个不同数据。

ArchLinux是一个优秀的Linux发行版,但是在使用Paru安装AUR中的软件时,很多软件依赖于Github上的软件,但有时候它不能访问,为此本人开发了脚本ParuAxel.sh.

配置Github镜像

为了提高Github的访问速度,可以设置git的下载镜像网站,于是首先配置git如下:

~/.gitconfig
1
2
3
4
5
6
7
8
9
10
11
[user]
email = YourEmail
name = YourName
; [url "https://521github.com/"]
; [url "https://githubfast.com/"]
; [url "https://git.homegu.com/"]
; [url "https://kkgithub.com/"]
; [url "https://github.hscsec.cn/"]
; [url "https://gitclone.com/github.com/"]
[url "git@github.com:"]
insteadOf = https://github.com/

ParuAxel 脚本

/usr/bin/ParuAxel
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#! /bin/sh
#
# Program: ParuAxel.sh
# Version: V1.4
# Author : Zhen-Hua Feng
# Email : fengzhenhua@outlook.com
# Date : 2024-11-06 14:08
# Copyright (C) 2023 feng <feng@arch>
#
# Distributed under terms of the MIT license.
#
GIT_DOMIN=`echo $2 | cut -f3 -d'/'`;
GIT_OTHER=`echo $2 | cut -f4- -d'/'`;
GIT_INIT="https://github.com/"
GCF=/home/$USER/.gitconfig
GIT_MIR=$(grep "url \"http" $GCF)
GIT_SIT=(${GIT_MIR[*]//" "/""})
GIT_SIT=(${GIT_SIT[*]//";"/""})
GIT_SIT=(${GIT_SIT[*]//"[url\""/""})
GIT_SIT=(${GIT_SIT[*]//"\"]"/""})
GIT_DETECT(){
wget --spider -T 5 -q -t 2 $1
}
i=0 ; j=0
case "$GIT_DOMIN" in
"github.com")
if [ -e $GCF ]; then
while [[ $i -lt "${#GIT_SIT[*]}" ]]; do
GIT_DETECT ${GIT_SIT[$i]}
if [[ $? = 0 ]]; then
GIT_URL=${GIT_SIT[$i]}$GIT_OTHER
i=${#GIT_SIT[*]} ; j=1
else
let i+=1
fi
done
if [[ $j -eq 0 ]]; then
GIT_URL="$GIT_INIT$GIT_OTHER"
fi
else
GIT_URL="$GIT_INIT$GIT_OTHER"
fi
echo "Download from mirror $GIT_URL";
# Single-threaded, enabled by default
/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o $1 $GIT_URL;
# Multi-threading, which may not be supported by some mirror websites
# /usr/bin/axel -n 15 -a -o $1 $GIT_URL;
;;
*)
GIT_URL=$2;
/usr/bin/axel -n 15 -a -o $1 $GIT_URL;
;;
esac

编写思路:首先探测~/.gitconfig文件,提取所有的http镜像地址,然后按顺序测试镜像地址,遇到可以使用的镜像则设置为下载地址,同时停止继续探测。如果全部探测完成后没有发现可用地址,则仍然使用https://github.com的原始地址。由于不是所有镜像都支持axel多线程下载,所以默认开启curl下载。为了提高效率,当探测到可用镜像时就停止了继续探测其他镜像,但是这不能保证探测到的镜像速度最快,所以在此版中应当尽量将速度快的镜像排在~/.gitconfig的前面,下一版计划实现自动速度的探测。

/etc/makepkg.conf
1
2
3
4
5
6
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
'ftp::/usr/bin/axel -n 15 -a -o %o %u'
'http::/usr/bin/axel -n 15 -a -o %o %u'
'https::/usr/bin/ParuAxel %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o')

具体设置

基本用法

1
eval command-line

其中command-line是在终端上键入的一条普通命令行。然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次。

举例解释

1
2
pipe="|"
eval ls $pipe wc -l

shell1次扫描命令行时,它替换出变量$pipe的值,接着eval使它再次扫描命令行,这时shell作为管道符号了。

参考文章

在部署博客时,首先探测目标网站是否畅通是一个必要的环节。然而之前的探测方法依赖于返回码,但是不同的网站返回码不同,所以这不是一个很好的方法,本文的目标就是解决这个探测通用性的问题。

wget方法

wget 探测网站
1
wget --spider -T 5 -q -t 2 https://gitlab.com ; echo $?

若返回值为\(0\), 则表示目标网站可以正常访问,否则表示网络不通。

wget的常用参数为:

1
2
3
4
5
--spider                   模拟爬虫的行为去访问网站,但不会下载网页
-q, --quiet 安静的访问,禁止输出,类似-o /dev/null功能
-o, --output-file=FILE 记录输出到文件
-T, --timeout=SECONDS 访问网站的超时时间
-t, --tries=NUMBER 当网站异常时重试网站的次数

curl方法

curl 探测网站
1
curl -s -o /dev/null https://gitlab.com ; echo $?

若返回值为0, 则代表正常. 这个方法的优点在于与返回的状态码无关,是一个通用方案。

curl 探测网站---状态码方法
1
curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null www.baidu.com

上述方法,会返回一个状态码,若为200则代表www.baidu.com可以正常访问。但是,不同网站的状态码不同,所以这不是一个友好的方案,因此将此方法仅记录在此,但编写脚本时尽量不要使用。

参考文章

  • 测试网站链接是否可用(wget和curl)

  • 注意:在上述文章中,测试代码与echo $?前使用了管道符号|, 这是不对的. 在本文中已经更正为;, 这表示无论前面的代码是否正确运行后面的echo照样执行,这样才能正确返回上一步的$?状态,实现准确判断。

自定义一个函数并调用

1
2
3
4
5
6
7
8
9
import numpy as np

def func_x(a):
y = a + 1
return y

print(func_x(x)) # 调用
# 输出
# 2

frompyfunc 函数

如果a不是一个数,而是一个向量或数组呢?这时需要使用numpy中的通用函数np.frompyfunc(func,1,1), 这里的参数func指的是你要使用的函数,第二个参数为func中的参数个数,第三个参数为func中的返回值的个数。现在进一步改写为计算数组的情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np

def func_x(a):
y = a + 1
return y

A = [0, 1, 2]
func_ = np.frompyfunc(func_x, 1, 1)

y = func_(A)

print(y)
# 结果:
# [1 2 3]

参考文章

np.frompyfunc()函数的使用 Numpy | 函数向量化

看到很多研究,凭空臆想了一些复杂的电磁场,但是研究的火热,然后他们臆想的这些电磁场又不满足Maxwell方程组, 所以从根本上讲就不是电磁场。因为这个基础性的问题,可能会引起某些人的不适,所以决定不发文章,直接在我的博客说明吧。因为我认为知识是全人类的,没有必要非得挂上名字发表,所以我也不怕别人在发表之前看到我的东西,因此就有了这篇文章。

简介

Maxwell 描述了电磁场的基础性质,目前我个人认为,如果一个东西它不满足这组方程,那它一定不是电磁场!所以,研究电磁场相关的问题首先要确保自己选择的电磁场满足这组方程。同时,本人还认为,一个研究如果研究内容不是现实世界中存在的或间接存在的,那这样的研究就是无效研究。

Maxwell 方程组

普遍的 Maxwell 方程组

\[\begin{align} \nabla\times\vec{E} &=-\frac{1}{c}\frac{\partial \vec{B}}{\partial t} \label{eq:maxwella} \\ \nabla\times\vec{B} &=\frac{4\pi}{c}\vec{j}+\frac{1}{c}\frac{\partial \vec{E}}{\partial t} \label{eq:maxwellb} \\ \nabla\cdot\vec{B} &=0 \label{eq:maxwellc}\\ \nabla\cdot\vec{E} &=4\pi\rho \label{eq:maxwelld} \end{align}\]

无源的 Maxwell 方程组

当空间中不存在电流和电荷时,电磁场满足的方程叫无源的 Maxwell 方程组。在真空中传播的激光就属于这种情况,其具体表达式为

\[\begin{align}\label{eq:maxwell1} \nabla\times\vec{E} &=-\frac{1}{c}\frac{\partial \vec{B}}{\partial t} \\ \nabla\times\vec{B} &=\frac{1}{c}\frac{\partial \vec{E}}{\partial t} \\ \nabla\cdot\vec{B} &=0 \\ \nabla\cdot\vec{E} &=0 \end{align}\]

真空中电场只是时间的函数的形式

如果真空中的电场只是时间的函数,那它的表达式是怎样的?由于受 Maxwell 方程组的限制,这个形式, 这一段就来探讨这种只与时间有关的电场形式。

只与时间有关的电场与只与空间有关的磁场对应

由于真空中无源,所以应当满足无源的 Maxwel 方程组。又由于电场只是时间的函数,于是\(\nabla\times\vec{E}=0\), 根据式\(\eqref{eq:maxwell1}\) 的第一式可得

\[\begin{equation}\label{eq:maxwell2} -\frac{1}{c}\frac{\partial \vec{B}}{\partial t}=0 \end{equation}\]

\(\eqref{eq:maxwell2}\)表明\(\vec{B}\)不是时间的显函数,所以它最多只能是空间的函数。

只与空间有关的磁场导致电场只能与时间的一次方成正比

根据式\(\eqref{eq:maxwell1}\)的第2式,由于磁感应强度\(\vec{B}\)只与空间有关,所以\(\nabla\times\vec{B}\)就只与空间有关,所以直接对偏导数积分就得到

\[\begin{equation}\label{eq:maxwell3} \vec{E}=\vec{E}_0+t\nabla\times\vec{B} \end{equation}\]

由式\(\eqref{eq:maxwell3}\)可得,真空无源的电场受 Maxwell 方程组限制而只能取这种形式,它不能凭空臆造,不能设置任意的函数形式,这正是当前(2024年11月01日)好多研究强场的人做的工作中所必须面对的问题。无意与人争论,放在博客上,请大家各取所需。

只与时间有关的无源电磁场的势也只能与时间的一次方成正比

由 Maxwell 方程组可以导出电磁场标势和矢势满足的达朗贝尔方程

\[\begin{align} \frac{1}{c}\frac{\partial^2 \varphi}{\partial t^2}-\nabla^2\varphi &=0 \label{eq:maxwell4}\\ \frac{1}{c}\frac{\partial^2 \vec{A}}{\partial t^2}-\nabla^2\vec{A} &=0 \label{eq:maxwell5} \end{align}\]

由式\(\eqref{eq:maxwell4}\) 和式\(\eqref{eq:maxwell5}\) 可得,对于只与时间有关的势,\(\nabla^2\)项就变为零,对时间的偏导就变成了导数,于是可以得出结论:只与时间有关的无源电磁场的势也只能与时间的一次方成正比.

电场强度和磁感应强度必须满足波动方程

介质中\(\vec{E}\)\(\vec{B}\)满足的方程

对式\(\eqref{eq:maxwella}\)取旋度,再代入式\(\eqref{eq:maxwelld}\)

\[\begin{equation}\label{eq:bodong0} \nabla^2\vec{E}-\frac{1}{c^2}\frac{\partial^2\vec{E}}{\partial t^2} =\frac{4\pi}{c^2}\frac{\partial \vec{j}}{\partial t}+4\pi\rho \end{equation}\]

对式\(\eqref{eq:maxwellb}\)取旋度,再代入\(\eqref{eq:maxwellc}\)\[\begin{equation}\label{eq:bodong1} \nabla^2\vec{B}-\frac{1}{c^2}\frac{\partial^2\vec{B}}{\partial t^2} =-\frac{4\pi}{c}\nabla\times\vec{j} \end{equation}\]

真空中\(\vec{E}\)\(\vec{B}\)满足的方程

真空中无源,所以令式\(\eqref{eq:bodong0}\)和式\(\eqref{eq:bodong1}\)中的源\(\vec{j}=0\)\(\rho=0\), 得到

\[\begin{align} \nabla^2\vec{E}-\frac{1}{c^2}\frac{\partial^2\vec{E}}{\partial t^2}&=0 \label{eq:bodong2} \\ \nabla^2\vec{B}-\frac{1}{c^2}\frac{\partial^2\vec{B}}{\partial t^2}&=0 \label{eq:bodong3} \end{align}\]

通过式\(\eqref{eq:bodong2}\) 和式\(\eqref{eq:bodong3}\) 更容易看出来,对于只是时间函数的电场强度和磁感应强度最多只能是时间的一次函数。对于一般情况,电场强度和磁感应强度都必须是波动方程的解,如果任意设置各式各样的只与时间有关的函数那就不是电磁波了。