Programa matlab de alta puntuación para ajuste polinomial
Le doy dos ejemplos como referencia:
Ejemplo 1:
clc;
f=@(beta, x ) (beta(1) beta(2)*x(:,1) beta(3)*x(:,2) beta(4)*x(:,1).*x(:,1)-beta( 4 ) ...
beta(5)*x(:,2).*x(:,2)-beta(5) beta(6)*x(:,1).*x ( :, 2));
x=[0.00144 0.45
0.00144 0.475
0.00144 0.525
0.00144 0.55
0.00152 0.45
0.00152 0.475
0.00152 0.525
0.00152 0.55
0.00168 0.45
0.00168 0.475
0.00168 0.525
0.00168 0.55
0.00176 0.45
0.00176 0.475
0.00176 0.525
0.00176 0.55];
y = [45.69110212
44.24592344
41.94713721
40.58647715
43.86413153 p>
42.02196312
40.52672275
41.19385838
49.83122281
45.92215843
40.71631097
40.28065749
45.73223359
44.81973606
43.23365342
42.49947777];
beta0=[40.0001 1.0818 -2.5844 0.6803 0.6928 -0.4830];
beta=nlinfit(x, y, f, beta0);
Ejemplo 2:
función p=naorthfit ( x, y, m)
Propósito: ajuste polinómico
Formato: x, y son vectores de datos, m es el grado de ajuste del polinomio ortogonal, p devuelve el polinomio
Organiza los coeficientes en orden de potencia descendente
psi=fliplr(eye(m 1, m 1)); rota la matriz unitaria de orden m y asígnala a psi
p=zeros( 1, m 1); p es una matriz cero de orden 1×(m 1)
psi(2, m 1)=-sum(x)/length(x); ponga psi (matriz) en Los elementos de la fila 2 y la columna (m 1) se convierten en el valor negativo de x y la longitud dividida por x.
Para k=2: bucle m, k comienza desde 2, cada paso es 1, cuando k=m, completa el último bucle
Toma la k-ésima fila de psi como polinomio coeficiente, calcula el valor del polinomio en x y asígnalo a t
t=polyval(psi(k,:),x);
Con la k-ésima línea 1 sirve como coeficiente polinómico, calcula el valor del polinomio en x y lo asigna a t
t1=polyval(psi(k-1,:),x);
a es igual a Los elementos en x y t se multiplican correspondientemente, luego se multiplican por la transpuesta de t y luego se dividen por t multiplicado por la transpuesta de t
a=(x.*t)*t '/(t*t') ;
b es igual a la transpuesta de t por t dividida por la transpuesta de t1 por t1
b=(t*t')/ (t1*t1');
El elemento de la k-ésima fila de psi es
El polinomio con 1 y -a como coeficientes se multiplica por el polinomio con la k-ésima fila , 2da a (m 1) columnas de psi como coeficientes.
Restar la fila k-1 de b por psi
psi(k 1,:)=conv([1 -a], psi(k, 2:m 1) )- b*psi(k-1,:);
end end for loop flag
for k=1: m for loop, k comienza desde 1, el tamaño del paso es 1, cuando k=m, completa el último ciclo
t=polyval(psi(k 1,:),x Usando la k-ésima fila de psi como coeficiente polinómico, calcula el polinomio en el valor x y; asígnelo a t
p(k 1)=y*t'/(t*t') la transpuesta de y por t, dividida por la transpuesta de t por t
end Fin del indicador de bucle for
p=p*psi; multiplica p por psi, luego asígnalo a p y pásalo al programa principal.