Ir ao conteúdo
  • Cadastre-se

C Regressão linear dos pontos em C


yDuba

Posts recomendados

Olá, tenho uma questão que se pede para descobrir os valores do coeficiente A e B, entretanto, na formula os valores de A e B não resultam corretamente. Ajuda?

Enunciado da questão: Faça um programa que use uma subrotina para receber como parâmetro dois vetores, contendo valores da coordenada x e valores da coordenada y de pontos no plano cartesiano. A subrotina deve calcular os coeficientes a e b (conforme equações abaixo) de uma reta y=ax+b que é a regressão linear dos pontos.

a=(nΣxy-Σx*Σy)/(nΣx2-(Σx)2      b=(Σy*Σx2-Σx*Σxy)/(nΣx2-(Σx)2)

#include <stdio.h>
#include <math.h>
#define tam 2

void funcaoaeb( int va[], int vb[], int  i);
int main(){
	//declaração de variaveis 
	
	int va[tam],vb[tam], xa,ya,xb,yb,i;	
	
	//Leitura de x e y para vetor a e b
	printf("Digite valores das cordenadas x e y do vetor A: \n");
		for(i=0; i<tam; i++){
			scanf("%d",&va[i]);
		}
	printf("\n Digite valores das coordenadas x e y do vetor B: \n");
		for(i=0; i<tam; i++){
			scanf("%d",&vb[i]);
		}
	
	funcaoaeb( va, vb, i );
	
}
	void funcaoaeb( int va[], int vb[], int i){
	float n,a,b,somax,somay;
		// Solicita um valor n, pois o mesmo se encontra na formula de regressão linear, entretanto no algoritmo não especifica sua função.
		printf("Digite um valor N \n");
		scanf("%d",&n);
		
		somax=(va[0]+vb[0]);
		somay=(va[1]+vb[1]);
		//descobrir valor de A e B 
	a=((((n*(somax*somay)))-((somax)*(somay))) - ((somax*somay)) )/((n*(somax*somax))-((somax*somax)*(somax*somax)));
	b=(((somay)*(somax*somax))-((somax)*(somax*somay))) /((n*(somax*somax))-((somax*somax)*(somax*somax)));
	
		printf("valor de A: %.2f \n", a);
		printf("Valord de B: %.2f",b);
}


 

Link para o comentário
Compartilhar em outros sites

N é o a quantidade de pontos. No seu caso, você fixou como 2 (TAM).

Σxy (somatório do produto) não é a mesa coisa que Σx*Σy (produto do somatório), assim como Σx2 (soma dos quadrados) não é igual a (Σx)2 (quadrado da soma).

Vai precisar criar mais variáveis auxiliares.

Alem disso o problema pede que você leia uma série de coordenadas x e y. Acho que você deveria primeiro ler o valor de N e depois criar dois vetores x e y:

int n=0, i;

printf("Digite um valor N \n");
scanf("%d",&n);		

float x[n],y[n];	
	
	//Leitura de x e y
printf("Digite valores das cordenadas x e y: \n");
	for(i=0; i<n; i++){
			scanf("%d %d",&x[i], &y[i]);
	}

A partir desse array de coordenadas x e y você calcula a e b . Ex.:

float somax = 0, somay = 0; somaxy = 0; somax2 =0;
for (int i = 0; i< n; i++) {
	somax+=x[i];
    somay+=y[i];
    somaxy = x[i]*y[i];
    somax2 = x[i]*x[i];
}

 Veja se consegue implementa o resto.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!