Red de conocimiento informático - Consumibles informáticos - Programa matlab de alta puntuación para ajuste polinomial

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

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.