EDA365电子论坛网

标题: x的值怎么会是这样,不应该是一个小数吗? [打印本页]

作者: onesimus    时间: 2020-5-7 11:26
标题: x的值怎么会是这样,不应该是一个小数吗?

) Z% B2 m) j9 G! \% V牛顿法优化程序代码如下:
6 _9 s) e8 R9 V9 ]function [x,minf] = minNewton(f,x0,eps)7 {/ K( I2 s- J
format long;
6 i5 }  d4 r" F% x$ ]if nargin == 2
& G% J' U2 i7 ~  z: ]  n    eps = 1.0e-6;1 H5 x7 W3 G4 ]( m) l6 q+ ~1 H
end
! M2 Y. D4 Z* G6 h( u# s/ p1 I* c1 D1 K
df = diff(f);/ N6 m$ T& V! `& `" h
d2f = diff(df);
! m+ X6 J8 ?' Q, Z* q# k' w! nk = 0;
4 B  l/ n. z- G9 htol = 1;
1 @% W, y4 @" M- p+ G' C; N' M/ O) o' y7 [
while tol>eps, @0 N1 a( [& k- @9 q' {" P
    dfx = subs(df,findsym(df),x0);
- I: z/ G8 ?, @/ `3 ^! ]" k    if diff(d2f) == 0) e: `/ s1 E8 V: h* q( l
        d2fx = double(d2f);
& R* C& c# F! f: Y. q; x' B, _* w    else
' t. B2 e9 |4 e9 @# W! ]        d2fx = subs(d2f,findsym(d2f),x0);! z5 }7 g  M/ L# \
    end: b9 H. ^/ k- T; O3 ~* @9 f
    x1 = x0 - dfx/d2fx;
2 E5 W- d% Q- }' m* Y9 Q    k = k + 1;* ?; V7 `9 b" P8 z  A/ G
    tol = abs(dfx);9 A7 i5 r3 S6 w# W
    x0 = x1;; ]: E0 z) c% O/ p2 f
end
: _; o7 r8 H2 o8 z
9 Y* z' n4 q1 s% Ix = x1;2 w# [, d% n, K& U0 Q( C, H, T
minf =  subs(f,findsym(f),x);" W" ^5 I3 m% _/ v: I
format short;+ h4 A$ N% T! p7 [8 j
复制代码
0 K  u' @! g" F$ \, z/ p
4 D! i; A' `2 _! @& ], w主程序代码如下:& r0 `$ Z. U, M7 V2 ]2 w4 H8 d: q* x  b
syms t
8 V% I* m; d' [, ]6 _$ g$ G; ?! Rf=t^2-log(t)-5
# O. q# X0 I, F4 Ex=minNewton(f,2)
* l. k7 ]  j6 _0 A复制代码
# ]6 U2 q) B7 s, @) k4 r. |" P* n. M0 E+ @
运行主程序后,得到的结果如下:
$ C8 L1 V, I5 t, M5 Y/ f3 F>> minNewton_ex
7 d+ C6 i4 D. r4 P6 V
) N' N5 U5 j. `1 m2 }. g4 V) if =
+ D6 {7 w1 B. @1 G1 R- q8 `4 T+ u( j5 Y* ]
t^2 - log(t) - 59 q) L/ d" m) ^/ h  G2 J  y% S
* }+ v* [. p* M( b9 c- z, T, k

: j2 h" q) @8 X) p. Ux =
! D4 O  M* q9 P# V& a
/ H7 d& h8 X$ M  u7273770929600966997213123375563852928/10286665498236842695784281251177659137
* b; K6 }) s+ m# ]( W4 `9 N# T6 Y. T3 ^( ?

0 C+ z: `# W4 b5 Px的值怎么会是这样,不应该是一个小数吗?
作者: shelby    时间: 2020-5-7 13:47
默认求得是符号解
作者: shelby    时间: 2020-5-7 13:49
你可以用vpa(x)或者double(x)转成小数。
作者: IRESSEMT    时间: 2020-5-7 15:18
shelby 发表于 2020-5-7 13:49, R- Y6 [4 V' J4 |: F9 I2 ~
你可以用vpa(x)或者double(x)转成小数。

, N" H( b2 J# M% k+ o) M& e嗯嗯,楼主可以试试这个方法。
. ]9 x: e# W1 Z* d+ _
作者: tuoni    时间: 2020-5-7 15:28
shelby 发表于 2020-5-7 13:49' S; d" ^! m5 Y" E
你可以用vpa(x)或者double(x)转成小数。

: l0 q( G5 D+ D7 C$ s; b9 i7 \* g! a' c: E- u& |+ A! Y6 w7 Y

作者: gaoxings    时间: 2020-5-7 17:52
学习一下。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2