|
非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),但不知道系数向量x。今进行曲线拟合,求x使得输出的如下最小二乘表达式成立:
" x+ V9 Z' w& R: H# c1 x& P" ~# H8 ]+ ~0 {0 ]
min Σ(F(x,xdatai)-ydatai)^2/ N$ J' x9 V$ T, p; L
7 o0 g" @2 W% H4 P8 R
( Z) t) ~3 {5 D% O4 v" d6 z- a2 Y) J( m& o
函数 lsqcurvefit- f6 z) `( ?) z1 {* z8 N8 ?, |
- a+ ^6 C Q, I5 d
格式 x= lsqcurvefit(fun,x0,xdata,ydata)
) @4 a1 s3 G2 ^3 P
0 o7 a6 w4 R- ix = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)2 Y# i# z6 u0 Y% m
( m0 H# |; I# i) W' [
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)% k) E" \9 _2 M% G0 ^! u' ~
3 ?/ P; o, t0 Y0 V+ ], L( {[x,resnorm] = lsqcurvefit(…)
) b @) K# [) \+ b" i5 O, ~! E
) \( \' ^: i* a8 R4 @/ W7 Q ^: B[x,resnorm,residual] = lsqcurvefit(…)
5 T, P+ v8 \- [2 S
! k5 W$ E) S5 L6 _3 I[x,resnorm,residual,exitflag] =lsqcurvefit(…)
1 K6 Z) b. d) L9 R; H6 |1 l& E/ w+ k$ R0 ~, p x
[x,resnorm,residual,exitflag,output] =lsqcurvefit(…)" T! u$ c/ E8 k- V# ^4 }7 b
# m' z: j0 s+ T5 p \" m* p3 h[x,resnorm,residual,exitflag,output,lambda]= lsqcurvefit(…)
& I6 M- M; d7 H, ?
) `) }5 ^ O% ?- s! n[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(…)
# l) c7 s: d' I2 b/ F
2 b4 B1 Z3 \4 {8 i4 k5 \9 m. J参数说明:
' p! c9 n8 D0 d* L% @# r) j% N
3 r, D6 ]' F7 `x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据;
/ v) K9 d9 \( U/ I% [' V; }
$ x( {2 s9 ]5 \# D% y# ylb、ub为解向量的下界和上界lb≤x≤ub,若没有指定界,则lb=[ ],ub=[ ];8 _* W( Q; |' q, o+ k' z
2 t4 w* j, V1 p! g- |
options为指定的优化参数;
7 ]. P+ g+ C* x" ]$ t f# |( {
0 Z% }1 I; u( q- [. s3 k) I! ufun为待拟合函数,计算x处拟合函数值,其定义为 function F =myfun(x,xdata) B% A# k6 E2 {4 Z& ?- p: g
1 Z7 h# C" [9 c. t2 Gresnorm=sum ((fun(x,xdata)-ydata).^2),即在x处残差的平方和;
" e# E, @" h1 {/ Z3 z' w4 `, x; J: w0 E4 \. R
residual=fun(x,xdata)-ydata,即在x处的残差;
* \; ?1 c6 o5 F9 A) B
7 g t) V; Q3 |4 s8 ]exitflag为终止迭代的条件;7 s. x" u1 ]7 L1 G9 m* S$ v) L
$ r' X( D7 l0 Q- E' T# j
output为输出的优化信息;3 H( o% L5 w: v$ K( X: u
* N K. i! D! B" glambda为解x处的Lagrange乘子; R* P% s9 f/ ?. p. \. V
; b. N' w: v( I8 Q# mjacobian为解x处拟合函数fun的jacobian矩阵。
( M- Y# @* {0 o" r" \ R
2 f7 r2 V8 Z& J* z* S: s1 A$ T3 P 8 a" K; ]" D; I
2 w3 v8 ]) T4 b3 z E
例 求解如下最小二乘非线性拟合问题
5 g C4 N) D4 Z: Y+ G# H: S
8 }- t; v, [9 K2 V" W已知输入向量xdata和输出向量ydata,且长度都是n,待拟合函数的表达式为7 P7 M& o! I6 C
% S3 f: J: }5 h* y6 U7 l% aydata(i)=x(1)-xdata(i)^2+x(2)-sin(xdata(i))+x(3)-xdata^3
3 ?) g% j6 b* D( s& k
+ ?+ ]! q& J. Y/ d, K8 c$ |( L8 L
9 F- ~( B6 ^ P$ h
C3 v3 d& ]& N即目标函数为min Σ(F(x,xdata(i))-ydata(i))^2# k/ K+ {1 r- ~" k7 @! P( Q
) N+ Y7 r7 o& l. A% K% E0 ^
其中:F(x,xdata) = x(1)*xdata^2 +x(2)*sin(xdata) + x(3)*xdata^3
. W; _% A3 ]2 S
4 k' V6 Z0 f. p! h% [初始解向量为x0=[0.3, 0.4, 0.1],即表达式的 个参数[x(1),x(2),x(3)]。( X, q, |6 c: O m/ Y
8 R( k- r. [! [
解:先建立拟合函数文件,并保存为myfun.m' Z7 h- X3 I/ y
8 V: R# V9 l2 \$ Z1 f/ p0 K- \function F = myfun(x,xdata)+ u% @# b, |, b
2 F2 @# m( I! g" g; U# v6 g
F = x(1)*xdata.^2 + x(2)*sin(xdata) +x(3)*xdata.^3; b3 o5 ~' S# M7 W% H" J) f7 u# w0 i
# w4 i( g& b8 V( |
然后给出数据xdata和ydata
( f% p. f$ v6 {- w9 M6 l; c4 f/ t k
>>xdata = [3.6 7.7 9.3 4.1 8.6 2.81.3 7.9 10.0 5.4];
7 W+ \$ R; i, d# W; A/ G( U7 [8 i8 h$ a) x" [$ X
>>ydata = [16.5 150.6 263.1 24.7208.5 9.9 2.7 163.9 325.0 54.3];3 R& K9 K1 p8 |. R4 f
1 Y: f- t8 R( Q& \
>>x0 = [10, 10, 10]; %初始估计值
8 D9 l. l6 E/ M0 G. G# b& ?& H
>>[x,resnorm] =lsqcurvefit(@myfun,x0,xdata,ydata)4 r' o% v# Y7 b4 d4 Q7 S
$ M4 F% H& L4 A; o- ]% `结果为:' ~/ ^- v$ A( S0 T
$ y9 c( j# W; i% n) g2 {1 L/ |Optimization terminated successfully:
/ \# m6 u- X3 z: J1 p9 {2 Y, C; I7 `
Relative function value changing by lessthan OPTIONS.TolFun
' B3 O& A! T# G8 C7 A' K0 z- k( K' r F4 ?
x = 0.2269 0.3385 0.3021
: y$ ~* A6 U$ \( X3 {% n) v
( p2 D2 X5 U: J' O1 W) S; F=>即解出的系数最优估计值
! v1 e0 O$ ?6 G# T" c% d
$ _! H* Y7 S7 u+ P# fresnorm = 6.2950
7 i+ e* c' z) |; O
. s- K `; t9 L0 i( \=>在x解值处的目标最小二乘表达式值。即所谓残差。 |
|