0
我想了解迴歸如何以八度爲單位實現它。要檢查我的功能是否正確,我將其結果與內置函數polyfit
進行比較。這裏是我的代碼:八度中的多項式迴歸 - 係數太小
p = [0, 1.5 * pi];
function y = f(x)
y = (exp(-4 * sin(4*x)));
end
function c = regress1(x, y, degree)
L = @(j)(arrayfun(@(k)(j^k), (0:degree)));
x_data = [];
for i = x
x_data = [x_data; L(i)];
end
mx = x_data;
my = y';
c = fliplr((pinv(mx' * mx) * mx' * my)');
end
% number of known points
N = 50;
% polynomial degree
D = 20;
% known points
X = linspace(p(1), p(2), N);
Y = arrayfun(@f, X);
% my function
R = regress1(X, Y, D);
% reference function
C = polyfit(X, Y, D);
% test points
W = linspace(p(1), p(2), 1000);
V1 = arrayfun(@(x)(polyval(R,x)), W);
Z = arrayfun(@(x)(polyval(C,x)), W);
clf;
hold on;
fplot(@f, p);
plot(X, Y, '*');
plot(W, V1, '1-');
plot(W, Z, '2-');
hold off;
的問題是,它適用於小的程度(在我的程序變量D
),但更大程度它producecs太小系數。原單功能和兩個近似的情節: - 藍色的,我 - 紅,polyfit - 原單綠色
我懷疑的東西在這部分(pinv(mx' * mx) * mx' * my)'
可能是錯誤的。另外,如果我從pinv
更改爲inv
,我會得到不同的結果,但更糟。
我做了一些研究,發現了一些其他解決方案,例如,但即使這些程序相似,我也找不到我的錯誤。
請問有人能解釋我有什麼不對嗎?
將解決它而不反轉矩陣的幫助?我的意思是如果我使用其他方法解決方程系統。 – GSPdibbler
不是。你已經避免使用與「pinv」相反的內容。 – mmisu