Skip to content

Commit 66b9edb

Browse files
committed
Update Git.md and lsqfit.md
1 parent 9d8433e commit 66b9edb

File tree

2 files changed

+79
-6
lines changed

2 files changed

+79
-6
lines changed

Git.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,20 @@ Windows 用户:
8383

8484
### 2.1 仓库(Repository)
8585

86+
俗称`repo`。仓库(Repository)简单来说就是存放项目代码的一整个文件夹,包括 项目文件、历史记录和元数据。比如对于一个非裸仓库,它们就存储在 `.git` 里。
87+
88+
把一个文件夹设置为仓库。
89+
```bash
90+
cd ${你的文件夹}
91+
git init .
92+
```
93+
94+
在 Git 中,仓库有两种类型:本地仓库和远程仓库。
95+
- 本地仓库:本地仓库是存储在你本地计算机上的 Git 仓库。
96+
- 远程仓库(remote):远程仓库是位于远程服务器上的 Git 仓库。它可以作为团队协作和代码共享的中央存储库。远程仓库通常托管在代码托管平台(如 GitHub 、GitLab 、Bitbucket 等)上,团队成员可以将其本地仓库中的更改推送到远程仓库,或者从远程仓库拉取最新的更改。远程仓库允许多个开发者协同工作,共享代码并进行版本控制。
97+
不是所有开发都必须以远程仓库(remote)为中心来开发,但团队协作中一般是这样干的。
98+
99+
86100
### 2.2 提交(Commit)
87101

88102
### 2.3 分支(Branch)

lsqfit.md

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def setData():
8787
return xData,yData,func,prior
8888

8989
if __name__ =='__main__':
90-
xData,yData,func,prior =setData()
90+
xData,yData,func,prior =setData
9191
fit = lsqfit.nonlinear_fit(data=(xData,yData),fcn=func,prior=prior)
9292
print(fit.format(maxline=True))
9393
```
@@ -100,18 +100,18 @@ Least Square Fit:
100100
Parameters:
101101
w 2.95(35)e-14 [ 2.0 (1.0) ] *
102102
h 3.9712361677636982548733612930 (43) [ 3.80 (10) ] *
103-
w2 8.038(69)e-17 [ 0.1 (1.0) ]
104-
h2 5.0774354372295347204158133536 (13) [ 4 (10) ]
103+
w2 8.038(69)e-17 [ 0.1 (1.0) ]
104+
h2 5.0774354372295347204158133536 (13) [ 4 (10) ]
105105
106106
Fit:
107107
x[k] y[k] f(x[k],p)
108108
---------------------------------------
109109
8 34.67 (18) 34.33 (12) *
110-
9 16.489 (93) 16.562 (50)
110+
9 16.489 (93) 16.562 (50)
111111
10 7.910 (49) 8.000 (21) *
112-
11 3.884 (26) 3.8702 (99)
112+
11 3.884 (26) 3.8702 (99)
113113
12 1.861 (14) 1.8753 (60) *
114-
13 0.9110 (75) 0.9104 (40)
114+
13 0.9110 (75) 0.9104 (40)
115115
14 0.4476 (40) 0.4429 (27) *
116116
117117
Settings:
@@ -121,5 +121,64 @@ Settings:
121121
```
122122
第一部分是用于评价拟合质量的参数,第二部分是拟合得到的参数,后面的一个 * 代表期望值与数据相差一个 $\sigma$
123123

124+
## Eaxmple: 两点关联函数拟合(two-state fit)
125+
以下是一个 two-state fit 例子。注意总是把能级最高的态考虑为所有高激发态的污染项。
126+
127+
假设一个两点关联函数的变量 `correlator`, 形状为 `correlator.shape = (Ncfg, Nt)`
128+
129+
第一步是计算带误差的两点关联函数,误差由统计学中的重抽样方法(resampling)给出。格点中一般使用的重抽样方法包括: Jackknife (刀切法)或 Bootstrap 方法。
130+
131+
调用函数 `gv.dataset.avg_data` 做重抽样给出误差,
132+
```python
133+
corr = gv.dataset.avg_data(correlator[:, :])
134+
print(corr)
135+
```
136+
你会看到输入的 `(Ncfg, Nt)` 后, 输出 `(Nt)` 长度的带误差的两点关联函数。即是我们要拟合的 `ydata`
137+
138+
定义两点关联函数的拟合函数 `func`
139+
```python
140+
def func(t, p):
141+
E1 = p['E1']
142+
E2 = p['E2']
143+
Z1 = p['Z1']
144+
Z2 = p['Z2']
145+
146+
ans = Z1 * (gv.exp(-E1 * t) + gv.exp(-E1 * (Nt - t)))
147+
ans += Z2 * (gv.exp(-E2 * t) + gv.exp(-E2 * (Nt - t)))
148+
return ans
149+
```
150+
151+
接下来要定义一个给程序做拟合用的初值,
152+
```
153+
prior = {
154+
'Z1': gv.gvar(1, 10),
155+
'Z2': gv.gvar(1, 10),
156+
'E1': gv.gvar(0.55, 0.2),
157+
'E2': gv.gvar(0.90, 0.2),
158+
}
159+
```
160+
161+
> **注意:**
162+
> - 初值的输入参数有两个:`prior``p0``prior`是带误差的`gv.Gvar`类型, `p0` 是一个数。
163+
> - `prior``p0` 作为输入参数互斥,即二选一输入。
164+
> - 如果你使用 `prior`, 建议误差给大一些。
165+
> - *(重要)*`prior``p0` 改变可能导致拟合失败。但已经拟合上的前提下,拟合结果不应该依赖 `prior``p0`
166+
167+
然后做拟合,
168+
```
169+
fit_window = np.arange(15, 64)
170+
xdata = np.arange(Nt)[fit_window]
171+
ydata = gv.dataset.avg_data(correlator[:, :])[fit_window]
172+
173+
fit = lsqfit.nonlinear_fit(data=(xdata, ydata),
174+
fcn=func,
175+
prior=prior,
176+
)
177+
print(fit.format(maxline=True))
178+
fit_E = fit.p["E1"] if gv.mean(fit.p["E1"]) < gv.mean(fit.p["E2"]) else fit.p["E2"]
179+
fit_func = fit.fcn(np.arange(Nt), fit.p)
180+
```
181+
182+
## Example: 联合拟合(joint fit)
124183

125184

0 commit comments

Comments
 (0)