DCC-IME-USP CARLOS EDUARDO FERREIRA JOS� COELHO DE PINA
SALA 297A TEL.: 818 6140
SALA 164B TEL.: 818 6295
E-MAIL cef@ime.usp.br
E-MAIL coelho@ime.usp.br
A mesma qu�mica do Exerc�cio-Programa 1 (ela novamente ...), professora do IQ-USP, deseja obter a curva de calibra��o do composto secreto bl�-bl�-bl�. Ela preparou v�rias amostras com concentra��es diferentes de bl�-bl�-bl� e leu as absorb�ncias de cada amostra em um espectrofot�metro, no comprimento de onda de m�xima absorb�ncia deste composto. As concetra��es e as respectivas absorb�ncias foram colocadas em uma tabela e digitadas por um estagi�rio (quem mais ...) em um arquivo. Sabendo que no intervalo estudado a rela��o entre as concentra��es das amostras e as absorb�ncias � linear, a tal professora deseja um programa que determine a equa��o da reta y=mx +b que melhor aproxima os dados colhidos, onde o eixo y das ordenadas representa a absorb�ncia e o eixo x das abscissas representa a concetra��o das amostras.
Preocupada em ter certeza de obter um programa confi�vel e muito bem feito, a professora resolveu ordenar que os alunos de MAC-115 fa�am um programa que recebe uma seq��ncia de pares de pontos e determina a reta que mais se aproxima desses pontos, utilizando o m�todo dos m�nimos quadrados, que est� descrito logo a seguir.
M�todo dos m�nimos quadrados
Nosso objetivo � aproximar uma fun��o f, para a qual s� conhecemos os valores em alguns pontos, por uma reta utilizando o m�todo dos m�nimos quadrados. Este caso particular da aplica��o do m�todo � conhecido pelo nome de regress�o linear.
A fun��o f ser� dada atrav�s de uma tabela de
pontos
do seu gr�fico (ou
seja, yi = f(xi)
).
Aproximar uma fun��o f tabelada nos pontos
pelo m�todo dos
m�nimos quadrados significa determinar os par�metros m e b da reta y = mx
+ b de modo que a soma das dist�ncias dos pontos dados at� a reta obtida seja
m�nima. A Figura 1 mostra a reta
y = 1.1x - 0.2 que aproxima a
fun��o f dada atrav�s dos pontos
(0,0), (1,1), (2,1), (3,4), (4,4).
O chamado coeficiente angular m e coeficiente linear b da reta y
=mx + b que melhor aproxima os pontos
podem ser obtidos resolvendo-se o seguinte sistema de equa��es lineares:
Pela regra de Cramer sabemos que a solu��o do sistema acima � dada por:
Para o exemplo da Figura 1 temos que
O qu� o seu programa deve fazer
O seu programa dever� ler um seq��ncia de pontos de um arquivo, como descrito abaixo, e calcular os coeficientes m e b da reta y = mx + b que melhor aproxima os pontos dados.
Exemplo de entrada para o seu programa (conte�do do arquivo de dados):
0 0 1 1 2 1 3 4 4 4Exemplo de sa�da fornecida pelo programa para os dados acima:
Aproximacao de uma reta pelo m�todos dos m�nimos quadrados Entre com o nome do arquivo de dados: dados.txt x1 = 0.000 y1 = 0.000 x2 = 1.000 y2 = 1.000 x3 = 2.000 y3 = 1.000 x4 = 3.000 y4 = 4.000 x5 = 4.000 y5 = 4.000 [ 5 10.000] b = [ 10.000] [ 10.000 30.000] m = [ 31.000] denominador = 50.000. A equacao da reta e' y = ( 1.100) x + ( -0.200).Esqueleto do seu programa
Para ler os dados de um arquivo use o seguinte `esqueleto' de programa
#include <stdio.h> #define TAM_NOME 100 int main(void) { FILE *arqentrada; char nome[TAM_NOME]; double x, y, m, b; /* outras declaracoes que voce julgar necessarias */ [ ... ] printf("\n\nAproximacao de uma reta pelo metodos dos minimos quadrados\n\n"); printf("Entre com o nome do arquivo de dados: "); scanf("%s", nome); if ((arqentrada = fopen(nome,"r")) == NULL) { printf("Arquivo %s nao foi encontrado\n\n", nome); return 1; } while (!feof(arqentrada)) { /* leitura do proximo ponto */ fscanf(arqentrada,"%lf %lf ", &x, &y); /* importante: deixar espaco em branco apos %lf */ printf("x = %7.3f y = %7.3f\n", x, y); /* trecho do seu programa */ [ ... ] } /* trecho do seu programa */ [ ... ] printf("A equacao da reta e' y =(%7.3f) x + (%7.3f).\n\n\n", m, b); fclose(arqentrada); return 0; }