VE DE ÁLGEBRA LINEAR 1 E IC 1

O objetivo do trabalho é construir um programa capaz de estimar a posição de um alvo em um terreno, a partir do conhecimento de medições fornecidas por n radares. Cada radar é capaz de fornecer a própria latitude, longitude e a direção do alvo, codificada na forma de um vetor unitário do plano, que aponta para o alvo. Os radares são incapazes de fornecerem a distância até o alvo. Estamos considerando também que, devido às limitações de engenharia, as medições fornecidas apresentam imprecisões. Ex:

A figura acima mostra 3 radares localizando um alvo, e ilustra o fato de que suas medições apresentam imprecisões. Uma alternativa para lidar com a imprecisão e quantidade de medidas fornecidas é a utilização do método dos mínimos quadráticos. Para construir o programa pede-se que sejam implementadas as seguintes funções:
a) float a_transp_a( float a[2][2], float *x, float *y, int n );

Essa função recebe uma matriz A = [ x y ], de n linhas e 2 colunas, ou seja, x e y representam as duas colunas de A. Ao ser chamada, deve ser retornado em a[2][2] o valor de .
Object 1

b) void a_transp_b( float atb[2], float *x, float *y, int n );

Essa função recebe a matriz A, da mesma forma que o item anterior, e retorna em atb[2] o vetor definido por
Object 2

, onde b é um vetor de dimensão n, tal que todas suas componentes possuem valor 1.

c) float lin_solve( float r[2], float a[2][2], float b[2] );

Essa função retorna em r a solução do sistema linear pelo vetor b[2].

Object 3

, onde A é dado pela matriz a[2][2] e b é dado

d) void insert_line( float *x, float *y, int i,

float pos[2], float dir[2] );

Essa função deve receber em pos[2] as coordenadas de latitude e longitude de um radar, e em dir[2] as coordenadas da medição fornecida por ele. Como resultado da chamada da função, devem ser colocados em x[i] e y[i] valores tais que, sendo a = x[i] e b = y[i], tenhamos como a equação da reta que passa pelo radar e cuja direção é a medição fornecida por ele. Ou seja, sendo , como definido no item a), tem-se que essa função especifica apropriadamente a i-ésima linha de A.
Object 5 Object 4

e) Adicione a seguinte função main( ) às funções definidas por você nos items anteriores. Leia essa função, e entenda o que o programa faz:
int main( void )

{

float ata[2][2], atb[2]; int i, nradares;

float r[2], x[1000], y[1000], pos[2], dir[2];

scanf( "%i", &nradares );

for( i = 0; i < nradares; i++ ){

scanf( "%f%f%f%f", &pos[0], &pos[1], &dir[0], &dir[1] ); insert_line( x, y, i, pos, dir );

}

a_transp_a( ata, x, y, nradares ); a_transp_b( atb, x, y, nradares ); lin_solve( r, ata, atb );

}

printf( "Coordenada do Alvo:\n%f, %f", r[0], r[1] );

Pronto !!! Seu programa está completo agora vamos testá-lo !!!
f) A lista de valores abaixo corresponde às informações de 20 radares, que precisa ser passada para seu programa estimar a posição de um alvo.
20 4.866398 4.876274 0.833843 8.632368 6.588511 1.797176 7.623816 1.659821 7.030430 1.285347 5.696925 5.815790 5.968438 3.145547 4.133265 9.446834 2.320968 6.468970 9.407033 0.976272 2.700413 0.201553 7.614788 5.572530 0.463489 7.151463 1.560028 9.138008 6.648807 7.126536 6.749360 8.877946 7.630244 8.826492 2.171890 0.694130 5.239624 6.755063 6.776791 6.071567 -0.269522 0.962994 -0.181030 0.983478 0.999980 -0.006358 -0.929943 0.367703 -0.376960 0.926229 0.964801 0.262982 -0.551488 0.834183 0.768865 -0.639411 -0.964704 0.263338 0.977304 0.211844 -0.933118 0.359570 -0.860177 -0.509995 -0.999993 0.003644 0.305121 -0.952314 -0.111330 0.993783 -0.641035 0.767512 0.464832 0.885399 -0.962898 0.269865 -0.990523 0.137349 0.859530 0.511085

Queremos neste item que você utilize seu programa para estimar o posicionamento do alvo a partir das medições desses radares. Como você não aprendeu a manipular arquivos em Linguagem C, explore o fato de que, no LINUX, é possível fazer com que a origem dos dados fornecidos para a função scanf deixe de ser o teclado, e passe a ser um arquivo texto. Mais precisamente, se o seu programa se chama “radares”, basta você salvar a lista de valores acima em um arquivo dados.txt, e executar o programa digitando “./radares < dados.txt” para que seu programa exiba as coordenadas estimadas do alvo. g) Monte 5 arquivos, adaptando o arquivo utilizado no item anterior, de forma que, em cada um deles sejam levados em consideração apenas a informação de um par de radares selecionado no conjunto dos 20 radares fornecidos. Ou seja, encontre 5 soluções ingênuas, descartando parte da informação dos radares para obter uma modelagem através de um sistema linear de duas linhas e duas colunas. h) Sabemos que a posição verdadeira do alvo especificado no item f) é (3.544889, 7.596040). Determine a distância desta posição para as soluções estimadas nos itens f) e g).

Qual a sua conclusão ? Usar a redundância de informação fornecida pelos 20 radares em uma abordagem de mínimos quadráticos foi vantajosa em relação a a abordagem ingênua de selecionar aleatoriamente pares de radares para produzir sistemas lineares sem excesso de equações?

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.