Escolar Documentos
Profissional Documentos
Cultura Documentos
E DA NATUREZA
CURSO DE CINCIA DA COMPUTAO
Disciplina: Matemtica Discreta 2014.2
Professor: Walter Martins
Aluno: Hugo Dionizio Santos
Subgrupos - Parties e
Coficientes
1 FASE 1 - PARTICIONAMENTO
Considere o problema de particionar um conjunto de pares ordenados
em dois subgrupos A1 e A2 ordenados pela
componente em x, isto :
1.
2.
3. Se
2 FASE 2 - COEFICIENTES
Representar os coeficientes de inclinao linear e angular referentes a A1 e A2, bem
como respectivos valores de coeficientes de disperso.
Ajustar uma funo linear pelo mtodo dos mnimos quadrados aos valores
numricos dados.
Resoulo:
3 RESULTADOS
O problema foi desenvolvido na linguagem C++, com o algoritmo em anexo, com a
utilizao da estrutura de dados de dois vetores e uma matriz de duas colunas.
Utilizando um exemplo para 6 pontos:
--------------------------------------------Matemtica Discreta - 3 Trabalho - Parties
--------------------------------------------Particionamento, clculo de coeficientes de uma reta e regresso linear
Nmero de pontos: 6
Dados 6 pontos de um conjunto A:
x1: 1
y1: 2
x2: 3
y2: 4
x3: 5
y3: 6
x4: 7
y4: 8
x5: 9
y5: 10
x6: 11
y6: 12
Entradas com 6 pontos:
1; 2
3; 4
5; 6
7; 8
9; 10
11; 12
-------------------------------------Partio 2
Subgrupo A1:
x135
y246
Ajuste da equao y = ax + b pelos mtodos do mnimos quadrados:
x y x xy
1212
3 4 9 12
5 6 25 30
SOMA = 9 12 35 44
n = 3 Somatrio(x) = 9 Somatrio(y) = 12 Somatrio(x) = 35 Somatrio(xy) = 44
a0 = ((35) * (12) - (9) * (44))/((3) * (35) - (12) * (12)) = 24 / 24 = 1
a1 = ((3) * (44) - (9) * (12))/((3) * (35) - (9) * (9)) = 24 / 24 = 1
Y(i) = 1 + 1*X(i)
r = (8*8)/(64) = 1
Subgrupo A2:
x 7 9 11
y 8 10 12
Ajuste da equao y = ax + b pelos mtodos do mnimos quadrados:
x y x xy
7 8 49 56
9 10 81 90
11 12 121 132
SOMA = 27 30 251 278
8 * 8 / 8 * 8n = 3 Somatrio(x) = 27 Somatrio(y) = 30 Somatrio(x) = 251
Somatrio(xy) = 278
a0 = ((251) * (30) - (27) * (278))/((3) * (251) - (30) * (30)) = 24 / 24 = 1
a1 = ((3) * (278) - (27) * (30))/((3) * (251) - (27) * (27)) = 24 / 24 = 1
Y(i) = 1 + 1*X(i)
r = (8*8)/(64) = 1
-------------------------------------Partio 3
Subgrupo A1:
x1357
y2468
Ajuste da equao y = ax + b pelos mtodos do mnimos quadrados:
x y x xy
1212
3 4 9 12
5 6 25 30
7 8 49 56
SOMA = 16 20 84 100
n = 4 Somatrio(x) = 16 Somatrio(y) = 20 Somatrio(x) = 84 Somatrio(xy) =
100
a0 = ((84) * (20) - (16) * (100))/((4) * (84) - (20) * (20)) = 80 / 80 = 1
a1 = ((4) * (100) - (16) * (20))/((4) * (84) - (16) * (16)) = 80 / 80 = 1
Y(i) = 1 + 1*X(i)
r = (20*20)/(400) = 1
Subgrupo A2:
x 9 11
y 10 12
4 CONCLUSO
Pode-se verificar atravs de um algoritmo o particionamento de qualquer vetor de
pontos e calcular seus coeficientes.
5 ALGORITMO
/*
* Algoritmo: Parties e Coeficientes
* Nome do Programa: Coeficientes.cpp
* Autor: Hugo Dionizio Santos
* Descrio breve:
* Calcular os coeficientes de um vetor e paricionar um vetor
*/
/* Chamado de bibliotecas */
#include <iostream>
#include <cstring>
#include <string>
#include <sstream>
using namespace std;
/* Prottipo da funo de Josephus */
void converterCaracteres(char * text);
void centralizar(char *titulo);
void barraTitulo(char *titulo);
void imprimir(char *titulo);
/* Funo principal */
int main()
{
int *conjuntoA[2];
stringstream titleTemp;
titleTemp << "Matem" << (char)(160) << "tica Discreta - 3" << (char)(167) << "
Trabalho - Parti" << (char)(135) << "" << (char)(228) << "es";
char title[] = "Matemtica Discreta - 3 Trabalho - Parties";
strcpy(title, titleTemp.str().c_str());
//converterCaracteres(title);
barraTitulo(title);
cout << endl;
string pontoX = "Informe o ponto X";
string pontoY = "Informe o ponto Y";
//char subtitle[] = "Particionamento, clculo de coeficientes de uma reta e regresso
linear\n";
//converterCaracteres(subtitle);
//cout << subtitle;
cout << "Particionamento, c" << (char)(160) << "lculo de coeficientes de uma reta
e regress" << (char)(198) << "o linear\n";
// Dimensionamento
// Formulrio para receber o o nmero de pontos da reta
cout << "N" << (char)(163) << "mero de pontos: ";
int pontos;
cin >> pontos;
// Particionamento
cout << "Dados " << pontos << " pontos de um conjunto A: " << endl;
// Formulrio para insero de valores dos pontos da reta
int *X = new int[pontos];
int *Y = new int[pontos];
conjuntoA[0] = new int[pontos];
int n;
int somatorioX = 0;
int somatorioY = 0;
int somatorioX2 = 0;
int somatorioXY = 0;
int somatorioY2 = 0;
int somatorioDifXDifY = 0;
int somatorioDifX = 0;
int somatorioDifY = 0;
int somatorioDifX2 = 0;
int somatorioDifY2 = 0;
float mediaX = 0;
float mediaY = 0;
for (int cont = 0; cont < particoes; cont++) {
cout << endl << endl << "--------------------------------------";
cout << "\nParti" << (char)(135) << "" << (char)(198) << "o " << cont + 1 <<
endl;
cout << "Subgrupo A1:" << endl;
cout << "x ";
for (int subCont = 0; subCont < (cont + 2); subCont++)
cout << conjuntoA[0][subCont] << " ";
cout << "\ny ";
for (int subCont = 0; subCont < (cont + 2); subCont++)
cout << conjuntoA[1][subCont] << " ";
cout << "\nAjuste da equa" << (char)(135) << "" << (char)(198) << "o y = ax + b
pelos m" << (char)(130) << "todos do m" << (char)(161) << "nimos quadrados:"
<< endl;
// Nmero da amostra do Subgrupo A1
n = (cont + 2);
somatorioX = 0;
somatorioY = 0;
somatorioX2 = 0;
somatorioXY = 0;
somatorioY2 = 0;
somatorioDifXDifY = 0;
somatorioDifX2 = 0;
somatorioDifY2 = 0;
mediaX = 0;
mediaY = 0;
for (int subCont = 0; subCont < (cont + 2); subCont++) {
somatorioX += conjuntoA[0][subCont];
somatorioY += conjuntoA[1][subCont];
}
mediaX = somatorioX / n;
mediaY = somatorioY / n;
cout << "x\ty\tx" << (char)(253) << "\txy" << endl;
for (int subCont = 0; subCont < (cont + 2); subCont++) {
somatorioX2 += conjuntoA[0][subCont] * conjuntoA[0][subCont];
somatorioXY += conjuntoA[0][subCont] * conjuntoA[1][subCont];
somatorioDifXDifY += (conjuntoA[0][subCont] - mediaX)*(conjuntoA[1][subCont] mediaY);
somatorioDifX2 += (conjuntoA[0][subCont] - mediaX)*(conjuntoA[0][subCont] mediaX);
somatorioDifY2 += (conjuntoA[1][subCont] - mediaY)*(conjuntoA[1][subCont] mediaY);
cout << conjuntoA[0][subCont] << "\t";
cout << conjuntoA[1][subCont] << "\t";
cout << conjuntoA[0][subCont] * conjuntoA[0][subCont] << "\t";
cout << "Y(i) = " << a0 << " + " << a1 <<"*X(i)" << endl;
cout << "r" << (char)(253) << " = (" << somatorioDifXDifY << "*" <<
somatorioDifXDifY << ")/("
<< somatorioDifX2*somatorioDifY2 << ") = " << r2 << endl;
// Subgrupo A2
cout << "Subgrupo A2:" << endl;
cout << "x ";
for (int subCont = (cont + 2); subCont < pontos; subCont++)
cout << conjuntoA[0][subCont] << " ";
cout << endl << "y ";
for (int subCont = (cont + 2); subCont < pontos; subCont++)
cout << conjuntoA[1][subCont] << " ";
cout << "\nAjuste da equa" << (char)(135) << "" << (char)(198) << "o y = ax + b
pelos m" << (char)(130) << "todos do m" << (char)(161) << "nimos quadrados:"
<< endl;
// Nmero da amostra do Subgrupo A2
n = pontos - (cont + 2);
somatorioX = 0;
somatorioY = 0;
somatorioX2 = 0;
somatorioXY = 0;
somatorioY2 = 0;
somatorioDifXDifY = 0;
somatorioDifY = 0;
somatorioDifX2 = 0;
somatorioDifY2 = 0;
mediaX = 0;
mediaY = 0;
cout << somatorioDifXDifY << " * " << somatorioDifXDifY << " / " <<
somatorioDifX2 << " * " << somatorioDifY2;
r2 = (somatorioDifXDifY*somatorioDifXDifY) / (somatorioDifX2*somatorioDifY2);
cout << "n = " << n
<< " Somat" << (char)(162) << "rio(x) = " << somatorioX
<< " Somat" << (char)(162) << "rio(y) = " << somatorioY
<< " Somat" << (char)(162) << "rio(x" << (char)(253) << ") = " << somatorioX2
<< " Somat" << (char)(162) << "rio(xy) = " << somatorioXY << endl;
// cout "<>Substituindo nas equaes:" << endl;
cout << "a0 = ((" << somatorioX2 << ") * ("
<< somatorioY << ") - (" << somatorioX << ") * ("
<< somatorioXY << "))/((" << n << ") * (" << somatorioX2
<< ") - (" << somatorioY << ") * (" << somatorioY
<< ")) = " << divr0 << " / "
<< divr0 << " = " << a0 << endl;
cout << "a1 = ((" << n << ") * (" << somatorioXY << ") - (" << somatorioX << ")
* (" << somatorioY << "))/(("
<< n << ") * (" << somatorioX2 << ") - (" << somatorioX << ") * (" <<
somatorioX << ")) = " << divr1 << " / " << divd1 << " = " <<
a1 << endl;
cout << "Y(i) = " << a0 << " + " << a1 << "*X(i)" << endl;
cout << "r" << (char)(253) << " = (" << somatorioDifXDifY << "*" <<
somatorioDifXDifY << ")/(" << somatorioDifX2*somatorioDifY2 << ") = " << r2;
}
}
else cout << "Impossvel particionar.";
tamanhoPeriodo = strlen(text);
periodo = new char[tamanhoPeriodo];
strcpy(periodo, text);
else {
periodo[txt - num] = periodo[txt];
ch += 2;
}
}
txt++;
}
periodo[txt - num] = '\0';
strcpy(text, periodo);
}
imprimir("\n");
strcpy(v, "");
for (int i = 0; i < centro; i++)
strcat(v, " ");
strcat(v, titulo);
imprimir(v);
}
strcpy(v, "");
for (int i = 0; i < centro; i++)
strcat(v, " ");
for (int i = 0; i < strlen(titulo); i++)
strcat(v, "-");
imprimir(v);
centralizar(titulo);
imprimir("\n");
imprimir(v);
}