Escolar Documentos
Profissional Documentos
Cultura Documentos
GRUPO DE MATEMTICA
PR
UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 2
SUMRIO
CAPTULO I
1 INTRODUO ................................................................................................ 3
1.1 Breve Histrico e Viso Geral do Software MATLAB ............................. 3
CAPTULO II
2 CONCEITOS BSICOS ................................................................................. 5
2.1 Controle da janela de comandos ............................................................... 5
2.2 Variveis ...................................................................................................... 5
2.3 Caracteres especiais .................................................................................. 6
2.4 Operadores aritmticos .............................................................................. 6
2.5 Operadores condicionais ........................................................................... 6
2.6 Operadores lgicos .................................................................................... 6
CAPTULO III
3 FUNES ELEMENTARES DO MATLAB ..................................................... 7
3.1 Funes Cientficas ..................................................................................... 7
3.2 Formatos Numricos ................................................................................. 8
3.3 Entrada de Matrizes .................................................................................... 8
3.4 Polinmios ................................................................................................... 10
3.5 Sistemas de Equaes Lineares ............................................................... 12
3.6 Operaes com Conjuntos ........................................................................ 14
3.7 Data e Hora ................................................................................................... 15
3.8 Nmeros Complexos .................................................................................. 15
3.9 Operaes com vetores e matrizes ........................................................... 16
CAPTULO IV
4 RECURSOS GRFICOS .................................................................................. 17
4.1 Visualizao de Curvas ............................................................................... 17
4.1.1 Estilos de linhas, marcadores e cores .................................................. 18
4.1.2 Especialidades dos grficos bidimensionais ...................................... 18
4.1.3 Funes grficas 2D especiais .............................................................. 20
4.1.4 Funes para grficos bidimensionais ................................................ 22
4.2 Visualizao de Superfcies ........................................................................ 23
4.2.1 Grficos de linha tridimensional ............................................................ 23
4.2.2 Grficos de Malha e Superfcie ............................................................... 24
4.2.3 Funes para grficos tridimensionais ................................................. 26
4.3 Visualizao de imagens ........................................................................... 27
4.4 Demais funes de manipulao de grficos do MATLAB ................... 27
4.5 Salvando figura em um formato bitmap (extenso BMP) ....................... 28
4.6 Slidos de revoluo .................................................................................. 28
CAPTULO V
5 PROGRAMAO MATLAB .......................................................................... 29
5.1 O Editor do MATLAB .................................................................................. 29
5.2 M-Files: Criando seus prprios programas e funes ............................. 30
5.3 Principais comandos de programao ..................................................... 32
5.4 Interface com o usurio ............................................................................. 36
CAPTULO VI
6 EXPRESSES SIMBLICAS ......................................................................... 38
6.1 Definindo variveis simblicas ................................................................ 38
CAPTULO VII
7 TPICOS ESPECIAIS ..................................................................................... 49
Otimizando a performance de cdigos MATLAB ................................... 49
Estatstica, Matemtica Financeira e Programao Linear .................... 49
Listas de Exerccios e Referncias Bibliograficas ........................................ 66
CAPTULO I
1 INTRODUO
O MATLAB original foi desenvolvido em linguagem Fortran por Clever Moler. Essas
novas verses (5 e 6) foram desenvolvidas em linguagem C por: Steve Bangeret, Steve
Kleiman e Clever Moler Stanford University.
Desde a sua primeira verso (1984), o MATLAB tido como produto lder na rea de
computao numrica e cientfica. Mais do que um software, o MATLAB um ambiente
integrado de modelagem de sistemas e algoritmos, ideal para implementao de
projetos complexos, e que por esta razo vem sendo adotado como ferramenta de
desenvolvimento padro pelas principais universidades do Brasil e do mundo.
A seguir dada uma breve descrio das teclas para reeditar uma linha de comando:
CAPTULO II
2 CONCEITOS BSICOS
2.2 Variveis
Cada varivel um local na memria do computador capaz de conter um valor
que pode ser modificado durante a execuo do programa. Quando o MATLAB
faz clculos, ele utiliza os valores conhecidos para as variveis no momento
em que o clculo foi solicitado. Cuidado com lixos, use sempre o comando clear.
ans varivel de trabalho (utilizada para armazenamento quando no h atribuio), padro usada
para resultados (ans = answer = resposta = sada dos resultados)
eps Preciso numrica relativa (2-52 2x10-16), preciso em ponto flutuante. Menor nmero que,
somado a 1, resulta em um nmero de ponto flutuante maior do que 1 no computador. Pode
ser usado como um erro a ser tolerado na busca de soluo para um determinado problema
atravs de um processo iterativo
i ou j Raiz imaginria (raiz quadrada de 1),ou seja: 1
inf infinito (exemplo: 1 / 0)
NaN ou nan Not a Number (no nmero) (exemplo: 0 / 0; / )
nargin number of argument input: nmero de argumentos de entrada
nargout number of argument output: nmero de argumentos de sada
pi 3.14159... = razo entre o permetro da circunferncia e seu dimetro
realmax maior nmero real positivo utilizvel (representvel em ponto flutuante)=1.7977x1030821023
realmin menor nmero real positivo utilizvel (representvel em ponto flutuante)=2.2251x10-3082-1074
A seguir tem-se as principais dicas sobre o nome a ser dado a uma varivel
: indexao; gerao de vetores. como nico ndice, empilha matriz em uma coluna
() ordem de precedncia em clculos; envolver ndices; envolver variveis de entrada
[] definir vetores e matrizes; envolver variveis de sada
. ponto decimal
... linha de continuao
, separador
; Termina linhas suprimindo a sua impresso na tela
% comentrios
! Seguida de um comando do DOS, acionar esse comando digitado
' define string
= efetua atribuio de varivel
Operador Descrio
& e (and)
| ou (or)
~ no (not)
xor a ou b, mas no a e b (exclusive or) ou exclusivo
any verdadeiro se algum elemento do vetor for verdadeiro
all verdadeiro se todos os elementos do vetor forem verdadeiros
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 7
CAPTULO III
O MATLAB tem uma srie de funes cientficas predefinidas (help elfun). A maioria
pode ser usada da mesma forma que seria escrita matematicamente. Por exemplo:
>> x=sqrt(2)/2
x =
0.7071
>> y=acos(x)
y =
0.7854
>> y_graus=y*180/pi
y_graus =
45.0000
2
Estes comandos calculam o arco cujo cosseno , inicialmente em radianos, depois
2
em graus. Abaixo segue uma lista de algumas funes cientficas disponveis:
Funes Trigonomtricas
sin (x) seno de x sinh (x) seno hiperblico de x
cos (x) coseno de x cosh (x) coseno hiperblico de x
tan (x) tangente de x tanh (x) tangente hiperblica de x
cot (x) cotangente de x coth (x) cotangente hiperblica de x
sec (x) secante de x sech (x) secante hiperblica de x
csc (x) cosecante de x csch (x) cosecante hiperblica de x
asin (x) arco cujo seno x asinh (x) arco cujo seno hiperblico x
acos (x) arco cujo cosseno x acosh (x) arco cujo coseno hiperblico x
atan (x) arco cuja tangente x. atanh (x) arco cuja tangente hiperblica x
acot (x) arco cuja cotangente x acoth (x) arco cujo cotangente hiperblica x
acsc (x) arco cuja cosecante x acsch (x) arco cujo cosecante hiperblica x
asec (x) arco cuja secante x asech (x) arco cujo secante hiperblica x
Funes Elementares
abs(x) valor absoluto, ou seja, mdulo de x
exp(x) exponencial (base e), ou seja, ex
fix arredonda em direo ao zero, considera apenas a parte inteira: Exemplo: 2.98 = 2
floor arredonda em direo a menos infinito (-)
ceil arredonda em direo a mais infinito (+)
gcd(x,y) mximo divisor comum de x e y
lcm(x,y) mnimo mltiplo comum de x e y
log(x) logaritmo natural (base e), ou seja, logaritmo de x na base e
log10(x) logaritmo decimal (base 10), ou seja, logaritmo de x na base 10
log2 logaritmo base 2 e desmembra nmeros em ponto-flutuante
rat aproximao racional: Exemplo: rat(pi)= 3 + 1/(7 + 1/16) = 355/113
rats sada no formato racional: Exemplo: rats(pi) = 355/113
rem (x,y) resto da diviso de x por y: Exemplo: rem(8,3) = 2
round arredonda para o inteiro mais prximo: Exemplo: 2.98 = 3
sign funo sinal
sqrt(x) raiz quadrada de x
Quando o MATLAB mostra um resultado numrico ele segue certas regras. No caso de
nenhum formato estar definido, se um resultado um nmero inteiro, o MATLAB
mostra como um inteiro. Quando um resultado um nmero real, o MATLAB mostra
uma aproximao com at quatro casas decimais. Este foi o caso no exemplo do arco
cosseno, que fizemos anteriormente. Se os dgitos significativos estiverem fora desta
faixa, o MATLAB mostra o resultado em notao cientfica. Voc pode definir um
formato diferente. Os seguintes comandos controlam o formato em que so mostrados
os dados e resultados:
FORMATO RESULTADO
format short Ponto fixo, 4 casas decimais (formato predefinido, default padro)
format short e Notao cientifica, 4 casas decimais
format long Ponto fixo, 14 casas decimais
format long e Notao cientifica, 14 casas decimais
format bank Valor monetrio (dlares e centavos), 2 casas decimais
format rat Formato racional (aproximadamente), isto , razo de inteiros
Essa a maneira mais fcil de entrar com pequenas matrizes. Nessa lista, os
elementos so separados por espao(s) " " ou por vrgula ",", estando entre colchetes
"[ ]", e usando ponto e vrgula ";" para indicar o final de cada linha.
Exemplos:
1) Usando ponto e vrgula 2) Sem usar o ponto e vrgula seria
A=[1 2 3;4 5 6;7 8 9] Pressionando ENTER, tem-se o resultado: A=[1 2 3 Pressionando ENTER
A= 4 5 6 Pressionando ENTER
7 8 9] Pressionando ENTER
1 2 3 A=
4 5 6
7 8 9 1 2 3
4 5 6
7 8 9
Para gerar uma matriz atravs desta opo, basta declarar a funo e seu respectivo
argumento.
Exemplos:
1) Gerar uma matriz identidade 3X3 2) Gerar uma matriz nula 2x3 3) Gerar um vetor formado por elementos 1's
I3=eye(3) Z0=zeros(2,3) UM=ones(3,1)
I3 = Z0 = UM =
0 0 0
1 0 0 0 0 0 1
0 1 0 1
0 0 1 1
Para criar um arquivo com extenso M, utilizamos um editor de texto, como por
exemplo o EDIT do DOS, o WORDPAD do WINDOWS, o editor do MATLAB, etc.
Exemplo:
1) Utilizando o editor do MATLAB, criar o arquivo matriz1.m (a extenso sempre m)
contendo uma matriz M: 2x3, formada pelos elementos (1, 2, 3, 4, 5, e 6, nessa ordem).
Para entrar no editor faa: Clique em File, New e M-File
Para salvar este arquivo: Clique em File, Save As, Salve como: matriz1.m
Para que a matriz M esteja disponvel basta digitar o nome do arquivo nas linhas de
comando.
matriz1
M=
1 2 3
4 5 6
Sempre que escrevermos uma matriz e encerrarmos com ponto e vrgula ";" a sua
exibio na tela ser omitida. Isto til principalmente no caso em que a expresso
resulta em matrizes de grandes dimenses. Neste caso, para termos a matriz na tela,
basta digitar o nome dado a ela.
Exemplo:
I50=eye(50); Pressionando ENTER, aparece apenas a prxima linha de comando
% ao digitar o nome da matriz, a mesma mostrada de forma explcita.
I50
I50 =
Columns 1 through 12
1 0 0 0 0 0 0 0 0 0 0 0 ...
...
Lembrete: 1) Deve-se dar ENTER aps cada linha de comando para que o MATLAB
execute o mesmo.
2) Os parmetros devem estar entre parnteses "( )"
3.4 Polinmios
FUNO OBJETIVO
conv multiplicar polinmios; convoluo
conv2 multiplicar polinmios bidimensionais
deconv dividir polinmios; deconvoluo
poly construir polinmio a partir de suas razes. polinmio caracterstico
polyadd efetuar a soma de polinmios
polyder calcular a derivada de polinmio
polyfit efetuar ajuste polinomial de dados
polyval avaliar uma matriz polinomial
residue resduo de diviso de polinmios
roots determinar as razes de um polinmio (zeros)
3.4.1 Razes
Assim, tem-se:
3.4.2 Adio
3.4.3 Multiplicao
3.4.4 Diviso
p = [1 5 6];
polyval(p,5)
ans =
6
% como no foi atribudo um nome para a varivel resposta, a sada ans
abreviao de answer = resposta
3.4.6 Derivada
p = [1 5 6];
der=polyder(p)
der =
2 -5
Portanto, a derivada dada por: 2x-5
Exemplos:
Function ajuste_poli1 function ajuste_poli2
x=[1 2 3 4 5]; x=[0 1 2 3 4 5];
y=[5 7 9 11 13]; y=[6 2 0 0 2 6];
plot(x,y,'.') plot(x,y,'.')
pause pause
close close
p1=polyfit(x,y,1) p1=polyfit(x,y,1)
p2=polyfit(x,y,2) p2=polyfit(x,y,2)
p3=polyfit(x,y,3) p3=polyfit(x,y,3)
p1 = p1 =
2.0000 3.0000 -0.0000 2.6667
p2 = p2 =
0.0000 2.0000 3.0000 1.0000 -5.0000 6.0000
p3 = p3 =
-0.0000 0.0000 2.0000 3.0000 0.0000 1.0000 -5.0000 6.0000
No MATLAB, esses sistemas podem ser resolvido com qualquer um dos comandos:
x1 + 2 x2 + x3 = 8
Exemplo 1: Resolver o sistema de equaes lineares: 2 x1 x2 + x3 = 3
x + x 2 x = 5
1 2 3
17 x1 + 24 x 2 + x3 + 8 x 4 + 15 x5 = 175
33 x + 5 x + 7 x + 14 x + 16 x = 190
1 2 3 4 5
11x1 + 18 x 2 + 25 x3 + 2 x 4 + 9 x5 = 175
[x,y]=solve('x+y=10', 'x-y=2')
x + y = 10 x =
6
x y = 2 y =
4
[x,y,z]=solve('x+2*y+z=8','2*x-y+z=3','-x+y-2*z=-5')
x1 + 2 x2 + x3 = 8 x =
1
2 x1 x2 + x3 = 3 y =
x + x 2 x = 5 2
1 2 3
z =
3
Exerccio 1: Construir um programa para a resoluo de sistemas lineares com uma nica
soluo ou seja det(A) 0.
function sislin
disp(' ')
disp(' Resoluo de sistemas lineares do tipo Ax=b, com det(A)~=0')
disp(' ')
A=input(' Entre com a matriz dos coeficientes (entre [ ]): A ==> ' )
disp(' ')
b=input(' Entre com o vetor das constantes (entre [ ]): b ==> ' )
disp(' ')
if det(A)==0
disp(' ')
disp (' Fim do Programa')
disp(' ')
else
disp(' Soluo encontrada para o sistema')
disp(' ')
x=inv(A)*b;
i=1;
while i<=(length(b))
disp([' x_'num2str(i),' = ' num2str(x(i)) ]);
i=i+1;
end
disp(' ')
end
Dados A = [1 2 3 4 5] e B = [4 5 6 7 8]
union (A,B) representa AB = [1 2 3 4 5 6 7 8]
intersect (A,B) representa AB = [4 5 ]
setdiff (A,B) representa A - B = [1 2 3]
setxor (A,B) representa (AB) - (AB) = [1 2 3 6 7 8]
A=[1 2 3 4 5];
B=[4 5 6 7 8];
uniao=union(A,B)
uniao =
1 2 3 4 5 6 7 8
intersec=intersect(A,B)
intersec =
4 5
difer=setdiff(A,B)
difer =
1 2 3
exclus=setxor(A,B)
exclus =
1 2 3 6 7 8
function fatorial(n)
% Determinar o fatorial de um nmero n dado
% n! = n .(n-1).(n-2).(n-3). ... .3.2.1
% Sintaxe: fatorial(n)
if n < 0
disp(' ')
disp(' Erro: o nmero deve ser no negativo')
disp(' ')
elseif n==0
disp(' ')
fatorial_n=1;
disp([' ' num2str(n),'! = ' num2str(fatorial_n)]);
disp(' ')
else
disp(' ')
fatorial_n=prod(1:n);
disp([' ' num2str(n),'! = ' num2str(fatorial_n)]);
disp(' ')
end
Exemplo
function tempo
t1=clock;
disp(' ')
c=clock;
c1=c(1);c2=c(2);c3=c(3); c4=c(4);c5=c(5);c6=c(6);
disp([' Data: 'num2str(date),' 'num2str(c4),' horas ' num2str(c5), ' minutos
'num2str(c6),' segundos'])
disp(' ')
disp('OUTRA FORMA ')
disp(' ')
disp([' dia: 'num2str(c3),' ms: 'num2str(c2),' ano: 'num2str(c1)])
disp(' ')
disp([' 'num2str(c4),' horas ' num2str(c5), ' minutos 'num2str(c6),' segundos'])
pause(2)
t2=clock;
t=etime(t2,t1);
disp(' ')
disp([' tempo transcorrido: 'num2str(t),' segundos'])
disp(' ')
Exemplo:
a=1+1i; angulo_radiano=angle(a)
Real=real(a) angulo_radiano =
Real = 1 0.7854
Imag=imag(a) % Obtm-se o argumento(ngulo)do nmero complexo
Imag = 1 angulo_radiano normalizado, isto , no intervalo [-pi,pi]
Modulo=abs(a) angulo_graus=angulo_radiano*180/pi
Modulo = angulo_graus =
1.4142 45
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 16
Definio de intervalos
Exemplos:
>> 0:0.05:2 % inicio: incremento :fim
>> 0:2 % inicio:1:fim
>>linspace(1,13,5) % linspace(inicio,fim,n)
>>linspace(4,200) % linspace(inicio,fim,100)
>>logspace(0,2,11) % potncia de 10: logspace(inicio,fim,n)
>>for k=vi:in:vf instrues end
Vetores
DECLARAO SIGNIFICADO
sum(v) A soma dos componentes do vetor v
std(v) Desvio padro com respeito mdia
max(v) Maior componente de um vetor
mean(v) Mdia das componentes do vetor v
min(v) Menor componente do vetor v
abs(v) Mdulo das componentes do vetor v
norm(v) Norma euclidiana do vetor v
length(v) Nmero de componentes do vetor v
sort(v) Ordena o vetor v em ordem crescente
prod(v) Produto das componentes do vetor v
x * y Produto interno dos vetores x e y
Captulo IV
4 RECURSOS GRFICOS
0.8
0.6
x = -pi : 0.1 : pi; O resultado do 0.4
y= sin (x);
plot( y ) plot 0.2
-0.2
-0.4
-0.6
-0.8
-1
0 10 20 30 40 50 60 70
Note que o eixo das abcissas no reflete a faixa de valores que foi usada para produzir
o vetor y, de -pi at pi. Ao invs disso, o plot assume que o eixo das abcissas deve
ser o ndice do vetor. Para plotar os valores corretos no eixo das abcissas, basta usar
uma pequena variao desse comando (plot(x,y)).
Quando passamos dois vetores para o comando plot, a funo assume que o primeiro
vetor o das abcissas, e o segundo vetor o das ordenadas. O resultado :
0.8
0.6
y = sin ( x ); 0.2
plot( x, y); 0
-0.2
-0.4
-0.6
-0.8
-1
-4 -3 -2 -1 0 1 2 3 4
Exemplo 1: Construir um programa para plotar duas curvas no mesmo grfico, sendo a
primeira com linha slida, na cor vermelha e os pontos representados por asteriscos e
a segunda com linha pontilhada e na cor azul.
1a forma: 2a forma:
function grafico_2x1a function grafico_2x1b
x=-1:0.1:1; x=-1:0.1:1;
y=x.^2; y=x.^2;
z=x.^3; z=x.^3;
plot(x,y,'r*',x,z,'b:') plot(x,y,'r*')
pause pause % pausa at ser pressionada uma tecla
close hold on % Mantm o grfico atual
plot(x,z,'b:')
pause
close
Destaca-se que podem ser gerados vrios grficos em uma mesma janela, com o
comando subplot e que as janelas grficas podem ficar abertas simultaneamente com
os comandos figure e hold.
Exemplo 3:
function sub_plot
subplot(2,2,3)
subplot(2,2,1) x=-4:0.01:4;
x=-4:0.01:4; y=x.^2 + 5;
y=x.^2; plot(x,y)
plot(x,y)
subplot(2,2,4)
subplot(2,2,2) x=-2:0.01:2;
x=-4:0.01:4; y=x.^3;
y=x.^2-5*x+6; plot(x,y)
plot(x,y) pause
close
t=0:0.01:2*pi; 0.8
x=cos(t); 0.6
y=sin(t);
0.4
plot(x,y,'r')
pause -1
-1 -0.5 0 0.5 1
close eixo dos cossenos
3
Exemplo 2: Cardiide
2
t=-pi:0.1:pi;
1
x=2*cos(t)-cos(2*t);
y=2*sin(t)-sin(2*t); 0
plot(x,y);
-1
-2
-3
-3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5
Com esse exemplo fica claro que o comando plot adequado para a visualizao de
curvas paramtricas em 2D. A curva exibida uma poligonizao (interpolao linear)
dos pontos p(i)=(x(i),y(i)) passados como parmetros. O caso de grfico de uma funo
y = f(x) deve ser tratado como um caso particular de grficos de curvas (a saber, o
grfico da funo y=f(x) o mesmo que o da curva x=t ; y=f(t) ). Existe tambm o plot3
que tem o mesmo princpio do plot, mas destina-se a visualizao de curvas
paramtricas em 3.
Exemplo:
T IMO S
BO NS
10% M DIO S
function fatia REG ULARES
x=[40 30 20 10];
pie(x,x==max(x)) 40% 20%
legend('TIMOS','BONS','MDIOS',... 'REGULARES')
pause
close
30%
60 30%
40 20%
20 10%
0 0%
1 2 3 7 4 5
Exemplo: 90
HIST O G RAMA CO M AJUST E A CURVA NO RMAL
x=normrnd(0,1,1000,1);
80
histfit(x)
70
xlabel('eixo x')
ylabel('eixo y') 60
50
eixo y
40
30
20
10
0
-3 -2 -1 0 1 2 3
eixo x
function graf_area 25
GR F ICO DE REA
x1=-5:0.01:5;
y1=x1.^2; 20
plot(x1,y1)
hold on 15
EIXO Y
x2=1:0.01:3;
y2=x2.^2; 10
area(x2,y2)
title('GRFICO DE REA') 5
xlabel('EIXO X')
ylabel('EIXO Y') 0
-5 0 5
pause EIXO X
close
comet: gera grfico com exibio da trajetria animada, ou seja, plota com trajetria
de cometa.
Exemplo: x=0:0.001:2*pi;
comet(x,sin(x))
A seguir, tem-se alguns dos principais comandos para plotar grficos 2D que no foram
apresentados anteriormente:
function ex_plot3
x=1:5; y=1:5;z=[2 2 3 4 4]; 4
plot3(x,y,z) 3.5
grid 3
hold on 2.5
plot3(x,y,z,'ro') 2
5
pause 4
3 4
5
3
close 2
1 1
2
function ex_plot3b
t=0:pi/50:10*pi; DIAGRAMA DE LINHAS
plot3(sin(t),cos(t),t);
title('DIAGRAMA DE LINHAS') 40
grid 30
xlabel('Eixo X')
Eixo Z
20
ylabel('Eixo Y') 10
zlabel('Eixo Z') 0
1
pause 0.5
0 0.5
1
0
close -0.5
-1 -1
-0.5
Eixo Y Eixo X
O comando comet3 exibe o traado de uma curva em trs dimenses, com trajetria
de cometa.
Exemplo:
function helice
% comet3: exibe o traado de uma curva em trs dimenses, visualiza-se o
desenho de uma hlice sendo traado, por exemplo
t=0:pi/100:10*pi;
comet3(sin(t),cos(t),t)
title('HLICE')
xlabel('sen(t)')
ylabel('cos(t)')
zlabel('t')
pause
close
Exemplo 1:
x=1:3;
y=4:7;
[X,Y]=meshgrid(x,y)
X = Y =
1 2 3 4 4 4
1 2 3 5 5 5
1 2 3 6 6 6
1 2 3 7 7 7
function graf_esfera
t=-pi:0.5:pi;
s=-pi:0.5:pi; 1
x=transpose(cos(t))*sin(s); -0.5
% y(i,j)=sin(t(i))*sin(s(j));
-1
y=transpose(sin(t))*sin(s); 1
0.5 1
% z(i,j)=cos(s(j)) 0 0.5
0
z=ones([1 length(t)])'*cos(s); -0.5 -0.5
-1 -1
surf(x,y,z);
pause
close
function graf_fdp2normal
x=-2:0.1:2;
y=-2:0.1:2;
z=transpose(exp(-(x .*x))) * exp(-(y.*y));
surf(x,y,z)
% surf(x,y,z,'FaceColor','red','EdgeColor',...
'none'); % somente para a verso 6.0
camlight left
lighting phong % para incrementar o grfico
pause
close
Exemplo 2:
function ex_contour3
x=-2:0.2:2;
8
y=-2:0.2:2;
6
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2; 4
surf(X,Y,Z) 2
pause 0
20
contour3(Z) 15
15
20
10
pause 5 5
10
close
O MATLAB permite tambm que matrizes sejam visualizadas como imagens. Tambm
possvel ler imagens de arquivos tipo BMP, JPEG, TIF, GIF ... e guardar essa
imagem em uma matriz, o que possibilita processamento e tratamento de imagens.
Para exemplificar a visualizao de imagens, vamos tomar como exemplo a gaussiana
do exemplo anterior, discretizada na matriz z.
x = -2:0.1:2 ;
y = -2:0.1:2 ;
z = transpose(exp(- (x .*x) ) ) * exp( -(y.*y) );
imagesc(z) ; % comando para visualizao da imagem
Para salvar uma figura num arquivo com extenso BMP, que posteriormente poder
ser inserida, como figura, em softwares tais como: o Word for Windows, o Excel, etc.,
deve ser usado o comando: print dbitmap path filename, onde:
Exemplos:
print dbitmap c:windows\parabola1 a figura atual ser salva, num arquivo com o nome
parabola1.bmp, na pasta windows do drive c
print dbitmap a:\parabola1 a figura atual ser salva, num arquivo com o nome
parabola1.bmp, no seu disquete
function ruido
% Construir um sinal de rudos:
% A fc.linspace(0,10,512) cria 512 elem. igualmente espaados entre 0 e 10
% linspace = linearmente espaados
t=linspace(0,10,512);% eixo do tempo
x=3*sin(5*t)-6*cos(9*t)+5*randn((size(t))); % Rudo Branco normal(0, 1)
plot(t,x)% Plota sinal com rudo gaussiano
title('SINAL DE UM RUDO')
xlabel('EIXO DO TEMPO')
pause
print -dbitmap c:\graficos\ruido % salvar arquivo: ruido.bmp em c:\graficos
close
O MATLAB tem uma funo chamada makevase que ativa uma janela denominada
Making a Vase (fazendo um vaso), proporcionando a possibilidade de gerar slidos em
revoluo.
Assim que digitado makevase na linha de comandos, voc deve clicar na opo New
Shape, logo aparecer na primeira janela uma linha vermelha que representar o
centro da rotao. Voc dever, em seguida, ir clicando com o boto esquerdo do
mouse fazendo o contorno da sua figura sendo que, o ltimo ponto dever ser feito
com o boto direito do mouse (ou esquerdo, desde que mantenha pressionado a tecla
shift), aparecendo ento a figura (slido) na tela.
New Shape deve ser acionado (clicando) para se fazer uma nova figura (molde)
Comment Window uma janela que fornece as instrues (passos) para confeces da superfcie em
revoluo
info abre uma janela de ajuda sobre como usar a funo makevase
close fecha a janela relativa funo makevase
CAPTULO V
5 PROGRAMAO MATLAB
1) Usando o comando:
>> edit nome-do-arquivo
ou, para abrir o editor com um arquivo vazio,
>> edit
2) Selecionando NEW M-FILE para criar um novo arquivo ou OPEN M-FILE para
editar um arquivo j existente, a partir do menu FILE.
3) Selecionando os cones:
Esse arquivo pode ser criado com qualquer editor de texto e deve ter uma extenso .m;
por exemplo, o script acima poderia estar no arquivo distancia_p_q.m . Para cham-
lo basta entrar com o nome do arquivo na janela de comandos (Command Window):
Uma alternativa aos arquivos scripts so os arquivos tipo function, que admitem
parmetros de entrada, retornam valores e possuem variveis locais (no afetam o
workspace). Essas caractersticas fazem com que programas escritos nesse formato
atuem exatamente como os comandos nativos do MATLAB. So, portanto, uma forma
de ampliar a linguagem, e um dos pontos chaves do MATLAB.
Exemplo:
function distancia=calcula_distancia(x,y)
% Calcula a distancia euclidiana entre os pontos x e y (vetores do Rn)
diferenca=x-y;
distancia=sqrt(diferenca*transpose(diferenca));
Exemplo 1: Exemplo 2
>> p=[1 0 0]; distancia=calcula_distancia([3 4],[0 0])
>> q=[0 1 0]; distancia =
>> d=calcula_distancia(p, q) 5
Ou:
>>d=calcula_distancia([1 0 0], [0 1 0])
d=
1.4142
Salienta-se que essa funo determina a distncia entre dois vetores quaisquer,
independente do nmero de componente dos mesmos (desde que ambos vetores
sejam de mesma dimenso, claro).
O arquivo tipo function tambm tem que ter extenso .m e deve ter o mesmo nome
usado na definio da funo, descrita na primeira linha do arquivo; no exemplo
anterior o nome do arquivo deve ser calcula_distancia.m. Veja que para executar
essa funo usamos o Command Window da mesma forma como se executa um
comando nativo do MATLAB:
A seguir, tem-se uma lista com alguns comandos de programao para o controle de
fluxo, bem como comandos de programao geral e interfaces com o usurio.
A sintaxe do IF :
if teste
..........
elseif
..........
else
..........
end
Exemplo 01: Fazer um programa que permita calcular valores para a funo:
1 , se x < -1
f ( x) = x 2 , se - 1 x 1
x + 2 , se x > 1
function a=program1(x)
if x<-1
a=1;
elseif x>=-1 & x<=1
a=x ^2;
else
a=-x+2;
end
A sintaxe do FOR :
Exemplo 02:
for i = 1:10
disp(i*i )
end
Exemplo 03:
for i=1:8
for j=1:8
A(i,j)=i+j;
B(i,j)=i-j;
end
end
C=A+B;
disp(C) % mostra o resultado sem mostrar o nome da varivel
Exemplo 06:
for i=1:5
for j=1:5
if i==j;
A(i,j)=1;
elseif abs(i-j)==1
A(i,j)=-1;
else
A(i,j)=0;
end
end
end
disp(A) % mostra o resultado sem mostrar o nome da varivel
Exemplo 07: Criar um programa que verifique se o nmero dado positivo, se sim
determinar se o mesmo par ou mpar.
function par_impar(n)
if n<0 % se n negativo
disp ('O nmero dado negativo')
elseif rem(n,2)==0 % se nmero positivo e par
disp ('O nmero dado positivo e par')
else
disp('O nmero dado positivo e mpar')
end
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 34
while teste
..........
end
function parabola1
clear % limpa variveis e funes da memria (RAM)
clc % limpa a tela
aux='s';
while aux=='s';
clc % limpa a janela de comandos, posiciona o cursor no incio da tela
a=input('a=');
b=input('b=');
c=input('c=');
xv=-b/2*a;
x=(xv-5):0.01:(xv+5);% definio do domnio
y=a*x.^2+b*x+c;
plot(x,y);
figure(1)
pause
clc % limpa a tela
close % fecha a figura
aux=input('Plotar outro grfico? (s-sim, n-no)==>' , 's');
% Pergunta se quer plotar um outro grfico. Apenas quando for digitado "n"
que o programa encerra-se, caso contrrio continua indefinidamente o loop.
end
switch expresso
case valor1
afirmaes
case valor2
afirmaes
...
otherwise
afirmaes
end
Obs. : Se o primeiro caso for verdadeiro os outros casos no so executados.
Exemplo 10:
function ex_switch1 % multiplos condicionais em cada caso
var=input('Entre com um dos valores: function ex_switch2
-1, 0 ou 1 ==> '); var=input('Entre com um valor ==> ');
switch var switch var
case 1 case 1
disp('Nmero negativo') disp('1')
case 0 case {2,3,4}
disp('Zero') disp('2 ou 3 ou 4')
case 1 case 5
disp('Nmero positivo') disp('5')
otherwise otherwise
disp('outro valor') disp('outro valor')
end end
O comando break permite uma sada antecipada de um for ou while. Esse comando
faz com que o lao mais interno seja terminado imediatamente.
Exemplo 11:
function modifica_matriz
A=[1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5];
X='s';
for i=1:5
if x=='q'
break
end
j=1;
while j<=5
['A('num2str(i),','num2str(j),')='num2str(A(i,j))]
x=input('Modifica? (s-sim, n-no, p-prxima linha, q-sair)==>','s');
if x=='s'
A(i,j)=input('Entre como novo valor de A(i,j)==>');
j=j+1;
clc % limpa a tela
end
if x=='n'
j=j+1;
clc
end
if x=='p'
clc
break % interrompe o WHILE, para mudar para outra linha
end
if x=='q'
clc
break
end
end
end
Caixas de dilogos
Exemplo 13:
function area_retangulo
%CALCULO DA REA DE UM RETNGULO
aviso={'Entre com a largura:' ,'Entre com o comprimento:'};
titulo='REA DE UM RETNGULO';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
larg=str2num(char(resposta(1)));
comp=str2num(char(resposta(2)));
disp(' **************')
disp(' * REA *')
disp(' **************')
area=larg*comp;
disp(' 'area)
MENU: Lista de escolhas que aparece na tela enquanto determinado programa est
sendo executado, ou seja, gera um menu de escolhas para entrada do usurio.
Exemplo 11:
function imc
if k==1
dados = {'ENTRE COM O SEU PESO (kg):','ENTRE COM A SUA ALTURA (m):'};
titulo = 'NDICE DE MASSA CORPREA IMC';
linhas=1;
resposta=inputdlg(dados,titulo,linhas);
peso=str2num(char(resposta(1)));
altura=str2num(char(resposta(2)));
format bank
indice = peso/(altura*altura);
disp(' ----------------------------------------------------------')
disp(' |PESO (kg) | ALTURA (m) | NDICE DE MASSA CORPREA - IMC |')
disp(' ----------------------------------------------------------')
saida=[peso altura indice];
disp(sprintf('%10.2f %11.2f %17.2f',saida'))
disp(' ')
if indice < 20
disp(' ')
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 37
if indice >= 30
disp(' ')
disp(' REPENSE O SEU MODO DE VIVER, OU ...')
disp(' ')
end
pause
imc
else
% sair do programa
disp(' ')
disp(' -------------------------')
disp(' |OBRIGADO POR USAR: IMC |')
disp(' -------------------------')
disp(' ')
end
CAPTULO VI
6 EXPRESSES SIMBLICAS
Agora, vamos ver como podemos manipular com expresses que alm de nmeros e
variveis numricas, contm tambm variveis simblicas.
Uma vez definido que a varivel x uma varivel simblica, podemos definir
expresses que envolvem esta varivel.
Exemplo:
x=sym('x') Ou
x= syms x
x y=x+2*x
y=x+2*x y =
y= 3*x
3*x
Exemplo:
x= sym('x') Ou simplesmente:
x =
x syms x y z
y= sym('y')
y =
y
z= sym('z')
z =
z
Exemplo: f=(x^2+1)*(x^3+2*x)
x=sym('x');
f=(x^2+1)*(x^3+2*x)
f =
(x^2+1)*(x^3+2*x)
produto=collect(f)
produto =
x^5+3*x^3+2*x
pretty(produto)
5 3
x + 3 x + 2 x
Exemplo 1 Exemplo 2
x=sym('x'); x=sym('x');
f=sin(x)^2+cos(x)^2 f=(x+1)*(x-1)
f = f =
sin(x)^2+cos(x)^2 (x+1)*(x-1)
simplif=simplify(f) simples=simple(f)
simplif = simples =
1 x^2-1
Exemplo:
x=sym('x');
f=x^4-5*x^3+5*x^2+5*x-6
f =
x^4-5*x^3+5*x^2+5*x-6
fator=factor(f)
fator =
(x-1)*(x-2)*(x-3)*(x+1)
Exemplo
x=sym('x');
f=(x-1)*(x-2)*(x-3)*(x+1)
f =
(x-1)*(x-2)*(x-3)*(x+1)
expans=expand(f)
expans =
x^4-5*x^3+5*x^2+5*x-6
x=sym('x');
f=x^4-5*x^3+5*x^2+5*x-6
f =
x^4-5*x^3+5*x^2+5*x-6
pretty(f)
4 3 2
x - 5 x + 5 x + 5 x - 6
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 40
poly2sym(f,'var'):
resp=poly2sym([1 -5 6],'x')
resp =
x^2-5*x+6
pretty(resp)
2
x - 5 x + 6
Sintaxe:sym2poly(f):
x=sym('x');
f=x^2-5*x+6
f =
x^2-5*x+6
coef=sym2poly(f)
coef =
1 -5 6
Exemplo:
syms x
y=2*x-4
y =
2*x-4
f_inversa=finverse(y)
f_inversa =
2+1/2*x
pretty(f_inversa)
2 + 1/2 x
n
Exemplo: (2n 1) 2
1
syms n
soma=symsum(2*n-1,1,n)
soma =
(n+1)^2-2*n-1
expande=expand(soma)
expande =
n^2
pretty(expande)
2
n
Exemplo geral:
Dadas duas funes f(x) = 2x2+3x-5 e g(x) = x2-x+7, podemos fazer uma srie de
operaes algbricas envolvendo estas funes, tais como:
a) f+g b) f-g c) f*g
d) expandir (f*g) e)f/g f) expandir(f/g)
g) usar o comando pretty para tornar mais fcil a visualizao dos resultados
h) f3 i) expandir(f3)
>>B=f-g
B =
x^2+4*x-12
>>C=f*g
C =
(2*x^2+3*x-5)*(x^2-x+7)
>>D=expand(C)
D =
2*x^4+x^3+6*x^2+26*x-35
>>E=f/g
E =
(2*x^2+3*x-5)/(x^2-x+7)
>>F=expand(E)
F =
2/(x^2-x+7)*x^2+3/(x^2-x+7)*x-5/(x^2-x+7)
>>pretty(F)
2
x x 5
2 ---------- + 3 ---------- - ----------
2 2 2
x - x + 7 x - x + 7 x - x + 7
>>H=f^3
H =
(2*x^2+3*x-5)^3
>>I=expand(H)
I=
8*x^6+36*x^5-6*x^4-153*x^3+15*x^2+225*x-125
O MATLAB pode resolver equaes literais. Por exemplo, para resolver a equao:
ax2+bx+c = 0
raizes=solve(a*x^2+b*x+c)
raizes =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
O MATLAB pode exibir este resultado de uma forma mais fcil de enxergar usando a
funo pretty.
pretty(raizes)
[ 2 1/2]
[ -b + (b - 4 a c) ]
[1/2 --------------------]
[ a ]
[ ]
[ 2 1/2]
[ -b - (b - 4 a c) ]
[1/2 --------------------]
[ a ]
syms a b c d syms a b c d e f g h i
A=[a b c; d e f;g h i]
A=[a b; c d]
DET=det(A)
DET=det(A)
DET =
DET =
i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e
a*d-b*c
exemplo 1:
ezplot(sin(x))
exemplo 2:
ezplot(x^2)
Existem vrias outras funes para manipulao de expresses algbricas. Voc pode
obter informaes sobre elas digitando help symbolic. Uma funo interessante que
mostra as capacidades do MATLAB em tratar com funes matemticas funtool que
uma calculadora para funes.
6.13 Limites
Sintaxe: limit(funo,valor) % Determina o limite de uma expresso, para um valor
Exemplos:
sen( x) syms x
lim limit(sin(x)/x,0)
x 0 x 1
x2 4 syms x
lim limit((x^2-4)/(x-2),2)
x2 x 2 4
Exerccio:
x
Usar mudana de varivel e o MATLAB para provar que: lim 1 + 1 = 2,71 = e xp(1)
x
x
1 1
Soluo: Fazendo t = quando x , t 0 lim(1 + t ) t =
t t 0
syms t
limit((1+t)^(1/t),0)
exp(1)
Assim, tem-se:
a =
cos(x^3/(x^2+1))*(3*x^2/(x^2+1)-2*x^4/(x^2+1)^2)
pretty(a)
3 / 2 4 \
x | x x |
cos(------) |3 ------ - 2 ---------|
2 | 2 2 2|
x + 1 \ x + 1 (x + 1) /
3
Exemplo 04: f ( x ) = sen 2 x .ln x 3 f ' ( x) = 2 sen x. cos x. ln x 3 + . sen 2 x
x
sym x
b=diff((sin(x))^2*log(x^3))
b =
2*sin(x)*log(x^3)*cos(x)+3*sin(x)^2/x
pretty(b)
2
3 sin(x)
2 sin(x) log(x ) cos(x) + 3 -------
x
1
Exemplo 05: f ( x ) = cos x cos 3 x f ' ( x) = sen( x) + cos 2 ( x). sen x = sen 3 x
3
sym x
c=diff(cos(x)-(1/3)*(cos(x)^3))
c =
-sin(x)+cos(x)^2*sin(x)
pretty(c)
2
-sin(x) + cos(x) sin(x)
d =
2*sec(x)^2*tan(x)+e^(6*x)
pretty(d)
2 (6 x)
2 sec(x) tan(x) + e
6.15 Integrao
So dadas trs funes para calcular a rea sob a curva num intervalo finito.
A integrao numrica usando o processo chamado de quadratura, no MATLAB,
pode ser feita atravs das funes:
quad Integrao numrica usando a regra de Simpson recursiva (baixa
ordem).
quad8 Integrao numrica usando a regra de Newton-Cotes adaptativa (alta
ordem).
Alm dos mtodos anteriores, o MATLAB, determina a integral definida atravs
das funes:
trapz aproxima a integral sobre a funo, pelo somatrio das reas dos
trapzios
trapz (x,y) d o valor da integral de y com seu respectivo x usando para isso
o mtodo dos trapzios. Mtodo trapezoidal.
Integrais simblicas
Para resolver uma Equao Diferencial Ordinria (E.D.O.) no MATLAB, pode se usar a
funo dsolve, cuja sintaxe dada por:
dsolve(f, cond,'var'), onde:
f : funo; cond : so as condies iniciais (ou de contorno) e var: varivel
Exemplos:
dy
1) Resolver a E.D.O. de 1.a ordem: = 1 + y 2 com condio inicial y(0)=1
dt
sol=dsolve('Dy=1+y^2,y(0)=1','x')
sol=
tan(x+1/4*pi)
sol=dsolve('Dy=6*x^2+x-5,y(0)=2','x')
sol=
2*x^3+1/2*x^2-5*x+2
sol=dsolve('D2y=5*cos(x)-2*sin(x)','y(0)=3','Dy(0)=4','x')
sol =
-5*cos(x)+2*sin(x)+8+2*x
CAPTULO VII
7 TPICOS ESPECIAIS
ESTATSTICA
Estatstica Descritiva
Anlise Grfica
Declarao Significado
boxplot boxplot da anlise exploratria
normplot anlise de normalidade
hist histograma
histfit histograma ajustado a normal
bar grfico de barras
barh grfico de colunas
scatter grfico disperso dos dados
plot grfico de linha
pareto grfico de pareto ou curva ABC
pie, pie3 grfico em setores (pizza)
area grfico de rea
Exemplos
30
x1=normrnd(10,2,50,1); 25
x2=normrnd(15,4,50,1);
x3=normrnd(20,5,50,1); 20
Values
x=[x1 x2 x3];
boxplot(x) 15
10
5
1 2 3
Column Number
2) Gerar uma amostra normal de tamanho 100, de mdia zero e desvio padro 1,
construir o histograma e determinar: o valor mximo, o valor mnimo e a soma total.
x=normrnd(0,1,100,1); 20
hist(x) 18
maximo_x=max(x) 16
minimo_x=min(x) 14
soma_x=sum(x) 12
10
8
RESULTADOS
6
maximo = 2.9199 4
minimo = -2.7532 2
soma = -2.2903 0
-3 -2 -1 0 1 2 3
3) Gerar uma amostra normal com 100 elementos, de mdia 70 e desvio padro 10 e
analisar a normalidade atravs do comando normplot
0.75
Probability
x=normrnd(70,100,100,1); 0.50
normplot(x) 0.25
0.10
0.05
0.02
0.01
0.003
-200 -150 -100 -50 0 50 100 150 200
Data
4) Dados x = [ 1 2 3 4 5 6 7 8 9 10] e y = [ 8 2 6 0 1 3 6 8 3 5]
a) Representar o diagrama de disperso para x e y plot(x,y,'o')
x=[1 2 3 4 5 6 7 8 9 10]
y=[8 2 6 0 1 3 6 8 3 5]
plot(x,y,'o')
6) Gerar uma amostra aleatria Normal de tamanho 100, de mdia 0 e desvio padro
1, construindo o histograma ajustado a curva normal.
20
18
16
v=normrnd(0,1,100,1);
14
histfit(v)
12
10
0
-3 -2 -1 0 1 2 3
7) Gerar uma amostra Normal com mdia 0 e desvio padro 1, com o tamanho n da
amostra, sendo informado via teclado.
n = input('Entre com o tamanho da amostra, n ==> ');
amostra = normrnd(0,1,n,1)
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 53
function y=fdp_normal(x)
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
function distr_normal_integral
Area_1S=quad('fdp_normal',-1,1)*100;
Area_2S=quad('fdp_normal',-2,2)*100;
Area_3S=quad('fdp_normal',-3,3)*100;
Area_4S=quad('fdp_normal',-4,4)*100;
disp(' ')
disp([' MAIS ou MENOS 1 SIGMA = 'num2str(Area_1S) '%'])
disp(' ')
disp([' MAIS ou MENOS 2 SIGMA = 'num2str(Area_2S) '%'])
disp(' ')
disp([' MAIS ou MENOS 3 SIGMA = 'num2str(Area_3S) '%'])
disp(' ')
disp([' MAIS ou MENOS 4 SIGMA = 'num2str(Area_4S) '%'])
disp(' ')
pause
x=-4:0.01:4;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'b.')
grid
title('DISTRIBUIO NORMAL UNIVARIADA')
xlabel('eixo X')
ylabel('eixo Y')
%gtext('<------------- 99,99% ---------------->')
pause
hold on
x=-3:0.01:3;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'r.')
%gtext('<--------- 99,73% --------->')
pause
hold on
x=-2:0.01:2;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'g.')
%gtext('<------ 95,44% ------>')
pause
hold on
x=-1:0.01:1;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
plot(x,y,'y.')
%gtext('<-- 68,27% -->')
legend('+ ou - 4 sigma','+ ou - 3 sigma','+ ou - 2 sigma','+ ou - 1 sigma')
pause
x=-2:0.01:2;
y=(1/sqrt(2*pi)*exp(-0.5*(x.^2)));
area(x,y)
pause
close
>> distr_normal_integral
MAIS ou MENOS 1 SIGMA = 68.2691%
MAIS ou MENOS 2 SIGMA = 95.4499%
MAIS ou MENOS 3 SIGMA = 99.733%
MAIS ou MENOS 4 SIGMA = 99.9938%
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 54
function normal
x=-3:0.01:3;
y=normpdf(x,0,1);
plot(x,y)
xlabel ('Eixo x')
ylabel ('Eixo y')
title ('DISTRIBUIO NORMAL')
grid %grade
pause
close
format bank
sigma1=(normcdf(1,0,1)-normcdf(-1,0,1))*100;
sigma2=(normcdf(2,0,1)-normcdf(-2,0,1))*100;
sigma3=(normcdf(3,0,1)-normcdf(-3,0,1))*100;
sigma4=(normcdf(4,0,1)-normcdf(-4,0,1))*100;
disp(' ')
disp('PERCENTUAIS DA DISTRIBUIO NORMAL ')
disp(' ')
disp([' MAIS ou MENOS 1 SIGMA = 'num2str(sigma1) '%'])
disp(' ')
disp([' MAIS ou MENOS 2 SIGMA = 'num2str(sigma2) '%'])
disp(' ')
disp([' MAIS ou MENOS 3 SIGMA = 'num2str(sigma3) '%'])
disp(' ')
disp([' MAIS ou MENOS 4 SIGMA = 'num2str(sigma4) '%'])
Resultados:
PERCENTUAIS DA DISTRIBUIO NORMAL
MAIS ou MENOS 1 SIGMA = 68.2689%
MAIS ou MENOS 2 SIGMA = 95.45%
MAIS ou MENOS 3 SIGMA = 99.73%
MAIS ou MENOS 4 SIGMA = 99.9937%
A seguir tem-se alguns exemplos de regresso linear simples atravs do mtodo dos
mnimos quadrados.
function reglinear(X,Y)
% DETERMINAO DA FUNO DE REGRESSO LINEAR E DO COEFICIENTE DE CORRELAO e R2
m_est=(mean(X.*Y)-mean(X)*mean(Y))/(mean(X.^2)-(mean(X).^2));
q_est=mean(Y)-m_est*mean(X);
a=(mean(X.*Y)- mean(X)* mean(Y)).^2;
b=(mean(X.^2)-(mean(X)).^2)*((mean(Y.^2)-(mean(Y)).^2));
RSQUARE=sqrt(a/b)*100;
RSQUARE2=(a/b)*100;
disp(' ')
disp(' -------------------------------------------------------------------')
disp('| MODELO DE REGRESSO LINEAR SIMPLES: MTODO DOS MNIMOS QUADRADOS |')
disp(' -------------------------------------------------------------------')
disp(' -----------------------------------------------------------')
disp(['|FUNO DE REGRESSO ESTIMADA:Y ='num2str(q_est),' + 'num2str(m_est),'*X |']);
disp( ' -----------------------------------------------------------')
disp( ' -----------------------------------------------------')
disp([' | COEFICIENTE DE CORRELAO LINEAR: ' num2str(RSQUARE),' % |']);
disp( ' -----------------------------------------------------')
disp(' ')
disp( ' ------------------')
disp([' | R2 = ' num2str(RSQUARE2),' % |']);
disp( ' ------------------')
disp(' ')
Notas:
1) O MATLAB, possui uma funo que determina a soluo para o modelo de
regresso linear mltiplo a funo regress. A sintaxe mais simples desta funo
regress(y,x, alpha)
MATEMTICA FINANCEIRA
elseif k==2
%CALCULO DA PRESTAO PELO SISTEMA PRICE
clear % limpa as variveis (lixos)
clc % limpa a tela
aviso={'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERODO:'};
titulo='MONTANTE - JUROS COMPOSTOS';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
pmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n-1);
disp(' -------------')
disp(' | PRESTAO |')
disp(' -------------')
disp(' ')
disp(pmt)
% CLCULO DA TABELA DE AMORTIZAO, PERODO A PERODO - PRICE
SaldoDevedor=pv;
pause(1)
disp(' ---------------------------------------------------------------- ')
disp(' |PERIODO| |JURO| |AMORTIZAO| |SALDO_DEVEDOR| |GASTO| ')
disp(' ---------------------------------------------------------------- ')
pause
clc % limpa a tela
matfin
elseif k==3
%CALCULO DO MONTANTE EM UMA SRIE DE PAGAMENTOS UNIFORMES
clear % limpa as variveis (lixos)
clc % limpa a tela
aviso = {'ENTRE COM A PRESTAO:','ENTRE COM A TAXA:','ENTRE COM O PERODO:'};
titulo = 'MONTANTE - JUROS COMPOSTOS';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pmt=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
fv=pmt*((1+i/100)^n-1)/(i/100);
disp(' ----------')
disp(' |MONTANTE|')
disp(' ----------')
disp(' ')
disp(fv)
clc % limpa a tela
matfin
else
% sair do programa
disp(' ')
disp(' ---------------------------')
disp(' |OBRIGADO POR USAR: matfin ')
disp(' ---------------------------')
disp(' ')
clc % limpa a tela
end
if K==1
clear
clc
% SISTEMA PRICE (FRANCS) DE AMORTIZAO
% PRICIPAL CARACTERSTICA: PRESTAO CONSTANTE
% BASTANTE UTILIZADO NAS COMPRAS COM POUCAS PRESTAES
% CALCULO DA PRESTAO PELO SISTEMA PRICE
disp(' ')
aviso={'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERODO:'};
titulo='SISTEMA PRICE - PRESTAO CONSTANTE';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
pmt=pv*(i/100*(1+ i/100)^n)/((1+i/100)^n -1);
disp(' -----------------------------------------------------------------------')
disp(' |VALOR EMPRESTADO | N.0 DE PRESTAO | TAXA DE JUROS | VALOR PRESTAO|')
disp(' -----------------------------------------------------------------------')
sai=[pv n i pmt];
disp(sprintf('%13.2f %15.0f %17.2f %17.2f\n',sai'))
% CLCULO DA TABELA DE AMORTIZAO PERODO A PERODO - PRICE
SaldoDevedor=pv;
%pause(1)
disp(' -----------------------------------------------------------------')
disp(' |PERIODO|PRESTAO| JUROS |AMORTIZAO|SALDO_DEVEDOR|TOTAL GASTO|')
disp(' -----------------------------------------------------------------')
prest=0;
ju=0;
amt=0;
pause(1) %prest=prest+pmt;
ju=ju+Juro;
amt=amt+Amort;
end
disp(' ----------------------------------------------')
disp(' |TOTAL PAGO | JUROS PAGOS | AMORTIZAO TOTAL|')
disp(' ----------------------------------------------')
total=[gasto ju amt];
disp(sprintf('%12.2f %12.2f %15.2f\n',total'))
pause
clc % limpa a tela
sisamo
elseif K==2
clear
clc
% SISTEMA DE AMORTIZAO CONSTANTE
% PRICIPAL CARACTERSTICA: AMORTIZAO CONSTANTE
% CALCULO DO VALOR DA AMORTIZAO
aviso = {'ENTRE COM O CAPITAL:','ENTRE COM A TAXA:','ENTRE COM O PERODO:'};
titulo = 'SAC - AMORTIZAO CONSTANTE';
linhas=1;
resposta=inputdlg(aviso,titulo,linhas);
pv=str2num(char(resposta(1)));
i=str2num(char(resposta(2)));
n=str2num(char(resposta(3)));
format bank
Amort=pv/n;
disp(' -------------------------------------------------------------------')
disp(' |VALOR EMPRESTADO | N.0 DE PRESTAO | TAXA DE JUROS | AMORTIZAO|')
disp(' -------------------------------------------------------------------')
sai=[pv n i Amort];
disp(sprintf('%12.2f %15.0f %17.2f %17.2f\n',sai'))
% CLCULO DA TABELA DE AMORTIZAO PERODO A PERODO - SAC
SaldoDevedor=pv;
% pause(1)
disp(' ------------------------------------------------------------------')
disp(' |PERIODO|AMORTIZAO| JUROS |PRESTAO|SALDO_DEVEDOR|TOTAL GASTO|')
disp(' ------------------------------------------------------------------')
gasto=0;
amt=0;
ju=0;
disp(' ----------------------------------------------')
disp(' |AMORTIZAO TOTAL | JUROS PAGOS |TOTAL PAGO |')
disp(' ----------------------------------------------')
total=[amt ju gasto];
disp(sprintf('%15.2f %15.2f %15.2f\n',total'))
pause
clc % limpa a tela
sisamo
elseif K==3
clc
clear
% SISTEMA DE AMORTIZAO AMERICANA - SAA
% PRICIPAL CARACTERSTICA: A CADA PERODO PAGA-SE APENAS O JUROS,
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 61
p=n;
Juros=pv*(i/100); % juros de cada periodo
pmt=Juros+pv; % valor da amortizao do perodo
Amort=pv;
SaldoDevedor=SaldoDevedor-Amort; % atualizao do saldo devedor
gasto=Juros*p+ pv;
resposta=[p Juro pmt Amort SaldoDevedor gasto];
disp(sprintf('%8.0f %9.2f %10.2f %9.2f %11.2f %13.2f\n',resposta'))
ju=Juros*n;
amt=pv;
disp(' --------------------------------------------')
disp(' |JUROS PAGOS |TOTAL PAGO |AMORTIZAO TOTAL|')
disp(' --------------------------------------------')
total=[ju gasto amt];
disp(sprintf('%12.2f %12.2f %13.2f\n',total'))
pause
clc % limpa a tela
sisamo
else
% sair do programa
disp(' ')
disp(' ----------------------------')
disp(' |OBRIGADO POR USAR: sisamo |')
disp(' ----------------------------')
disp(' ')
clc % limpa a tela
end
PROGRAMAO LINEAR
Resoluo:
Sejam:
x1 = quantidade de peas A a ser produzida por ms.
x2 = quantidade de peas B a ser produzida por ms.
Assim, temos
11x1 + 9x2 9.900
7x1 + 12x2 8.400
6x1 + 6x2 9.600
Observaes:
1) possvel encontrar graficamente os valores x1, x2 que satisfazem as equaes
acima.
Considere as retas
1) 11x1 + 9x2 9.900: Intereseco com os eixos coordenados (900;0) e (0, 1100)
2) 7x1 + 12x2 8.400: Intereseco com os eixos coordenados (1200;0) e (0; 700)
3) 6x1 + 6x2 9.600: Intereseco com os eixos coordenados (1600;0) e (0; 1600)
x11=[900 0];
x12=[0 1100];
x21=[1200 0];
x22=[0 700]; 1600
11x1+9x2=9900
x31=[1600 0]; 1400 7x1+12x2=8400
6x1+6x2=9600
x32=[0 1600];
1200
plot(x11,x12,x21,x22,x31,x32)
legend('11x1+9x2=9900','7x1+12 1000
x2=8400','6x1+6x2=9600')
800
hold on
c=[-9 -10]; 600
x=minimo(1); 0
0 200 400 600 800 1000 1200 1400 1600
y=minimo(2);
plot(x,y,'ko')
text(x+20,y+20,'ponto timo')
c=[-9 -10];
A=[11 9; 7 12; 6 6];
b=[9900; 8400; 9600];
minimo=lp(c,A,b)
minimo =
626.0870
334.7826 Portanto, essas so as quantidades a serem produzidas
Exemplo 02:
(Covest-PE) Eric necessita de complementos das vitaminas A e C. Diariamente precisa
de pelo menos 63 unidades de A e no mnimo 55 unidades de C. Ele pode escolher
entre os compostos I e II, que apresentam, por cpsula, as caractersticas abaixo:
Resoluo:
Primeira etapa: O equacionamento:
Min cx
Ax b
sujeito a
x 0
Assim, tem-se que adaptar o sistema anterior, ficando o mesmo da seguinte forma:
Min 0,70x1 + 0,50x 2
- 7x1 4x 2 63
S . a 4 x1 5x 2 55
x e x 0
1 2
Implementao MATLAB
A=[-7 -4;-4 -5] resp=lp(c,A,b)
A = resp =
-7 -4 5.0000
-4 -5 7.0000
b=[-63 55] custo=c*resp
b = custo =
-63 -55 7.0000
c=[0.70 0.50] % Portanto, o custo mnimo dirio
c = ser de R$ 7,00
0.7000 0.5000
Exerccio 01: Elaborar um aplicativo, usando a funo lp, de forma que torne mais fcil
a utilizao dessa funo por parte do usurio final. Dica: Construa uma interface com
o usurio, sendo solicitado do mesmo: a matriz A e os vetores c e b
A=[1 2; 3 2];
b=[80; 120]; 20
minimo=lp(c,A,b)
10
x=minimo(1);
y=minimo(2);
0
plot(x,y,'ro') 0 10 20 30 40 50 60 70 80
text(x+1,y+1,'ponto timo')
minimo =
20.0000
30.0000
Sintaxe: qp(A,b,C,d)
Exemplo
Min 2x2 - 5x + 6
s.a: x 10
qp(A,b,C,d)
a=qp(2,-5,1,10)
a=2.5000
Nota:
O MATLAB possui um toolbox para a rea de otimizao (help optim), assim consulte
a ajuda online ou a apostila do prprio MATLAB, apostila em ingls, no formato pdf e
inclusa no CD de instalao do mesmo.
PROF. Msc. JOS DONIZETTI DE LIMA
ELEMENTOS BSICOS DE PROGRAMAO EM MATLAB 66
1 2 5 6
1) Dadas as matrizes: A = e B= , calcule:
4 3 7 8
Obs.: Usando a janela de comandos (Command Window) do MATLAB
a) A+B h) det(B)
b) A'+B' i) det(A*B)
c) A-B j) inv(A)
d) A*B k) inv(B)
e) A.*B l) inv(A)*A
f) 2*A+B' m) inv(B)*B
g) det(A)
2 x + 3 y + z = 2 23 7
b) x y + z = 3 SPD S= ( , ,3)
x y + 2z = 0 5 5
5) Resolva as equaes:
a) x2 + 4 = 0 b) x2 - 9x + 16 = 0 c) x2 - 4x + 4 = 0
6) Em uma sala de aula esto 8 pessoas, reunidas em uma mesa circular. Cada uma
escolhe um nmero aleatrio e pega o seu nmero e soma com os nmeros das
pessoas ao lado, a sua direita e esquerda. Passa-se as 8 somas para voc, que
estava fora da sala. Como voc faz para descobrir o nmero que cada um
escolheu?
Resoluo:
[a b c d e f g h]=solve('a+b+c=6','b+c+d=9','c+d+e=12','d+e+f=15',...
'e+f+g=18','f+g+h=21','g+h+a=16','h+a+b=11')
a = e =
1 5
b = f =
2 6
c = g =
3 7
d = h =
4 8
Nmeros complexos
1) Dado o nmero complexo Z= 3 + 4i, determinar:
a) A parte real do nmero Z c) O mdulo de Z
b) A parte imaginria de Z d) O ngulo de Z (em graus)
Polinmios
1) Determinar as razes do polinmio x4 10x3 +35x2-50x +24
p=[1 -10 35 -50 24];
raizes=roots(p)
raizes =
4
3
2
1
Construo de Grficos
1) Construa o grficos das seguintes funes (com titulo ao grfico, nomes a seus
eixos e linhas de grade)
a) f(x) = x3 no intervalo [-5;5]
b) f(x) = ex no intervalo [-10;10]
c) f(x) = cos(x) no intervalo [-2, 2]
d) y = sen (x) no intervalo 0 x 4.
1/(x-0.9)^2+0.04)-6;
fzero('humps',[-0.5 0]) 20
ans =
-0.1316 0
fzero('humps',[1 1.5])
-20
ans = -2 -1.5 -1 -0.5 0 0.5 1 1.5 2
1.2995
3) Construir o grfico das funes: sen (x), sen (2x), sen (3x), sen(4x), sen (x/2) e sen
(x/3), no intervalo [0, 4] usando o comando subplot.
x2 4
10) Plotar o grfico cuja equao dada por: f ( x) = ( x 2) , no intervalo [-2, 6].
x2
X1=-2:0.1:(2-10*eps); 8
x2=(2+10*eps):0.1:6; 6
y1=(x1.^2-4)./(x1-2); 5
y2=(x2.^2-4)./(x2-2); 4
plot(x1,y1,'g',x2,y2,'g') 2
pause 1
close -2 -1 0 1 2 3 4 5 6
1
11) Plotar o grfico cuja equao : y = , no intervalo [-5, 5].
x
y1=1./x1; 8
y2=1./x2; 4
plot(x1,y1,'b',x2,y2,'b') 2
grid -4
xlabel('x') -6
ylabel('y = 1 / x ') -8
1
12) Plotar o grfico cuja equao : y = , no intervalo [-5, 5].
x 1
x1=-5:0.1:(1-10*eps); % eps=2,22x10-16
y1=1./(x1-1); gr fico da fun o: 1/(x-1))
10
x2=(1+10*eps):0.1:5; % eps=2,22x10-16 8
y2=1./(x2-1); 6
plot(x1,y1,'b',x2,y2,'b') 4
grid 0
xlabel('x') -2
hold on -8
1) Criar uma matriz do tipo 3x3 tal que cada elemento aij = i + j, usando um duplo FOR
n=3;
m=3;
for i=1:m
for j=1:n
A(i,j)=i+j;
end;
end
disp('Matriz A')
disp(A)
2) Usando dois comandos for criar uma matriz do tipo 4x3 com todos elementos iguais
a 10.
for m=1:4
for n=1:3
A(m,n)=10;
end
end
disp(A)
3
4) Construir um programa que determina o grfico da funo tg(x) para x
2 2
Function graf_tangente
% grfico da funo tangente(x) x = [-pi/2 3*pi/2]
x11=(-pi/2+eps):0.01:(pi/2-eps);
x12=(pi/2+eps):0.01:(3*pi/2-eps);
x=[x11';x12']; % excluir os valores onde a funo indefinida
y=tan(x);
plot(x,y,'r')
xlabel('x (radianos)')
ylabel('y = tangente(x) ')
title('grfico da funo tangente ')
grid
axis([-pi/2 3*pi/2 -5 5])
hold on
plot([-5 5],[0 0])% cria o eixo das abscissas
hold on
plot([0 0],[-5 5]) % cria o eixo das ordenadas
pause
close
7) Elabore um programa que calcula a soma dos quadrados dos n primeiros nmeros
naturais no nulos.
function soma=soma_quad(n)
Soma=0;
For i=1:n
soma=soma+i*i;
end
8) Elaborar uma funo que determina o maior nmero fatorial calculado pelo MATLAB
function max_fatorial
% Determinar o maior nmero fatorial calculado pelo MATLAB
n=1;
while prod(1:n) < realmax
n=n+1;
end
disp(' ')
disp(n-1)
10) Escrever um programa para gerar uma matriz identidade de ordem n, solicitando do
usurio a ordem da mesma.
Dica: Use os comandos: input, for e if
11) Gerar uma matriz triangular inferior, cujos elementos diagonais so iguais a 5 e os
demais iguais a10.
12) Escrever um programa para gerar uma matriz diagonal, cujos elementos diagonais
so os nmeros inteiros positivos nessa ordem.
13) Em uma sala de aula esto 8 pessoas, reunidas em uma mesa circular. Cada uma
escolhe um nmero aleatrio e pega o seu nmero e soma com os nmeros das
pessoas ao lado, a sua direita e esquerda. Passa-se as 8 somas para voc, que
estava fora da sala. Como voc faz para descobrir o nmero que cada um
escolheu? Elaborar um aplicativo que solicite do usurio as 8 somas e determina os
nmeros escolhidos.
a + b + c = A Os valores A, B, ..., H so recebidos do usurio
b + c + d = B atravs da sintaxe:
A = input ('Entre com o valor da primeira soma ==> ')
c + d + e = C ....
H = input ('Entre com o valor da oitava soma ==> ')
d + e + f = D
Assim, basta resolver o sistema: x = inv(A)*b
e + f + g = E
f + g +h = F
g + h + a = G
h + a + b = H
14) Gerar 1000 nmeros aleatrios com distribuio normal e verificar a distribuio
dos dados atravs da funo histfit
>> a=randn(10000,1);
>> histfit
15) Elabore um aplicativo que determine as razes e o vrtice de uma funo quadrtica
function zero_para
clear; clc
disp(' ENTRE COM OS COEFICIENTES: a, b e c')
disp (' ')
disp(' O COEFICIENTE "a" NO PODE SER ZERO')
disp (' ')
disp(' POIS UMA FUNO DO SEGUNDO GRAU')
disp (' ')
a=input(' ENTRE COM O COEFICIENTE, a = ');
disp(' ')
b=input(' ENTRE COM O COEFICIENTE, b = ');
disp(' ')
c=input(' ENTRE COM O COEFICIENTE, c = ');
disp(' ')
disp(' ----------------------------')
disp(' RAZES (ZEROS) DA PARBOLA ')
disp(' ----------------------------')
delta=b^2-4*a*c;
if delta >=0
x=(-b-sqrt(delta))/(2*a)
x=(-b+sqrt(delta))/(2*a)
else
i=sym ('i');
x=(-b-sqrt(-delta)*i)/(2*a)
x=(-b+sqrt(-delta)*i)/(2*a)
end
disp(' ')
disp(' ------------------------------------')
disp(' COORDENADAS DO VRTICE DA PARBOLA ')
disp(' ------------------------------------')
disp(' ')
xv=-b/(2*a)
yv=-(b^2-4*a*c)/(4*a)
REFERNCIAS BIBLIOGRFICAS
05 MATLAB for Windows Users Guide, version 5.2 Student, The Math Works Inc.,
1991.
08 OPTIMIZATION TOOLBOX: For use with MATLAB. User's Guide: version 5. Natick,
MA: The Math Works, Inc, 1997.
11 STATISTICS TOOLBOX: For use with MATLAB. User's Guide: version 2.1. Natick,
MA: The Math Works, Inc., 1998.
13 SYMBOLIC MATH TOOLBOX: User's Guide: version 2. Natick, MA: The Math
Works, Inc, 1997.
15 ZIONTS, Stanley Linear and Integer Programming. New Jersey, Prentice-Hall, inc.,
1974.
SADA
M1 =
1 2
3 4
M2 =
5 6
7 8
M3 =
9 10
M4=M1+M2
M4 =
6 8
10 12
M5=M1+M2
M6=M1-M2
M6 =
-4 -4
-4 -4
M7=5*M1
M7 =
5 10
15 20
M8=M1*M2
M8 =
19 22
43 50
M9=M3*M1
M9 =
39 58
M10=M1*M3
MATRIZ TRANSPOSTA
M11 =
1 3
2 4
M13 =
1 3
2 4
M12 =
9
10
M14 =
39
58
DETERMINANTE
det_M1 =
-2
A =
[ a, b]
[ c, d]
det_A =
a*d-b*c
A =
[ a, b, c]
[ d, e, f]
[ g, h, i]
det_A =
i*a*e-a*f*h-i*d*b+d*c*h+g*b*f-g*c*e
MATRIZ INVERSAS
LEMBRE-SE:
EXISTE A MATRIZ INVERSA SE DETERMINANTE FOR DIFERENTE DE ZERO
M*M^(-1)=M^(-1)*M=I
inv_M1 =
-2.0000 1.0000
1.5000 -0.5000
VERIFICAO
I =
1.0000 0
0.0000 1.0000
I =
1.0000 0
0.0000 1.0000
EXEMPLO ==> x + y = 60 e x - y = 20
A =
1 1
1 -1
b =
60
20
x =
40
20
x =
40
y =
20
x =
-y+10
y =
z =
-y+8
X =
[ -y+10, y, -y+8]
[-y + 10 y -y + 8]
x =
[ empty sym ]
y =
[]
x^2-5*x+6=0
x =
[ 2]
[ 3]
a*x^2+b*x+c=0
x =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
[ 2 1/2]
[ -b + (b - 4 a c) ]
[1/2 --------------------]
[ a ]
[ ]
[ 2 1/2]
[ -b - (b - 4 a c) ]
[1/2 --------------------]
[ a ]