UFRB-Universidade Federal Do Recôncavo Da Bahia: CETENS - Centro de Ciência e Tecnologia em Energia e Sustentabilidade
UFRB-Universidade Federal Do Recôncavo Da Bahia: CETENS - Centro de Ciência e Tecnologia em Energia e Sustentabilidade
UFRB-Universidade Federal Do Recôncavo Da Bahia: CETENS - Centro de Ciência e Tecnologia em Energia e Sustentabilidade
Relatório Técnico
Feira de Santana
2021
Maira Pinto Oliveira
Feira de Santana
2021
2
Sumário
Introdução .....................................................................................................................
Metodologia ...................................................................................................................
Conclusão....................................................................................................................
3
1. Introdução
4
2. Metodologia
6
Na regra do trapézio composta definimos:
1º Intervalo [a,b].
2º Valor de n, quantidade de partes iguais que o intervalo é dividido.
3º altura h = (b - a) / n.
4º valores de xj = a + jh (com j = 0,1,2...,n).
5º valores de yj = f(xj).
6º In = (h/2) * (y0 + 2y1 + y2 +...+yn) ou In = h/2 * Σ ti yi (sendo ti=1,2,2,...,1)
7
(Quetão 1)
(Quetão 2)
8
(Quetão 3)
(Quetão 4)
9
3.Resultados e Discussão
Bibliotecas utilizadas para compilação dos programas.
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <stdlib.h>
#define VERMELHO "\x1b[31m"
#define RESET "\x1b[0m"
main(){
system ("color 7D");
setlocale(LC_ALL, "portuguese");
Menu para que o usuario possa escolher a questão que deseja responder ou testar va-
lores, de de dois do-while. Um para que não seja escolhido nenhum valor diferente das
opções e o outro que pega todo o código, para no final de cada questão, caso deseje,
o usuario possa voltar para este menu.
do{
do{
printf(" *TRABALHO PRÁTICO_ UNIDADE 2* \n");
printf(" ____________________________");
printf(" \n | 1- QUESTÃO 1 |"
"\n | 2- QUESTÃO 2 |"
"\n | 3- QUESTÃO 3 |"
"\n | 4- QUESTÃO 4 |"
"\n | 5- SAIR |"
"\n |____________________________|\n");
scanf("%d", &op);
}while(op<1 || op>5);
switch(op){
10
for(int i=0; i<Tvetor; i++){
Pedindi e guardando os valo-
res de X
scanf("%f", &Y[i]);
}
system ("cls");
printf("X |");
for(int j=0; j<Tvetor; j++){
printf(" %.4f |" , X[j]);
}
printf("\nY |");
for(int j=0; j<Tvetor; j++){
printf(" %.4f |" , Y[j]);
}
Foi necessário fazer um ve-
tor para guardar os valores
n = Tvetor - 1; de delta, pois para calcular
//vetor para colocar os valores de delta_f n Δnf é necessário os valo-
float * Vdel = new float[n]; res de Δn-1f
printf("\n");
printf("%df |",l);
for(int j=0; j<n; j++ ){ Calculo do primeiro deltaf
for(int k=0; k<n; k++){
printf("%.4f | ",del);
printf("\n");
11
d=n;
do{ calculo dos proximos deltas a partir
d-=1; dos resultados do primeiro até o Δnf
l+=1; por isso tem o decremento na vi-
printf("%df |",l); avel d que inicialmente recebe o
valor de n.
for(int i=0; i<d;i++){
del = (Vdel[i+1] - Vdel[i])/(X[i+l]-X[i]);
Vdel[i] = del;
printf("%.4f |", del);
}
printf("\n");
}while(d>0 && l<n);
delete X;
delete Y;
printf("\n\nDeseja tentar outros valores para esta questão? (s=sim/n=não)");
scanf(" %c",&res);
system ("cls"); Caso odigite ‘s’ todo
printf("\n\n"); o processo ira se repe-
tir
} while (res=='s');
12
Questão 2
Para fazer o método de interpolação de Newton é necessário primeiro
fazer o calculo das diferenças divididas, e como a questão 1 pedia a ta-
bela de difereçãs divididas foi aproveitado do mesmo código na parte ini-
cial com alguns incrementos para apresentar uma estimativa pra f(x),
sendo x um valor qualquer.
do{
int Tvetor, n=0, d=0, p=1, l=1, s=1;
float del=0.0, aprox=0.0, fator, x;
system ("cls");
13
printf("\nX |");
for(int i=0; i<Tvetor; i++){
printf("%.4f |" , X[i]);
}
printf("\nY |");
for(int i=0; i<Tvetor; i++){
printf("%.4f |" , Y[i]);
}
n = Tvetor - 1;
float * Vdel = new float[n];
vetor criado para guardar os valores Δnf dos X0,,
float * pol = new float[n]; para ser mais facil fazer o calculo do polinô-
mio e imprimir uma estimativa para o f(x)
desejado
printf("\n");
printf("%df |",l);
//for para saber quantos deltaF iremos fazer
for(int j=0; j<n; j++ ){
for(int k=0; k<n; k++){
del = (Y[j+l] - Y[j])/ (X[j+l]-X[j]);
Vdel[j] = del;
}
printf("%.4f | ",del);
if(j==0){ guardando o valor do
Δnf de X0
pol[j]=del;
}
printf("\n");
d=n;
do{
d-=1;
14
l+=1;
printf("%df |",l);
for(int i=0; i<d;i++){
del = (Vdel[i+1] - Vdel[i])/(X[i+l]-X[i]);
Vdel[i] = del;
printf("%.4f |", del);
verificando a posição do
if(i==0){ vetor esta vazia para guar-
dar os proximos valores de
Δnf correspondentes ao
X0
if(pol[i]!=0){
pol[i+p]=del;
p++;
}
}
}
printf("\n");
}while(d>0 && l<n);
do{
for(int j=0; j<n; j++){
fator = pol[j];
Cálculo da estimativa de F(x)
usando os valores de X, f(x0) e os
for(int i=0; i<s; i++){ valores de Δnf dos X0.
fator*=(x - X[i]);
}
s+=1;
aprox+=fator;
}
aprox+=Y[0];
}while(s<=n);
15
delete X;
delete Y;
delete Vdel;
delete pol;
} while (res=='s');
Questão 3
do{
float a, b, h, n, X, Y, I=0, t=1, mult=0, soma=0;
printf("(Questão 3) Calcular a integral definida em [1,2] de (1 + x^3)^(1/2)
usando a regra dos trapézios com n=6.\n\n");
printf("Informe o valor de a:");
scanf("%f", &a); pedindo valores de a, b e n
e calculando o valor de h a
printf("Informe o valor de b:"); partir dos mesmos
scanf("%f", &b);
printf("Informe quanto vale n:");
scanf("%f", &n);
h = (b-a)/n;
printf("i| xi | yi | ti | Yt\n");
for(int i=0; i<=n; i++){
X = a + (i*(h));
calculo dos valores X e Y
}
16
else{
t=1;
}
for(int j=0; j<=n;j++){
multiplicação de Y*t, e a
variavel soma guarda o
somatório de todos os Y*t
mult = Y * t;
}
soma+=mult;
} while (res=='s');
Questão 4
do{
int n1=0, n2=0, k=1, C=0;;
float a, b, X=0, Y=0, h1=0, h2=0, soma1=0, soma2=0, mult1=0,
mult2=0, I1=0, I2=0, E;
h1 = (b-a)/n1; calculo do n1 e
n2 informados
h2 = (b-a)/n2;
printf("TABELA PARA n = %d\n\n", n1);
printf("\n____________________________________________________
_____");
printf("\ni| X |Y |C | C*Y |");
printf("\n____________________________________________________
____|");
for(int i=0; i<=n1; i++){
Calculo dos valo-
X = a + (i*h1); res de X e Y
}
else{
C=1;
}
18
for(int j=0; j<=n1;j++){
mult1 = Y * C; multiplicação e
somatório dos
} Y*C
soma1+=mult1;
printf("\n____________________________________________________
__________|");
}
printf("\n____________________________________________________
_____");
printf("\ni| X |Y |C | C*Y |");
printf("\n____________________________________________________
____|");
for(int i=0; i<=n2; i++){
X = a + (i*h2);
Y = (4* pow(X,5) - 1)/(pow ((pow(X,5)+X+1),2));
if(i > 0 && i<=(n2-1) ){
if(i%2==0){
C = 2; Agora para os
valores de n2
}else{
C=4;
}
}
else{
C=1;
}
19
for(int j=0; j<=n2;j++){
mult2 = Y * C;
}
soma2+=mult2;
printf("\n____________________________________________________
_________|");
}
I1 = (h1/3)*soma1;
I2 = (h2/3)*soma2;
if(I2 > I1){
E = (I2 - I1)/15;
}else{
E = (I1 - I2)/15;
calculo e resultado da inte-
} gral e do erro usando a re-
gra de Simpson
if(E<0){
E*=(-1);
}
20
Se o usuario não quiser testar mais nenhum método é so escolher essa opção no me-
nu e o codigo vai encerrar.
case 5:{
exit(0);
break;
}
Mensagem para saber ser o usuario quer voltar para o menu e testar outro método,
aparece no fim de todos os métodos caso o usuario não queira testar outro intervalo.
Questão 1:
21
Questão 2:
22
Questão 3:
Questão 4:
23
24
4. Conclusões
25