怎么用mathematica编一维搜素中的近似黄金分割法和Newton法?牛顿迭代法

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/05 16:12:24

怎么用mathematica编一维搜素中的近似黄金分割法和Newton法?牛顿迭代法
怎么用mathematica编一维搜素中的近似黄金分割法和Newton法?




牛顿迭代法

怎么用mathematica编一维搜素中的近似黄金分割法和Newton法?牛顿迭代法
你能解释一下什么是“一维搜素中的近似黄金分割法和Newton法”吗
————
蛋疼地做了一下你的题……你是从哪搞来的这该死的资料?!故意用过程式的思路把算法叙述一遍这是想把人带沟里去写出渣一样的代码吗?还有那个原理部分的区间选择规则给反了啊!改过来之后:
findminFib[f_, {a0_, b0_}, ε_] :=
 Module[{decideDomain, decideList},
  decideDomain[{{x1_, b_}, {a_, x2_}}] := 
   Extract[{{x1, b}, {a, x2}}, Ordering[{f[x1], f[x2]}, -1]];
  decideList[{a_, b_}] := {{a + 0.382 (b - a), b}, {a, 
     a + 0.618 (b - a)}};
  {#, f@#2} & @@ NestWhile[decideDomain@decideList@# &, {a0, b0},
    #2 - #1 & @@ #1 > ε &]]
用例:
Block[{f, λ},
 f[λ_] = λ^2 + 3 λ;
 findminFib[f, {-3, 5}, 10^-6]]
 (* {-1.5, -2.25} *)
牛顿法:

findminNewton[f_, x0_, ε_] := {#, f@#} &@
  NestWhile[# - f'[#]/f''[#] &, x0, Abs[f'[#]] > ε &]
用例:
Block[{f, λ}, f[λ_] = λ^2 + 3 λ;
 findminNewton[f, 1., 10^-6]]