Beruflich Dokumente
Kultur Dokumente
ENGENHARIA CIVIL
CLCULO NUMRICO
CLCULO NUMRICO
ALGORITMO LINGUAGEM C
CATALO
2017
Sumrio
1. INTRODUO .........................................................................................................3
1.1. Linguagem C...................................................................................................... 3
2. ALGORITMOS ..........................................................................................................4
2.1. Zeros de funes ................................................................................................ 4
2.2. Sistemas lineares ................................................................................................ 5
2.4. Interpolao Polinomial ....................................................................................11
2.5. Integrao numrica FRMULAS DE NEWTON CTES ......................... 12
3. CONCLUSO .........................................................................................................14
4. REFERNCIAS BIBLIOGRFICAS .....................................................................15
2
1. INTRODUO
1.1. Linguagem C
3
2. Algoritmos
Mtodo de Newton-Raphson
#include <stdio.h>
#include <math.h>
main()
{int i;
double xn, x0,xn_1;
double erro;
printf("\n Metodo de Newton-Rhapson para zeros de funcoes f(x).\n\n");
printf("\n Funcao utilizada como exemplo: f(x)= x^2 - 5\n\n");
printf(" Entre com a condicao inicial(xo):");
scanf("%lf",&x0);
printf("\n Erro maximo: ");
scanf("%lf",&erro);
xn = x0;
i = 0;
do { xn_1 = xn;
xn = xn_1 - (pow(xn_1,2) - 5) / (2*xn_1);
i++;
printf("\nx[%2d] = %20.17f",i,xn); }
while (fabs(xn - xn_1) > erro);
4
printf ("\n A raiz obtida foi: %20.17f\n",xn);
return 0; }
A resoluo de sistemas lineares um problema que surge nas mais diversas reas (ex.
previso do tempo, otimizao de sinais de transito e linhas de metr, mecnica quntica,
etc). Em caso geral os sistemas lineares envolvem m equaes com n incgnitas, o sistema
pode apresentar uma nica soluo, infinitas solues ou no admitir soluo alguma.
Este sistema pode ser descrito na forma matricial Ax=b com A E Rnxm e x, b E Rn.
Analisam-se duas classes de esquemas numricos os mtodos iterativos e mtodos diretos
void main()
{ int i,j,k,n; float temp,a[9][9],x[9]; char pausa='\0';
5
/* PAUSA */ do { pausa=getch();} while (pausa=='\0');
// Determinao da soluo das equaes.
clrscr();
for (i=n;i>=0;i=i-1)
{ x[i]=a[i][n+1]; for (j=n;j>i;j=j-1) x[i]-=x[j]*a[i][j]; x[i]=x[i]/a[i][i];}
// Sada de Resultados.
for (i=0;i<=n;i++)
cout<<"X[<<i<<<x[i]<<\n;
Em geral, experimentos geram uma gama de dados que devem ser analisados para a
criao de um modelo. Tal analise tem como objetivo determinar certas propriedades para
se obter uma funo matemtica que represente ou que se ajuste aos dados pr-
estabelecidos, de modo que, permita fazer simulaes do processo de forma confivel,
reduzindo as possveis repeties desnecessrias. Portanto, o esquema dos mnimos
quadrados fornece uma funo que melhor representa os dados pr-estabelecidos.
6
return (1); /* F (2,x)=1 */
break;
}
}
int main ()
{
printf (%f\n, F(0,3)) ; /* escreve F (0,3) */
printf (%f\n, F(1,2016)) ; /* escreve F (2,2016) */
printf (%f\n, F(2,2016)) ; /* escreve F (2,2016) */
system (PAUSE);
}
7
f [i] [j]=soma;
f [j] [i]= f [i] [j];
}
}
}
int main ()
{
float x [n]= {-2,-1,1,2}, /* x1=-2, x2=-1, x3=1, x4=2 */
y [n]= {0,2,2,10}, /* y1=0, y2=2, y3=2, y4=10 */
f [m] [n], b [m];
int i;
fij (f,x); /* calcula a matriz f */
printf (%f\n, f [0] [2] );
system (PAUSE);
}
Programa completo.
Determinao da parbola y=a_1x^2+a_2x+a_3 que melhor se ajusta aos pontos (-2,0),
(-1,2), (1,2) e (2,10),
no sentido dos MNIMOS QUADRADOS.
output: a_1, a_2, a_3
9
for (i=0; i<=m-1; i++)
{
for (j=i; j<=m-1; j++)
{
soma=0
for (k=0; k<=n-1; k++)
{
soma=soma + F(i, x[k]) + F(j, x[k]) ;
}
f [i] [j]=soma;
f [j] [i]= f [i] [j];
}
}
}
void bi (float b [m] , float x[n], float y[n]) /* retorna os termos independentes bi */
{
int i, k;
float soma;
for (i=0; i<=m-1; i++)
{
soma=0
for (k=0; k<=n-1; k++)
{
soma=soma + y[k] + F(i, x[k]) ;
}
b[i] =soma;
}
}
void solve (float [m] [n] , float [m]); /* resolve o sistema linear */
int main ()
{
float x [n]= {-2,-1,1,2}, /* x1=-2, x2=-1, x3=1, x4=2 */
y [n]= {0,2,2,10}, /* y1=0, y2=2, y3=2, y4=10 */
f [m] [n], b [m];
int i;
fij (f,x);
bi (b,x,y);
solve (f,b);
for (i=0; i<m; i++ )
printf (%f\n, b [i] );
system (PAUSE);
}
void solve (float [m] [n] , float b[m])
{
register in i, j ,k;
float w [m];
10
for (i=0; i<k; i++) {
w [i] = f [k] [i];
for (j=0; j<i; j++)
w [i] -= w [j] * f [i] [j];
f [k] [i] = w [i] * f [i] [i];
}
for (i=0; i<k; i++)
f [k] [k] -= w [i] * f [k] [i];
f [k] [k] = 1.0 / f [k] [k] ;
}
11
main(){
//---Declaracao de Variaveis
float
X[DIM]={30,35,45,50,55},Y[DIM]={0.5,0.57358,0.70711,0.76604,0.81915},L[N];
float P=1,AUX,XB=40,POL=0;
int I,J,K;
for(I=0;I<N;I++){
for(K=0,J=0;J<N;J++,K++){
if(J!=I){
AUX=(XB-X[J])/(X[I]-X[J]);
P=P*AUX;
}
}
L[I]=P;
P=1;
}
for(I=0;I<N;I++){
printf("\nL[%d] = %f",I,L[I]);
POL=POL+Y[I]*L[I];
}
printf("\nPolinomio Interpolador: P|%d|(%f) = %f",N-1,XB,POL);
Uma forma de se obter uma aproximao para a integral de f(x) num intervalo [a,b],
atravs da integrao numrica . A ideia bsica desse mtodo de integrao a
substituio da funo f(x) por um polinmio que a aproxime razoavelmente no intervalo
[a,b]. Assim o problema fica resolvido pela integrao de polinmios.
#include <stdio.h>
int main()
12
{
// Declarao de variveis.
int i;
int n = 0; // Nmero de parties.
double a, b; // Limites do intervalo de integrao.
double sum = 0; // Valor do integral.
double h;
double x;
// Entrada de dados.
printf("Este programa calcula o integral de e^(-x^2) no intervalo [a,b]\n\n");
printf("Introduza limite inferior a \n");
scanf("%lf", &a);
printf("Introduza limite superior b (b>a)\n");
scanf("%lf", &b);
printf("Introduza nmero de parties do intervalo (n>1)\n");
scanf("%d", &n);
// Inicializar x.
x = a;
// Ciclo de clculo.
for (i = 1; i <= n - 1; i++)
{
sum = sum + f(x) + f(x + h);
x = x + h;
}
sum = sum * h / 2;
// Escrita do resultado.
printf("O resultado da soma e': %lf\n", sum);
return 0;
} // end main()
//
// Funo a integrar.
//
double f(double x)
{
return 1.0 / exp(x * x);
} // end f()
13
3. CONCLUSO
14
4. REFERNCIAS BIBLIOGRFICAS
15