0

Angenommen, wir die Koeffizienten einer Polynomialgleichung bestimmen, möchten, dass die Tangensfunktion von 0 bis 1 annähert, wie folgt:Solving Least square mit MATLAB

-A m × n Vandermonde-Matrix. Die Einträge werden mit einem m-Wert zwischen 0 und 11 (angegeben als Eingabe) gefüllt.

-Der entsprechende Vektor b wird mit der Tangensfunktion berechnet.

-x wird durch Eingabe von x = A \ b in MATLAB berechnet.

Nun, mit MATLAB, die berechnete X sind in Ax aufgenommen. Das Ergebnis ist geplottet und es ist ziemlich nah an der Tangensfunktion. Aber wenn ich die Polyval-Funktion von n-1 Grad (in MATLAB) verwende, um b zu berechnen, unterscheidet sich die resultierende Kurve signifikant von der ursprünglichen b. Ich kann den Grund für solch einen signifikanten Unterschied zwischen den Ergebnissen dieser beiden Methoden nicht verstehen. Hier

ist der Code:

clear all; 
format long; 
m = 60; 
n = 11; 
t = linspace(0,1,m); 
A= fliplr(vander(t)); 
A=A(:,1:n); 
b=tan(t'); 
x= A\b; 
y=polyval(x, t); 
plot(t,y,'r') 
y2= A*x 
hold on; 
plot(t,y2,'g.'); 
hold on; 
plot(t,tan(t),'--b'); 

Einsicht würde geschätzt. Vielen Dank.

Antwort

1

Nach A= fliplr(vander(t)) die A Matrix gleich

1 t(1) t(1)^2 ... 
1 t(2) t(2)^2 ... 
... 
1 t(m) t(m)^2 ... 

Es ist nicht korrekt, weil polyval die Koeffizienten in absteigenden Kräften akzeptiert. Sie müssen die Spalten A nicht umdrehen:

A= vander(t); 
A= A(:,end-n+1:end);