日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lsqcurvefit拟合结果为复数_非线性拟合怎么转化为线性拟合?

發(fā)布時(shí)間:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lsqcurvefit拟合结果为复数_非线性拟合怎么转化为线性拟合? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 前言

對(duì)于多項(xiàng)式函數(shù),可以用最小二乘法求得精確的擬合結(jié)果,使得擬合函數(shù)具有全局最優(yōu)的擬合誤差;對(duì)于某些非線性函數(shù),如指數(shù)函數(shù)

,也可以對(duì)函數(shù)轉(zhuǎn)化后,求得精確的擬合結(jié)果,如上述指數(shù)函數(shù)可轉(zhuǎn)化為 ,同樣可以求得具有全局最優(yōu)擬合誤差的擬合函數(shù)。上述函數(shù)都可以用MATLAB的regress函數(shù)或者polyfit函數(shù)求得最優(yōu)的擬合結(jié)果,或者可以用廣義逆矩陣的最小二乘解計(jì)算而得。
但是,對(duì)于大多數(shù)非線性函數(shù),難以求得擬合誤差全局最優(yōu)的擬合結(jié)果,形如 。這一類函數(shù),一般做法是首先預(yù)估擬合函數(shù)的參數(shù),以此作為初始值,采用迭代優(yōu)化的方法求出局部最優(yōu)的擬合參數(shù),MATLAB中用lsqcurvefit或者nonlinfit函數(shù)求出擬合函數(shù),擬合結(jié)果的準(zhǔn)確性由選取的初始點(diǎn)決定,初始點(diǎn)的選取極為困難。

2. 非線性擬合轉(zhuǎn)化為線性擬合

對(duì)于大多數(shù)指數(shù)函數(shù)、三角函數(shù)、多項(xiàng)式函數(shù)通過四則運(yùn)算或者復(fù)合得到的函數(shù),通常可以用線性微分方程來表示,形如

的常系數(shù)線性微分方程則可以表示以下形式的函數(shù):① ② ③ 。
對(duì)于上述非線性函數(shù),則可以通過擬合線性微分方程的系數(shù),再計(jì)算出對(duì)應(yīng)的非線性函數(shù)的參數(shù),并利用樣本數(shù)據(jù)作為初始條件,擬合出函數(shù)中的其他常數(shù)項(xiàng),如下面步驟。
微分方程需要轉(zhuǎn)化為差分方程:① ;② 。
通過擬合方程 則可得到a和b,再通過求解二次方程 ,得到兩個(gè)解r1和r2。
當(dāng)r1和r2不相等時(shí),則可得到函數(shù) ,再利用樣本數(shù)據(jù)線性擬合則可得到C1和C2。
當(dāng)r1=r2時(shí),可得到函數(shù) ,再利用樣本數(shù)據(jù)線性擬合則可得到C1和C2。
當(dāng)r1和r2為共軛復(fù)數(shù)時(shí),可得函數(shù) ,其中a和b分別為r1的實(shí)部和虛部,再利用樣本數(shù)據(jù)線性擬合則可得到C1和C2。

實(shí)例MATLAB代碼如下:

% 產(chǎn)生樣本數(shù)據(jù) x = linspace(0,98,50)'; y = 0.9*exp(-0.2*x)-0.3*exp(-0.06*x)+10.57; plot(x,y) % 計(jì)算差分 dyx = (y(3:end) - y(1:end-2))./(x(3:end) - x(1:end-2)); ddyx = (y(3:end) - 2*y(2:end-1) + y(1:end-2))./(x(3:end) - x(1:end-2)).^2*4; % 擬合微分方程系數(shù) A = [dyx,y(2:end-1),-1*ones(length(dyx),1)]; b = -ddyx; a = (A.'*A)A.'*b; a(3) = a(3)/a(2); % 求解二次方程 syms r r0 = double(solve(r^2+a(1)*r+a(2))) % 線性擬合得到常數(shù)項(xiàng)C1,C2 A = [exp(r0(1)*x),exp(r0(2)*x)]; C = (A.'*A)A.'*(y-a(3)) % 作圖 hold on plot(x,C(1)*exp(r0(1)*x)+C(2)*exp(r0(2)*x)+a(3),'r.')

最后,還可以用lsqcurvefit函數(shù)進(jìn)一步優(yōu)化擬合結(jié)果,采用上述方法得到的參數(shù)作為初始點(diǎn),可以修正差分方程擬合導(dǎo)致的誤差。

f = @(b,x)b(1)*exp(b(2)*x)+b(3)*exp(b(4)*x)+b(5); b0 = [C(1);r0(1);C(2);r0(2);a(3)]; b1 = lsqcurvefit(f,b0,x,y) hold on plot(x,f(b1,x),'k.')

總結(jié)

以上是生活随笔為你收集整理的lsqcurvefit拟合结果为复数_非线性拟合怎么转化为线性拟合?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。