Como motivação, suponha que se quer encontrar (caso exista) a recta de
que incide nos pontos
. Sendo a recta não vertical, terá uma equação da forma
, com
. Como
incide nos pontos indicados, então necessariamente
No entanto, se considerarmos como dados os pontos
, facilmente chegaríamos à conclusão que não existe uma recta incidente nos três pontos. Para tal, basta mostrar que o sistema de equações dado pelo problema (tal como fizemos no caso anterior) é impossível. Obtemos a relação
Vamos, de seguida, usar todo o engenho que dispomos para encontrar a recta que se aproxima o mais possível dos pontos
.
Sabendo que
, precisamos de encontrar
por forma a que
seja o ponto de
mais próximo de
.
Ou seja, pretendemos encontrar
tal que
, onde
. O ponto
é o de
que minimiza a distância a
. Este ponto
é único e é tal que
é ortogonal a todos os elementos de
. A
chamamos projecção ortogonal de
sobre (ou ao longo) de
, e denota-se por
.
Apresentamos, de seguida, uma forma fácil de cálculo dessa projecção, quando as colunas de são linearmente independentes. Neste caso,
é invertível e a projecção de
sobre
é dada por
Octave
Aconselhamos que experimente o código seguinte no octave e que manipule o gráfico por forma a clarificar que
:
x=[-2;0;1]; y=[-5; 0; 1];b=y; A=[x [1;1;1]] alfa=-6:0.5:6;beta=alfa; [AL,BE]=meshgrid (alfa,beta); Z=0.5*(-AL+3*BE); mesh(AL,BE,Z) hold on plot3([-5],[0],[1],'x') projb=A*inv(A'*A)*A'*b; plot3([projb(1,1)],[projb(2,1)],[projb(3,1)],'o') axis ([-6, 6,-6 , 6, -6,6], "square") legend('CS(A)','b','projeccao de b' ); xlabel ('x');ylabel ('y');zlabel ('z');Calculou-se
projb
a projecção de
Pretendemos agora encontrar por forma a que
, ou seja,
por forma a que a distância de
a
seja a menor possível. Repare que se
é impossível, então essa distância será, seguramente, não nula. A equação
é sempre possível, já que
; ou seja,
escreve-se como
, para algum
(bastando tomar
). No entanto, o sistema pode ser indeterminado, e nesse caso poderá interessar, de entre todas as soluções possíveis, a que tem norma mínima. O que acabámos por expôr, de uma forma leve e ingénua, denomina-se o método dos mínimos quadrados, e a
solução de
de norma minimal, denomina-se a solução no sentido dos mínimos quadrados de norma minimal.
Octave
Vamos agora mostrar como encontrámos a recta que melhor se ajustava aos 3 pontos apresentados no início desta secção.
x=[-2;0;1]; y=[-5; 0; 1];b=y; A=[x [1;1;1]] xx=-6:0.5:6; solminq=inv(A'*A)*A'*b yy=solminq(1,1)*xx+solminq(2,1); plot(x,y,'x',xx,yy); xlabel ('x');ylabel ('y');Para mudar as escalas basta fazer
set(gca,"XLim",[-4 4]); set(gca,"YLim",[-6 6])
, ou em alternativa axis ([-4, 4,-6 , 3], "square");
. Para facilitar a leitura dos pontos, digite grid on
.
Uma forma alternativa de encontrar solução de
seria
solminq=A\b
em vez de solminq=inv(A'*A)*A'*b
.
Ao invés de procurarmos a recta que melhor se adequa aos dados disponíveis, podemos procurar o polinómio de segundo, terceiro, etc, graus. Se os dados apresentados forem pontos de
, podemos procurar o plano que minimiza as somas das distâncias dos pontos a esse plano. E assim por diante, desde que as funções que definem a curva ou superfície sejam lineares nos parâmetros. Por exemplo,
não é uma equação linear em
mas é-o em
e
.
No endereço http://www.nd.edu/~powers/ame.332/leastsquare/leastsquare.pdf
pode encontrar informações adicionais sobre o método dos mínimos quadrados e algumas aplicações.
Em enacit1.epfl.ch/cours_matlab/graphiques.html
pode encontrar alguma descrição das capacidades gráficas do Gnu-octave recorrendo ao GnuPlot.
O exemplo que de seguida apresentamos baseia-se no descrito em [3, pag.58]
Suponha que se está a estudar a cinética de uma reacção enzimática que converte um substrato S num produto P, e que essa reacção segue a equação de Michaelis-Menten,
Depois de se efectuar uma série de experiências, obtiveram-se os dados apresentados na tabela seguinte, referentes à taxa de conversão de gramas de por litro por minuto:
![]() |
![]() ![]() |
![]() ![]() |
1.0 | 0.055 | 0.108 |
2.0 | 0.099 | 0.196 |
5.0 | 0.193 | 0.383 |
7.5 | 0.244 | 0.488 |
10.0 | 0.280 | 0.569 |
15.0 | 0.333 | 0.665 |
20.0 | 0.365 | 0.733 |
30.0 | 0.407 | 0.815 |
Octave
Vamos definir S
, r1
e r2
como os vectores correspondentes às colunas da tabela:
> S=[1;2;5;7.5;10;15;20;30]; > r1=[0.055;0.099;0.193;0.244;0.280;0.333;0.365;0.407]; > r2=[0.108;0.196;0.383;0.488;0.569;0.665;0.733;0.815]; > x=1./S; > y1=0.005./r1; > y2=0.01./r2;Definimos também os quocientes respeitantes a
a./b
indica que se faz a divisão elemento a elemento do vector b
. Finalmente, definimos a matriz do sistema. Usou-se ones(8)
para se obter a matriz > A=[x ones(8)(:,1)] A = 1.000000 1.000000 0.500000 1.000000 0.200000 1.000000 0.133333 1.000000 0.100000 1.000000 0.066667 1.000000 0.050000 1.000000 0.033333 1.000000 > solucao1=inv(A'*A)*A'*y1 solucao1 = 0.0813480 0.0096492 > solucao2=inv(A'*A)*A'*y2 solucao2 = 0.0831512 0.0094384
Recorde que se poderia ter usado solucao1=A\y1
. Daqui obtemos valores para para cada uma das experiências. Vamos denotá-los, respectivamente, por
k21 Km1 k22 Km2
.
> k21=1./solucao1(2,1) k21 = 103.64 > k22=1./solucao2(2,1) k22 = 105.95 > Km1=solucao1(1,1)*k21 Km1 = 8.4306 > Km2=solucao2(1,1)*k22 Km2 = 8.8098 > s=0:0.1:35; > R1=(k21.*0.005*s)./(Km1+s); > R2=(k22.*0.01*s)./(Km2+s); > plot(s,R1,S,r1,'o',s,R2,S,r2,'o') > grid on; legend('E0=0.005','' ,'E0=0.01','' );
Seguinte: Valores e vectores próprios
Acima: e seus subespaços (vectoriais)
Anterior: Brincando com a característica
  Conteúdo
Pedro Patricio
2008-01-08