Sembei Norimaki berhasil menjelaskan pertanyaan utama Anda dengan baik, jadi saya akan melihat pertanyaan kedua Anda = apakah polyfit merupakan fungsi yang tepat?
Garis yang paling cocok didefinisikan sebagai garis yang mempunyai kesalahan rata-rata nol.
Jika harus berupa "garis", kita bisa menggunakan polyfit, yang akan cocok dengan polinomial. Tentu saja, "garis" dapat didefinisikan sebagai polinomial derajat pertama, namun polinomial derajat pertama memiliki beberapa sifat yang membuatnya mudah untuk ditangani. Persamaan polinomial (atau linier) orde pertama yang Anda cari akan berbentuk seperti ini:
y = mx + b
di mana y adalah variabel terikat dan X adalah variabel bebas. Jadi tantangannya adalah ini: temukan m dan b sedemikian rupa sehingga y yang dimodelkan sedekat mungkin dengan y sebenarnya. Ternyata, kesalahan yang terkait dengan kecocokan linier adalah cembung, artinya kesalahan tersebut mempunyai satu nilai minimum. Untuk menghitung nilai minimum ini, cara paling sederhana adalah dengan menggabungkan bias dan vektor x sebagai berikut:
Xcombined = [x.' ones(length(x),1)];
kemudian menggunakan persamaan normal yang diperoleh dari minimalisasi kesalahan
beta = inv(Xcombined.'*Xcombined)*(Xcombined.')*(y.')
bagus, sekarang baris kita didefinisikan sebagai Y = Xcombined*beta. untuk menggambar garis, cukup ambil sampel dari beberapa rentang x dan tambahkan suku b
Xplot = [[0:.1:5].' ones(length([0:.1:5].'),1)];
Yplot = Xplot*beta;
plot(Xplot, Yplot);
Jadi mengapa polyfit bekerja dengan sangat buruk? baiklah, saya tidak bisa memastikannya, tetapi hipotesis saya adalah Anda perlu mengubah urutan matriks x dan y. Saya kira itu akan memberi Anda garis yang lebih masuk akal.
x = x.';
y = y.';
lalu coba
p = polyfit(x,y,n)
Semoga membantu. Seorang bijak pernah mengatakan kepada saya (dan seperti yang saya pelajari setiap hari), jangan percaya pada algoritma yang tidak Anda mengerti!
person
David Kaftan
schedule
01.03.2017