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);
至此,第一個數學建模模型,插值和擬合,已經完成了。恭喜啦!!!