lsq_splin
ajuste ponderado por spline cúbico de mínimos quadrados
Seqüência de Chamamento
[y, d] = lsq_splin(xd, yd, x) [y, d] = lsq_splin(xd, yd, wd, x)
Parâmetros
- xd, yd
vetores de mesmo tamanho, dados a serem ajustados por um spline cúbico
- wd
(opcional) um vetor de mesmo formato que
xd
eyd
, pesos dos ajustes de mínimos quadrados.- x
vetor (linha ou coluna) estritamente crescente, pontos de interrupção do spline cúbico
- y, d
vetores de mesmo formato que
x
, a tripla(x,y,d) define o spline cúbico aproximado.
Descrição
Esta função computa um spline cúbico aproximado
s para os dados xd, yd, wd
(a
partir daqui m é suposto como o comprimento desses
vetores) e, de uma escolha dos pontos de interrupção do spline, o vetor
x
(por exemplo, se você deseja n pontos de interrupção
uniformemente escolhidos você pode usar
x=linspace(min(xd),max(xd),n))
). Se
S é o espaço de todas as funções spline cúbicas com
pontos de interrupção x1 < x2 < ... < xn
então, o spline resultante s é tal que:
para todo f em S, i.e., realiza o mínimo da soma de todos os erros quadrados sobre todas as funções de S.
O spline s é completamente definido pela tripla
(x,y,d)
(y
e d
são os vetores das ordenadas dos splines e das derivadas primeiras nos xi
's : yi=s(xi) e di=s'(xi)) e sua
avaliação em alguns pontos deve ser feita pela função interp.
Observações
Quando wd
não é dado, todos os pontos têm o mesmo
peso 1
Um ponto (xd(k),yd(k)) é considerado no ajuste se xd(k) em [x1,xn] e wd(k) > 0. Em particular, você pode colocar um peso nulo (ou mesmo negativo) a todos os pontos que você deseja que sejam ignorados no ajuste. Quando o número total de pontos levados em conta no "procedure" de ajuste é (estritamente) menor que 4, ocorre um erro.
O vetor xd
não necessita estar em ordem
crescente
Dependendo do número e das posições dos xd(k) 's e da escolha dos x(i) 's podem haver várias soluções, mas apenas uma é selecionada. Quando isso ocorre, um aviso é exibido na janela de comando do Scilab. Esta função foi feita para ser usada quando m é muito maior que n e neste caso, tal tipo de problema não ocorre.
Exemplos
// este é um exemplo artificial, onde os dados xd e yd // são contruídos a partir de uma função seno perturbada a = 0; b = 2*%pi; sigma = 0.1; // desvio padrão do ruído gaussiano m = 200; // número de pontos experimentais xd = linspace(a,b,m)'; yd = sin(xd) + grand(xd,"nor",0,sigma); n = 6; // número de pontos de interrupção x = linspace(a,b,n)'; // computando o spline [y, d] = lsq_splin(xd, yd, x); // usando pesos iguais // plotando ye = sin(xd); ys = interp(xd, x, y, d); clf() plot2d(xd,[ye yd ys],style=[2 -2 3], ... leg="função exata@medidas experimentais (perturbação gaussiana)@spline ajustado") xtitle("Um spline de mínimos quadrados") show_window()
Ver Também
Report an issue | ||
<< linear_interpn | Interpolação | mesh2d >> |