一、實驗內容
已知一組實驗資料如下表,求它的擬合曲線。
x(i)12
345f(i)
44.568
8.5w(i)21
311二、程式清單與執行結果
m檔案**如下:
function s=mypolyfit(x,f,w,m,n)
% mypolyfit輸出通過最小二乘法求得的擬合曲線並繪圖驗證
% 例如:
% x=[1 2 3 4 5];
% f=[4 4.5 6 8 8.5];
% w=[2 1 3 1 1];
% s=mypolyfit(x,f,w,4,1)
% % g =
% % [ 8, 22]
% [ 22, 74]
% %
% d =
% % 47
% 291/2
% %
% s =
% % (65*x)/54 + 277/108
% 判斷輸入引數是否足夠
if nargin~=5
error('請輸入最小二乘的用矩陣表示的離散點集、權值與點的個數和擬合次方')
end
% 判斷離散點集和權值的個數是否充分
c=[x',f',w'];
[r c]=size(c);
number=r*c;
if number~=3*(m+1)
error('離散點集和權值的個數不充分')
end% 生成線性無關函式族
syms x;
for i=1:n+1
a(i)=x^(i-1);
end
% 計算g
for j=1:n+1
for i=1:n+1
for k=1:m+1
b(k)=w(k)*subs(a(i),x,k)*subs(a(j),x,k);
endg(i,j)=sum(b);
endendg
% 計算d
for j=1:n+1
for k=1:m+1
b(k)=w(k)*f(k)*subs(a(j),x,k);
endd(j)=sum(b);
endd=d'
% 求出擬合曲線的係數
g=g^-1;
c=g*d;
s=0;
for i=1:n+1
s=s+c(i)*x^(i-1);
end
% 畫圖
scatter(x,f,'+');
hold on;
ezplot(s,[0,6]);
xlabel('x')
ylabel('y')
title('擬合曲線')
end
執行結果如下:
>> s=mypolyfit(x,f,w,4,1)
g =[ 8, 22]
[ 22, 74]
d =
47291/2
s =
(65*x)/54 + 277/108
擬合曲線如下所示:
三、實驗總結
在本次實驗中,
我將編寫的演算法的功能擴大,使之不僅僅限於能夠完成進行五個離散點、一次方的最小二乘擬合,而是能夠完成任意多離散點、任意次的最小二乘擬合,離散點集、權值由控制台手動創立乙個矩陣來輸入,而所求的擬合次方也能在控制台輸入,達到了普遍適用的目的。
最小二乘法曲線擬合
設有如下實驗資料x1 2345 6789 1011 1213 141516y 46.4 88.8 9.22 9.59.7 9.86 1010.2 10.32 10.42 10.5 10.55 10.58 10.60 試用最小二乘法多次 1到5次 多項式曲線擬合以上資料。import numpy as...
最小二乘法曲線擬合
在實際工程中,我們常會遇到這種問題 已知一組點的橫縱座標,需要繪製出一條盡可能逼近這些點的曲線 或直線 以進行進一步進行加工或者分析兩個變數之間的相互關係。而獲取這個曲線方程的過程就是曲線擬合。首先,我們從曲線擬合的最簡單情況 直線擬合來引入問題。如果待擬合點集近似排列在一條直線上時,我們可以設直線...
最小二乘法的曲線擬合
最小二乘法的曲線擬合 bool cdatadistillview leastdoublemultiplication long px,long py,long m,long n,double result,double warp for i 0 i m i z 0 b 0 1 d1 n p 0 c ...