Você está na página 1de 19

UNIVERSIDADE FEDERAL RURAL DO SEMIRIDO DEPARTAMENTO DE CINCIAS EXATAS

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 :

xi < xi+1, satisfazendo:

1.
2.
3. Se

4. 1 < |A1| < n-1

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:

Para resolvermos o problema, vamos calcular os coeficientes das equaes normais


atravs do clculo obtido atravs dos valores dos resultados.

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

Particionar grupo A em 2 subgrupos - A1, A2:


-------------------------------------Partio 1
Subgrupo A1:
x13
y24
Ajuste da equao y = ax + b pelos mtodos do mnimos quadrados:
x y x xy
1212
3 4 9 12
SOMA = 4 6 10 14
n = 2 Somatrio(x) = 4 Somatrio(y) = 6 Somatrio(x) = 10 Somatrio(xy) = 14
a0 = ((10) * (6) - (4) * (14))/((2) * (10) - (6) * (6)) = 4 / 4 = 1
a1 = ((2) * (14) - (4) * (6))/((2) * (10) - (4) * (4)) = 4 / 4 = 1
Y(i) = 1 + 1*X(i)
r = (2*2)/(4) = 1
Subgrupo A2:
x 5 7 9 11
y 6 8 10 12
Ajuste da equao y = ax + b pelos mtodos do mnimos quadrados:
x y x xy
5 6 25 30
7 8 49 56
9 10 81 90
11 12 121 132
SOMA = 32 36 276 308

20 * 20 / 20 * 20n = 4 Somatrio(x) = 32 Somatrio(y) = 36 Somatrio(x) = 276


Somatrio(xy) = 308
a0 = ((276) * (36) - (32) * (308))/((4) * (276) - (36) * (36)) = 80 / 80 = 1
a1 = ((4) * (308) - (32) * (36))/((4) * (276) - (32) * (32)) = 80 / 80 = 1
Y(i) = 1 + 1*X(i)
r = (20*20)/(400) = 1

-------------------------------------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

Ajuste da equao y = ax + b pelos mtodos do mnimos quadrados:


x y x xy
9 10 81 90
11 12 121 132
SOMA = 20 22 202 222
2 * 2 / 2 * 2n = 2 Somatrio(x) = 20 Somatrio(y) = 22 Somatrio(x) = 202
Somatrio(xy) = 222
a0 = ((202) * (22) - (20) * (222))/((2) * (202) - (22) * (22)) = 4 / 4 = 1
a1 = ((2) * (222) - (20) * (22))/((2) * (202) - (20) * (20)) = 4 / 4 = 1
Y(i) = 1 + 1*X(i)
r = (2*2)/(4) = 1
Pressione qualquer tecla para continuar. . .

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];

conjuntoA[1] = new int[pontos];


for (int x = 0; x < pontos; x++) {
cout << "x" << x+1 << ": ";
cin >> X[x];
cout << "y" << x+1 << ": ";
cin >> Y[x];
}
cout << "Entradas com " << pontos << " pontos:" << endl;
for (int x = 0; x < pontos; x++) {
conjuntoA[0][x] = X[x];
conjuntoA[1][x] = Y[x];
}
bool continuar = true;
for (int cont = 0; cont < pontos; cont++)
if (conjuntoA[0][cont] < 0 || conjuntoA[1][cont] < 0) {
cout << "Erro: Dados em falta.";
continuar = false;
break;
}
else
cout << conjuntoA[0][cont] << "; " << conjuntoA[1][cont] << endl;
cout << endl;
int particoes;
if (continuar) {
cout << "Particionar grupo A em 2 subgrupos - A1, A2: \n" << endl << endl;
particoes = pontos / 2;

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 << conjuntoA[0][subCont] * conjuntoA[1][subCont] << endl;


}
cout << "SOMA = " << somatorioX << " " << somatorioY << " " << somatorioX2
<< " " << somatorioXY << endl;
int divr0 = (somatorioX2)* (somatorioY)-(somatorioX)* (somatorioXY);
int divd0 = (n)* (somatorioX2)-(somatorioX)* (somatorioX);
float a0 = divr0 / divd0;
int divr1 = (n)* (somatorioXY)-(somatorioX)* (somatorioY);
int divd1 = (n)* (somatorioX2)-(somatorioX)* (somatorioX);
float a1 = divr1 / divd1;
float 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;
// Substituindo nas equaes:"
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 << 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;

for (int subCont = (cont + 2); subCont < pontos; 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 = (cont + 2); subCont < pontos; subCont++) {
somatorioX2 += conjuntoA[0][subCont] * conjuntoA[0][subCont];
somatorioXY += conjuntoA[0][subCont] * conjuntoA[1][subCont];
somatorioDifXDifY += (conjuntoA[0][subCont] - mediaX)*(conjuntoA[1][subCont] mediaY);
somatorioY2 += conjuntoA[1][subCont] * conjuntoA[1][subCont];
somatorioDifX2 += (conjuntoA[0][subCont] - mediaX)*(conjuntoA[0][subCont] mediaX);
somatorioDifY2 += (conjuntoA[1][subCont] - mediaY)*(conjuntoA[1][subCont] mediaY);
somatorioDifY += (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 << conjuntoA[0][subCont] * conjuntoA[1][subCont] << endl;
}
cout << "SOMA = " << somatorioX << " " << somatorioY << " " << somatorioX2
<< " " << somatorioXY << endl;
divr0 = (somatorioX2)* (somatorioY)-(somatorioX)* (somatorioXY);
divd0 = (n)* (somatorioX2)-(somatorioX)* (somatorioX);
a0 = divr0 / divd0;

divr1 = (n)* (somatorioXY)-(somatorioX)* (somatorioY);


divd1 = (n)* (somatorioX2)-(somatorioX)* (somatorioX);
a1 = divr1 / divd1;
//

cout << "Teste" << endl;

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.";

cout << endl;


system("PAUSE");
return 0;
}

void converterCaracteres(char * text) {


char latin_char[] = "";
char * periodo;
int latin_int[] = { 128, 129, 130, 131, 133, 135, 136, 144, 147, 154, 160,
161, 162, 163, 166, 167, 181, 182, 183, 198, 199, 210,
214, 224, 226, 228, 229, 248 };
int txt = 0, ch, num = 0;
unsigned short tamanhoPeriodo, tamanhoTabela = strlen(latin_char);

tamanhoPeriodo = strlen(text);
periodo = new char[tamanhoPeriodo];
strcpy(periodo, text);

cout << endl;


while (txt < tamanhoPeriodo) {
ch = 0;
while (ch < tamanhoTabela) {
if (periodo[txt+1] == latin_char[ch+1]) {
periodo[txt-num] = (char)latin_int[(ch + 1) / 2];
num++;
txt++;
break;
}

else {
periodo[txt - num] = periodo[txt];
ch += 2;
}
}
txt++;
}
periodo[txt - num] = '\0';

strcpy(text, periodo);
}

// Centralizao de um linha de texto


void centralizar(char *titulo) {
int centro = (80 - strlen(titulo))/2;
char *v = new char[centro + strlen(titulo)];

imprimir("\n");
strcpy(v, "");
for (int i = 0; i < centro; i++)
strcat(v, " ");
strcat(v, titulo);
imprimir(v);
}

// Moldura simples de uma barra de ttulo


void barraTitulo(char *titulo) {

int centro = (80 - strlen(titulo)) / 2;


char *v = new char[centro + strlen(titulo)];

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);
}

// Impresso genrica (atualmente habilitada apenas para C++)


void imprimir(char *titulo) {
cout << titulo;
}

Você também pode gostar