cftool擬合&函數逼近


cftool擬合&函數逼近

cftool

 

真是神奇,之前我們搞的一些線性擬合解方程,多項式擬合,函數擬合求參數啊,等等。

已經超級多了,為啥還得搞一個cftool擬合啊?而且毫無數學理論。

如果你足夠細心,你會發現,之前的擬合,都是我們猜測這個擬合的式子大概是什么形式,只需要求個參數。嘿嘿到底准不准呢? 數據及其簡單才會被你發現規律呢!

 

這里在cftool的幫助下不停的嘗試才能得到最好的擬合形式。

 

可以看出,擬合形式多樣,擬合分析方便。

 

· Custom Equations:用戶自定義的函數類型
· Exponential:指數逼近,有2種類型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x)
· Fourier:傅立葉逼近,有7種類型,基礎型是 a0 + a1*cos(x*w) + b1*sin(x*w)
· Gaussian:高斯逼近,有8種類型,基礎型是 a1*exp(-((x-b1)/c1)^2)
· Interpolant:插值逼近,有4種類型,linear、nearest neighbor、cubic spline、shape-preserving
· Polynomial:多形式逼近,有9種類型,linear ~、quadratic ~、cubic ~、4-9th degree ~
· Power:冪逼近,有2種類型,a*x^b 、a*x^b + c
· Rational:有理數逼近,分子、分母共有的類型是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子還包括constant型
· Smoothing Spline:平滑逼近(翻譯的不大恰當,不好意思)
· Sum of Sin Functions:正弦曲線逼近,有8種類型,基礎型是 a1*sin(b1*x + c1)
· Weibull:只有一種,a*b*x^(b-1)*exp(-a*x^b)

 

 

函數逼近

給一個栗子吧:

來擬合。

我們已經可以通過自己已經學的辦法來解決這個問題了(四個函數都可以使用,大致兩條思路)

方法一:首先生成數據,然后寫矩陣

方法二:函數形式

(當然還有多項式擬合方法,和解方程法,沒想到有不知不覺已經學了5個方法了)

x = -pi/2:pi/100:pi/2;
y = cos(x);
x = x';
y = y';
r = [ones(101,1),x.^2,x.^4];
sx = lsqlin(r,y);

函數逼近答案:

 

 

方法二:

x = -pi/2:pi/100:pi/2;
y = cos(x);
F = @(sx)sx(1)+sx(2)*x.^2+sx(3)*x.^4-y;
cs0 = rand(3,1);
cs = lsqnonlin(F,cs0);

 

擬合效果也是杠杠的。

 

現在還有一個方法,哈哈,開心吧!

老實說,看上去有點像解方程,當然是班門弄斧了,里面的原理已經完全不一樣了。

既然已經有函數了,還要麻煩的用這個函數去生成數據嗎?

稍微看了一點理論,還是超級復雜的。哈哈,我等人才還得加油了。

看一下格式吧:

clc,clear;
syms x;
base = [1,x^2,x^4];
y1 = base.'*base;
y2 = cos(x)*base.';
r1 = int(y1,-pi/2,pi/2);
r2 = int(y2,-pi/2,pi/2);
a = r1\r2;
xishu1 = double(a);
xishu2 = vpa(a,6);

 

至此,第一個數學建模模型,插值和擬合,已經完成了。恭喜啦!!!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM