ep2 [Link]
br/~cef/mac115-IQ/eps/ep2/
ne previo
Next: About this document ...
DCC-IME-USP CARLOS EDUARDO FERREIRA JOSÉ COELHO DE PINA
SALA 297A TEL.: 818 6140 SALA 164B TEL.: 818 6295
E-MAIL cef@[Link] E-MAIL coelho@[Link]
MAC-115 - Introdução à Computação
INSTITUTO DE QUÍMICA - PRIMEIRO SEMESTRE DE 2000
Exercício-Programa 1 Entrega: 27 de abril de 2000
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).
1 de 4 3/5/2008 22:15
ep2 [Link]
Figure: Aproximação de um conjunto de
pontos por uma reta.
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
e portanto
Finalmente, usando as fórmulas acima obtemos
2 de 4 3/5/2008 22:15
ep2 [Link]
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 4
Exemplo 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: [Link]
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 */
[ ... ]
3 de 4 3/5/2008 22:15
ep2 [Link]
/* 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;
}
About this document ...
ne previo
Next: About this document ...
Carlos Eduardo Ferreira
2000-04-25
4 de 4 3/5/2008 22:15