笨笨 发表于 2023-8-11 21:28:42

用梯度下降法求函数界的最小值

设函数\(\small f\left( x,a,b,c,d,e \right) = \text{Hypergeometric2F1}\left[ { - 1/2, - 1/2,1,{x^2}} \right] - \left( {1 + \frac{{3{x^2}}}{{10 + \sqrt {4 - 3{x^2}} }}} \right) - \frac{3}{{{2^{17}}}}{x^{10}}\left( {1 + \frac{{\left( {\frac{{79}}{{48}} + 19.7356722060508967x} \right)x^2}}{{\left( {1 + ax^b\left( {1 - x^c} \right)^d} \right)^e}}} \right)\)
其中,\(a、b、c、d、e \in R\),\(0 < x < 1\)。求\(M = \mathop {\mathop {\min }\limits_{a,b,c,d,e} }\limits_{0 < x < 1} \;\left\{ {f\left( x \right)} \right\}\)及其此时的各参数a,b,c,d,e值。

给定一组初始值:\(\left\{ {\begin{array}{*{20}{c}}
{\begin{array}{*{20}{c}}
{{ \rm{a = 4}}{\rm{.6}}}\\
{{\rm{b = 0}}{\rm{.457}}}
\end{array}}\\
{{\rm{c = 2}}{\rm{.657}}}\\
{\begin{array}{*{20}{c}}
{{\rm{d = 0}}{\rm{.95}}}\\
{{\rm{e = 1}}{\rm{.2}}}
\end{array}}
\end{array}} \right.\)

下面是编程图片:


附编程代码:
\=0.558
r=0.144
\=0.675
f:=1-r^x
g:=1-(1-\)/f[\] f[(x-1)/(\-1) \]
p0:=((1-Floor])\ f/f[\]+Floor]g)^\
p:=p0
H:=(1/((3/2^17)x^10))(Hypergeometric2F1[-1/2,-1/2,1,x^2]-(1+(3x^2)/(10+\(4-3x^2))))
W:=(( 79/48+19.7356722060508967x)x^2)/(1+a x^b(1-x^c)^d)^e
U:=1/2 \!\(
\*UnderoverscriptBox[\(\\), \(k = 1\), \(99\)]\(\((1 + W, a, b, c, d, e] - H])\)^2\)\)
u:=-\!\(
\*UnderoverscriptBox[\(\\), \(k = 1\), \(99\)]\(\((1 + W, a, b, c, d, e] - H])\)
\*FractionBox[\(e\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]\), \(1 + a\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]\)] W, a, b, c, d, e]\)\)
v:=-\!\(
\*UnderoverscriptBox[\(\\), \(k = 1\), \(99\)]\(\((1 + W, a, b, c, d, e] - H])\)\
\*FractionBox[\(a\ e\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]\ Log]\), \(1 + a\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]\)] W, a, b, c, d, e]\)\)
w:=\!\(
\*UnderoverscriptBox[\(\\), \(k = 1\), \(99\)]\(\((1 + W, a, b, c, d, e] - H])\)\
\*FractionBox[\(a\ d\ e\
\*SuperscriptBox[\((p)\), \(b + c\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(\(-1\) + d\)]\ Log]\), \(1 + a\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]\)] W, a, b, c, d, e]\)\)
h:=-\!\(
\*UnderoverscriptBox[\(\\), \(k = 1\), \(99\)]\(\((1 + W, a, b, c, d, e] - H])\)
\*FractionBox[\(a\ e\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]\ Log[1 -
\*SuperscriptBox[\((p])\), \(c\)]]\), \(1 + a\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]\)] W, a, b, c, d, e]\)\)
i:=-\!\(
\*UnderoverscriptBox[\(\\), \(k = 1\), \(99\)]\(\((1 + W, a, b, c, d, e] - H])\) W, a, b, c, d, e] Log[1 + a\
\*SuperscriptBox[\((p)\), \(b\)]\
\*SuperscriptBox[\((1 -
\*SuperscriptBox[\((p)\), \(c\)])\), \(d\)]]\)\)
UU:=U,b-tv,c-t w,d-t h,e-t i]
Er:=Hypergeometric2F1[-1/2,-1/2,1,x^2]-(1+(3x^2)/(10+Sqrt))-(3/2^17)x^10 (1+W)
a=4.6
b=0.457
c=2.657
d=0.95
e=1.2
t=0.0001
U>UU
a=a-tu
b=b-tv
c=c-t w
d=d-t h
e=e-t i
Maximize[{Abs],0<x<1},x]

笨笨 发表于 2023-8-11 21:29:34

上面编程的弊端:是手动循环迭代会出现庞大的数据群且无法求出主贴函数界的最小值,因为你不可能遍历整个庞大的数据群!

那么问题来了,我们怎样接着主贴的编程继续进行下去求出函数界的最小值。

笨笨 发表于 2023-8-11 21:30:37

本帖最后由 笨笨 于 2023-8-11 21:41 编辑

那么问题来了,我们怎样接着主贴的编程继续进行下去求出函数界的最小值或者其它更好的方法。

笨笨 发表于 2023-8-17 06:35:19

有老师说:
Mathematica 可以执行 while loop.这意味着梯度方法自动优化参数的代码可以轻易编出求出误差函数界的最小值。
我不知道 while怎么编才能自动优化梯度参数且得到误差函数界的最小值。
页: [1]
查看完整版本: 用梯度下降法求函数界的最小值