Você está na página 1de 3

INSTITUTO SUPERIOR DE ENGENHARIA DO PORTO

DEPARTAMENTO DE ENGª INFORMÁTICA

LAPR1 – Laboratório / Projecto 1


2006/2007

Guião 3
Este guião visa continuar a exploração do Scilab como plataforma computacional para resolver
problemas “matemáticos”. Pretende-se que os alunos sejam capazes de compreender o
problema, formular uma solução algorítmica adequada e depois implementá-la através de
programa (script) de Scilab.

Objectivos
O objectivo principal deste guião é desenhar os gráficos de um conjunto de termos de uma série
numérica e do somatório desses termos.
Uma solução possível para o conseguir consiste em criar e preencher adequadamente:
• Um vector de valores de n, no intervalo definido (de 1 até um número N maior do que 1);
• Um vector de valores de termos da série correspondentes;
• Um vector de valores de somatórios de termos da série correspondentes.

Em termos de dados de entrada, neste problema deverão ser:


• O termo geral da série numérica, função de n;
• O número N de termos a considerar.

O somatório de termos será determinado por somatório simbólico. Com esses três vectores
preenchidos será possível fazer várias operações:
• Imprimir os valores de n, termo de ordem n e somatório de termos até à ordem n;
• Desenhar os gráficos dos termos e do respectivo somatório de termos;
• Etc.

Do ponto de vista algorítmico, trata-se de um ciclo iterativo em n (desde 1 até N com passo 1).
Para cada iteração do ciclo determinam-se os valores do termo e do somatório de termos de
ordem N e armazenam-se nos vectores de valores de termos e somatórios de termos.

Principais Aspectos do Scilab a Explorar


O Scilab possui um sistema de ajuda bastante completo e com muita informação sobre as suas
funcionalidades. Os alunos deverão ser encorajados a consultar esse sistema de ajuda.

Para este problema, deverão ser explorados os seguintes aspectos:


• Variáveis numéricas e variáveis simbólicas: syms;
• Avaliação dos N termos da série numérica: eval();
• Criação de um vector com elementos nulos: zeros();
• Cálculo do somatório simbólico dos N primeiros termos de uma série numérica: symsum();
• Ciclo de iteração: for ... end;
• Impressão de mensagens e valores de variáveis: printf();
• Funções de desenho de gráficos de funções: xbasc(), subplot(), plot(), etc.
Solução Proposta
syms n; // define n como variavel simbolica
ni=1; // define o primeiro indice da serie

///// inicio da informacao a definir pelo utilizador


termogeral=1/(n^2+1/2); // define termo geral da serie
nf=20; // define o ultimo indice da serie
///// fim da informacao a definir pelo utilizador

n=ni:nf; // define a gama de indices da serie


termo=eval(termogeral,n); // calcula os valores do termo geral de ni a nf
n=sym("n"); // redefine n como variavel simbolica
somaparcial=zeros(1,nf-ni+1); // cria vector de somas parciais com valor zero
for a=ni:nf,
somaparcial(a)=dbl(symsum(termogeral,n,ni,a)); // calcula as somas parciais
end;

xbasc(); // inicializa ambiente grafico

subplot(2,1,1); // divide em duas janelas verticais e escolhe a 1


plot(ni:nf,termo,'b*-'); // desenha o grafico dos termos da serie

subplot(2,1,2); // escolhe a janela vertical 2


plot(ni:nf,somaparcial,'r.-');// desenha o grafico das somas parciais da serie

printf('\n-----\n'); // imprime termos e somas parciais


for a=ni:nf,
printf('termo[%d]=%f somaparcial[%d]=%f\n',a,termo(a),a,somaparcial(a));
end;

Execução da solução proposta:


1. Colocar o texto dentro de um ficheiro (por exemplo, com nome guiao3.sci);
2. Lançar o Scilab;
3. Abrir o ficheiro referido em 1. através de File/Open (abre um editor de texto com o código);
4. Executar a partir do editor através de Execute/Load into Scilab;
5. O código pode ser alterado, gravado e executado sucessivamente...

Sugestões
Outras séries numéricas para experimentar:
• 1/n
• 1/n^2
• 1/(n^2+n+1)
• 1/(n^3-n^2+1)
Solução Mais Geral
syms n; // define n como variavel simbolica
ni=1; // define o primeiro indice da serie

///// inicio da informacao a definir pelo utilizador


termogeral=(n+1)/(n^3-n+1); // define termo geral da serie
nf=20; // define o ultimo indice da serie
///// fim da informacao a definir pelo utilizador

termo=zeros(1,nf-ni+1); // cria vector de termos com valor zero


for a=ni:nf,
termo(a)=dbl(subs(termogeral,n,a)); // calcula os termos
end;

somaparcial=zeros(1,nf-ni+1); // cria vector de somas parciais com valor zero


for a=ni:nf,
somaparcial(a)=dbl(symsum(termogeral,n,ni,a)); // calcula as somas parciais
end;

xbasc(); // inicializa ambiente grafico

subplot(2,1,1); // divide em duas janelas verticais e escolhe a 1


plot(ni:nf,termo,'b*-'); // desenha o grafico dos termos da serie

subplot(2,1,2); // escolhe a janela vertical 2


plot(ni:nf,somaparcial,'r.-');// desenha o grafico das somas parciais da serie

printf('\n-----\n'); // imprime termos e somas parciais


for a=ni:nf,
printf('termo[%d]=%f somaparcial[%d]=%f\n',a,termo(a),a,somaparcial(a));
end;
Nota: esta solução permite definir termos gerais de séries numéricas mais complexas.

Execução da solução proposta:


1. Colocar o texto dentro de um ficheiro (por exemplo, com nome guiao3b.sci);
2. Lançar o Scilab;
3. Abrir o ficheiro referido em 1. através de File/Open (abre um editor de texto com o código);
4. Executar a partir do editor através de Execute/Load into Scilab;
5. O código pode ser alterado, gravado e executado sucessivamente...

Sugestões
Outras séries numéricas para experimentar:
• exp(-n)/n
• (n+1)/n^2
• n/(n^3-n^2+1)

Versão 1.0 / 28-11-2006

Você também pode gostar