x :源資料點對應的橫座標,可為行向量、矩陣
y :源資料點對應的縱座標,可為行向量、矩陣
n :要擬合的階數,k階擬合需要確定k+1個未知引數,故而至少需要k+1對點(x,y)。
p :擬合多項式 的係數(共n+1個)
s :s是乙個結構體陣列(struct),用來估計**誤差,包含了r,df和normr。
r:polyfit函式中,先根據輸入的x構建範德蒙矩陣v,然後進行qr分解,得到的上三角矩陣(係數矩陣的qr分解的上三角陣)。
df:自由度, df=length(y)-(n+1)。df>0時,為超定方程組的求解,即擬合點數比未知數(p(1)~p(n+1))多。
normr:[擬合誤差平方和的算術平方根=sqrt(sum((ya-yb).^2)) ] 、標準偏差、殘差範數,normr=norm(y-v*p),此處的p為求解之後的數值。殘差是多大的數才算擬合效果好其實並不能確定。只有相關係數(-1,1)才能確定擬合的好壞,越接近1(或-1),表示擬合的效果較好,一般來說在0.95以上可以認為基本擬合。
r=corrcoef(ya,yb)對角線上是自相關,所以是1,剩下兩個變數分別是ya與yb的相關和yb與ya的相關。min(min(corrcoef(ya, yb))) 就是ya,yb之間的相關係數。
mu:x的估計量 xhat = (x-mu(1))/mu(2) where mu(1) = mean(x) and mu(2) = std(x)把x根據公式xhat = (x-mu(1))/mu(2)做了一下中心及比例變換,用xhat和y進行n階擬合,所以結果會不一樣。是說這樣做能同時提高多項式和擬合演算法的數值特性。
資料
x = 1:10;
y = [1 5 10 3 6 32 52 6 15 60];
**
clear;
clc;
x = 1:10;
y = [1 5 10 3 6 32 52 6 15 60];
[p,s] = polyfit(x,y,6)
xi = linspace(1,10,100);
yb=polyval(p,x);
yi=polyval(p,xi);
plot(x,y,'b-',xi,yi,'r-');
legend('原始資料','擬合曲線');
corrco = min(min(corrcoef(y,yb))); %相關係數可用來衡量擬合效果
co_err = [corrco,s.normr]
結果
利用polyval函式求出擬合曲線在x處的**值。
y = polyval(p,x)
[y,delta] = polyval(p,x,s)
y = polyval(p,x,,mu)
[y,delta] = polyval(p,x,s,mu)
一元多項式
一元多項式 功能 1 求解2個一元多項式的和 2 求解2個一元多項式的差 3 列印一元多項式 注 3 這個本來不算是乙個功能,但是發現列印一元多項式的時候問題很多。例如 1x應該列印成 x,x 0不應該應該列印出來 1.結點的定義 typedef struct polynomial polynomi...
一元多項式
include include using namespace std 定義結構體 typedef struct polynode polynode,polylist 建立關於多項式結構體的單鏈表,以係數0結束輸入 polylist polycreate 尾插法建立單鏈表 rear next nul...
一元多項式求導
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 設計函式求一元多項式的導數。輸入格式 以指數遞降方式輸入多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數...