| 5 | 1/1 | 返回列表 |
| 查看: 846 | 回復(fù): 2 | ||
| 當前只顯示滿足指定條件的回帖,點擊這里查看本話題的所有回帖 | ||
manmanbobo新蟲 (初入文壇)
|
[求助]
LM算法碰到分段函數(shù)該怎么處理 已有1人參與
|
|
|
各位蟲友大家好,本蟲在目前在用LM算法進行函數(shù)的曲線擬合,函數(shù)分兩段,一部分類似于余弦,另一部分類似于冪函數(shù)。在循環(huán)中,因為分段點也是一個未知的變量,所以不能進行比較大小,特地求助廣大蟲友,感激不盡。這個問題卡了我好久。謝謝。下面附上一些代碼。 代碼1:單一函數(shù)的擬合,為了蟲友能更好理解LM算法。 % 計算函數(shù)f的雅克比矩陣,是解析式 syms a b c d y x real; f=a+b*cos((pi/c)*(x-d)); Jsym=jacobian(f,[a b c d]) % 擬合用數(shù)據(jù)。 data_1=[0.25 0.5 1 1.5 2 3 4 6 8]; obs_1=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01]; % 2. LM算法 % 初始猜測s a0=4; b0=20;c0=14;d0=13; y_init = a0+b0*cos((pi/c0)*(x-d0)); % 數(shù)據(jù)個數(shù) Ndata=length(obs_1); % 參數(shù)維數(shù) Nparams=4; % 迭代最大次數(shù) n_iters=50; % LM算法的阻尼系數(shù)初值 lamda=0.01; % step1: 變量賦值 updateJ=1; a_est=a0; b_est=b0; c_est=c0; d_est=d0; % step2: 迭代 for it=1:n_iters if updateJ==1 % 根據(jù)當前估計值,計算雅克比矩陣 J=zeros(Ndata,Nparams); J for i=1:length(data_1) i J(i, =[ 1 cos((pi*(d_est - data_1))/c_est) (b_est*pi*sin((pi*(d_est - data_1))/c_est).*(d_est - data_1))/c_est^2 -(b_est*pi*sin((pi*(d_est - data_1))/c_est))/c_est];end % 根據(jù)當前參數(shù),得到函數(shù)值 y_est =a_est+b_est*cos((pi/c_est)*(data_1-d_est)) ; % 計算誤差 d=obs_1-y_est; % 計算(擬)海塞矩陣 H=J'*J; % 若是第一次迭代,計算誤差 if it==1 e=dot(d,d); end end % 根據(jù)阻尼系數(shù)lamda混合得到H矩陣 H_lm=H+(lamda*eye(Nparams,Nparams)); % 計算步長dp,并根據(jù)步長計算新的可能的\參數(shù)估計值 dp=inv(H_lm)*(J'*d( );g = J'*d( ;a_lm=a_est+dp(1); b_lm=b_est+dp(2); c_lm=c_est+dp(3); d_lm=d_est+dp(4); % 計算新的可能估計值對應(yīng)的y和計算殘差e y_est_lm =a_lm+b_lm*cos((pi/c_lm)*(data_1-d_lm)) ; d_lm=obs_1-y_est_lm; e_lm=dot(d_lm,d_lm); % 根據(jù)誤差,決定如何更新參數(shù)和阻尼系數(shù) if e_lm<e lamda=lamda/10; a_est=a_lm; b_est=b_lm; c_est=c_lm; d_est=d_lm; e=e_lm; disp(e); updateJ=1; else updateJ=0; lamda=lamda*10; end end %顯示優(yōu)化的結(jié)果 a_est b_est c_est d_est 代碼2(部分):對代碼1進行改進,想求分段函數(shù)的偏導(dǎo)。 % 計算函數(shù)f的雅克比矩陣,是解析式 syms a b c d f g x k y1 y2 real; if x<f y1=a+b*cos((pi/c)*(x-d)); y1x=jacobian(y1,[a b c d]); else y2=(a+g)+[b*cos((pi/c)*(f-d))-g]*exp(-(x-f)/k); y2x=jacobian(y2,[a b c d g ]) end %Jsym=jacobian(f,[a b c d f g h]); % 擬合用數(shù)據(jù)。 data_1=[0.25 0.5 1 1.5 2 3 4 6 8]; obs_1=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01]; % 2. LM算法 % 初始猜測s a0=4; b0=20;c0=14;d0=13;f0=17;g0=0.9; y_init = a0+b0*cos((pi/c0)*(x-d0)); % 數(shù)據(jù)個數(shù) Ndata=length(obs_1); % 參數(shù)維數(shù) Nparams=4; % 迭代最大次數(shù) n_iters=50; % LM算法的阻尼系數(shù)初值 lamda=0.01; % step1: 變量賦值 updateJ=1; a_est=a0; b_est=b0; c_est=c0; d_est=d0; f_est=f0; g_est=g0; % step2: 迭代 for it=1:n_iters if updateJ==1 % 根據(jù)當前估計值,計算雅克比矩陣 J=zeros(Ndata,Nparams); a=ones(9,1); if x<h J=[ a cos((pi*(d_est - data_1))/c_est)' ((b_est*pi*sin((pi*(d_est - data_1))/c_est).*(d_est - data_1))/c_est^2)' (-(b_est*pi*sin((pi*(d_est - data_1))/c_est))/c_est)'] else J=[ a cos((pi*(d - f))/c)*exp((f - x)/k), (b*pi*exp((f - x)/k)*sin((pi*(d - f))/c)*(d - f))/c^2, -(b*pi*exp((f - x)/k)*sin((pi*(d - f))/c))/c, 1 - exp((f - x)/k), (b*pi*exp((f - x)/k)*sin((pi*(d - f))/c))/c] end 再次感謝蟲友,謝謝! |
新蟲 (初入文壇)
鐵桿木蟲 (職業(yè)作家)
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 266求調(diào)劑 +5 | 陽陽哇塞 2026-03-14 | 10/500 |
|
|---|---|---|---|---|
|
[考研] 材料考研調(diào)劑 +3 | xwt。 2026-03-19 | 3/150 |
|
|
[考研] 354求調(diào)劑 +4 | Tyoumou 2026-03-18 | 7/350 |
|
|
[考研] 化學(xué)工程321分求調(diào)劑 +15 | 大米飯! 2026-03-15 | 18/900 |
|
|
[考研] 收復(fù)試調(diào)劑生 +4 | 雨后秋荷 2026-03-18 | 4/200 |
|
|
[考博] 26博士申請 +3 | 1042136743 2026-03-17 | 3/150 |
|
|
[考研] 268求調(diào)劑 +7 | 好運連綿不絕 2026-03-12 | 8/400 |
|
|
[考研] 277調(diào)劑 +5 | 自由煎餅果子 2026-03-16 | 6/300 |
|
|
[考研] 301求調(diào)劑 +4 | A_JiXing 2026-03-16 | 4/200 |
|
|
[考研] 材料專碩326求調(diào)劑 +6 | 墨煜姒莘 2026-03-15 | 7/350 |
|
|
[考研] 085601求調(diào)劑 +4 | Du.11 2026-03-16 | 4/200 |
|
|
[考研] 一志愿南京大學(xué),080500材料科學(xué)與工程,調(diào)劑 +4 | Jy? 2026-03-16 | 4/200 |
|
|
[考研] 東南大學(xué)364求調(diào)劑 +5 | JasonYuiui 2026-03-15 | 5/250 |
|
|
[考研] 326求調(diào)劑 +4 | 諾貝爾化學(xué)獎覬?/a> 2026-03-15 | 7/350 |
|
|
[考研] 321求調(diào)劑 +5 | 大米飯! 2026-03-15 | 5/250 |
|
|
[考研] 0856求調(diào)劑 +3 | 劉夢微 2026-03-15 | 3/150 |
|
|
[考研] 26考研一志愿中國石油大學(xué)(華東)305分求調(diào)劑 +3 | 嘉年新程 2026-03-15 | 3/150 |
|
|
[考研] 中科大材料與化工319求調(diào)劑 +3 | 孟鑫材料 2026-03-14 | 3/150 |
|
|
[考研] 297一志愿上交085600求調(diào)劑 +5 | 指尖八千里 2026-03-14 | 5/250 |
|
|
[考研] 0856材料與化工301求調(diào)劑 +5 | 奕束光 2026-03-13 | 5/250 |
|