powell.txt
来自「VB常用数值算法集 内含有解线性代数方程组」· 文本 代码 · 共 50 行
TXT
50 行
Sub POWELL(P(), XI(), N, NP, FTOL, ITER, FRET)
ITMAX = 200
Dim PT(20), PTT(20), XIT(20)
FRET = FUNC2(P(), N)
For J = 1 To N
PT(J) = P(J)
Next J
ITER = 0
Do
Do
Do
ITER = ITER + 1
FP = FRET
IBIG = 0
DEL = 0#
For I = 1 To N
For J = 1 To N
XIT(J) = XI(J, I)
Next J
FPTT = FRET
Call LINMIN(P(), XIT(), N, FRET)
If Abs(FPTT - FRET) > DEL Then
DEL = Abs(FPTT - FRET)
IBIG = I
End If
Next I
If 2# * Abs(FP - FRET) <= FTOL * (Abs(FP) + Abs(FRET)) Then
Erase XIT, PTT, PT
Exit Sub
End If
If ITER = ITMAX Then
Print " POWELL exceeding maximum iterations"
Exit Sub
End If
For J = 1 To N
PTT(J) = 2# * P(J) - PT(J)
XIT(J) = P(J) - PT(J)
PT(J) = P(J)
Next J
FPTT = FUNC2(PTT(), N)
Loop While FPTT >= FP
DUM = FP - 2 * FRET + FPTT
T = 2# * DUM * (FP - FRET - DEL) ^ 2 - DEL * (FP - FPTT) ^ 2
Loop While T >= 0#
Call LINMIN(P(), XIT(), N, FRET)
For J = 1 To N
XI(J, IBIG) = XIT(J)
Next J
Loop
End Sub
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?