matlab非線性擬合函數lsqcurvefit、nlinfit
2017-05-22 by:CAE仿真在線 來源:互聯網
問題:有些時候我們需要擬合一些非線性的表達式。
比如:我們知道一個表達式的式子是y=A*sin(x).*exp(x)-B./log(x),現在我們手里面有x與y對應的一大把數據。我們如何根據x,y的值找出最佳的A、B值。則我們現在借助Matlab的函數lsqcurvefit、nlinfit,當然也可以使用lsqnonlin。
格式:lsqcurvefit(f,a,x,y)、nlinfit(x,y,f,a)
f:符號函數句柄,如果是以m文件的形式調用的時候,別忘記加@.這里需要注意,f函數的返回值是和y匹對的,即擬合參數的標準是(f-y)^2取最小值,具體看下面的例子
a:最開始預估的值(預擬合的未知參數的估計值)。如上面的問題如果我們預估A為1,B為2,則a=[1 2]
x:我們已經獲知的x的值
y:我們已經獲知的x對應的y的值
例子:
問題:對于函數y=a*sin(x)*exp(x)-b/log(x)我們現在已經有多組(x,y)的數據,我們要求最佳的a,b值
%針對上面的問題,我們可以來演示下如何使用這個函數以及看下其效果
>> x=2:10;
>> y=8*sin(x).*exp(x)-12./log(x);
%上面假如是我們事先獲得的值
>> a=[1 2];
>> f=@(a,x)a(1)*sin(x).*exp(x)-a(2)./log(x);
%第一種方法使用lsqcurvefit
>>lsqcurvefit(f,a,x,y)
ans =
7.999999999999987 11.999999999988997%和我們預期的值8和12結合得非常好
>>
%第二種方法使用nlinfit
>>nlinfit(x,y,f,a)
ans =
8.000000000000000 11.999999999999998
>>
%**********************************
%另一種方法,假如我們寫了一個如下的m文件
functionf=test(a,x)
f=a(1)*sin(x).*exp(x)-a(2)./log(x);
end
%則在上面lsqcurvefit函數調用如下,不要忘記那個@
lsqcurvefit(@test,a,x,y)
轉自http://blog.sina.com.cn/u/bca90a130102x4lo
相關標簽搜索:matlab非線性擬合函數lsqcurvefit、nlinfit MatLab培訓 MatLab培訓課程 MatLab在線視頻教程 MatLab技術學習教程 MatLab軟件教程 MatLab資料下載 MatLab代做 MatLab基礎知識 Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓 Abaqus培訓