Séries, limite, integração, derivação, equações diferenciais, inequações, Simplex

Routo Terada

Somatória e produtória

> soma:=Sum( (1+i)/(1+i^4), i=1..10 );

soma := Sum((1+i)/(1+i^4),i = 1 .. 10)

> soma:=sum( (1+i)/(1+i^4), i=1..10 );
# note: sum com s em minúsculo

soma := 51508056727594732913722/4062664893881920008...

> evalf( soma, 50 );

1.2678391664831167167711101279648625322974515722790...

> soma:=Sum( (1+i)/(1+i^4), i=1..N );
produto:=Product( (1+i)/(1+i^4), i=1..N );
plot({produto,soma},N=1..10,thickness=3,color=[red,blue]);

soma := Sum((1+i)/(1+i^4),i = 1 .. N)

produto := Product((1+i)/(1+i^4),i = 1 .. N)

[Maple Plot]

> produto:=Product( ((i^2+3*i+2)/(i+30)), i=1..10 );

produto := Product((i^2+3*i+2)/(i+30),i = 1 .. 10)

> value(produto);

14968800/4816253

> evalf( produto, 50 );

3.1079762628748946535823595645826745397303671547155...

> produto:=Product( ((i^2+3*i+2)/(i+30)), i=1..N);
soma:=Sum( ((i^2+3*i+2)/(i+30)), i=1..N);
plot({produto,soma},N=1..10,thickness=3,color=[red,blue]);

produto := Product((i^2+3*i+2)/(i+30),i = 1 .. N)

soma := Sum((i^2+3*i+2)/(i+30),i = 1 .. N)

[Maple Plot]

Integração e derivação

> restart;
F:=f(x)*g(x); diff(F,x);
# regra de derivação de produto

F := f(x)*g(x)

diff(f(x),x)*g(x)+f(x)*diff(g(x),x)

> F:=f(x)/g(x); diff(F,x);
# regra de derivação de divisão

F := f(x)/g(x)

diff(f(x),x)/g(x)-f(x)*diff(g(x),x)/(g(x)^2)

> F:=ln(1+x^2);

F := ln(1+x^2)

> plot(F,x=-1..1,thickness=3);

[Maple Plot]

> Integr:=Int(F,x=-1.5..1);
# note: Int com I em maiúsculo

Integr := Int(ln(1+x^2),x = -1.5 .. 1)

> Integr:=int(F,x); IntegrDef:=evalf(int(F,x=-1..1));
# integral definida de -1 a 1

Integr := x*ln(1+x^2)-2*x+2*arctan(x)

IntegrDef := .527887015

> plot({F,Integr,IntegrDef},x=-1..1,thickness=4,color=[green,blue,red]);

[Maple Plot]

> Deriv:=diff(F,x); # derivação

Deriv := 2*x/(1+x^2)

> plot({F,Deriv},x=-1..1,thickness=3,color=[blue,red]);

[Maple Plot]

> Deriv2:=diff(F,x,x); # derivada segunda de F

Deriv2 := 2*1/(1+x^2)-4*x^2/((1+x^2)^2)

> plot({F,Deriv,Deriv2},x=-1..1,thickness=3,color=[blue,red,green]);

[Maple Plot]

> restart;f := x -> x*sin(a*x) + b*x^2;

f := proc (x) options operator, arrow; x*sin(a*x)+b...

> value(Diff( f(x), x ) );
deriv:=diff( f(x), x );

sin(a*x)+x*cos(a*x)*a+2*b*x

deriv := sin(a*x)+x*cos(a*x)*a+2*b*x

> f_linha := value(deriv);

>

f_linha := sin(a*x)+x*cos(a*x)*a+2*b*x

> integral:=int(f_linha, x);

integral := -cos(a*x)/a+(cos(a*x)+a*x*sin(a*x))/a+b...

> simplify(integral);

>

x*(sin(a*x)+b*x)

> Int( f_linha, x=1..2 );
integral:=int( f_linha, x=1..2 );

Int(sin(a*x)+x*cos(a*x)*a+2*b*x,x = 1 .. 2)

integral := 2*sin(2*a)+3*b-sin(a)

> value(integral);

>

2*sin(2*a)+3*b-sin(a)

> Int( 1/sqrt( 1 + x^4 ) , x=0..1 );

> integral:=int( 1/sqrt( 1 + x^4 ) , x=0..1 );

Int(1/(sqrt(1+x^4)),x = 0 .. 1)

integral := 1/2*EllipticK(1/2*sqrt(2))

> value(integral); # integral elíptica

>

1/2*EllipticK(1/2*sqrt(2))

> evalf(integral);

>

.9270373385

Integral Dupla

> F:=ln(1+x^2)*y^3+ln(y^2+3);
Fint:=Int(F,x);

F := ln(x^2+1)*y^3+ln(y^2+3)

Fint := Int(ln(x^2+1)*y^3+ln(y^2+3),x)

> FintDup:=Int(Fint,y);

FintDup := Int(Int(ln(x^2+1)*y^3+ln(y^2+3),x),y)

> Fint:=int( F , x);

Fint := y^3*x*ln(x^2+1)-2*y^3*x+2*y^3*arctan(x)+ln(...

> FintDup:=int( Fint , y );

FintDup := 1/4*y^4*x*ln(x^2+1)-1/2*y^4*x+1/2*y^4*ar...

> plot3d({F,Fint},x=-10..10,y=0..10,thickness=3,shading=ZHUE,axes=boxed);
plot3d({Fint,FintDup},x=-10..10,y=0..10,thickness=3,shading=ZHUE,axes=boxed);

[Maple Plot]

[Maple Plot]

> Fint:=int( F , x=0..1 ); # integral definida

Fint := -2*y^3+y^3*ln(2)+ln(y^2+3)+1/2*y^3*Pi

>

> FintDup:=int( Fint , y=0..1 ); evalf(FintDup);

FintDup := 1/3*sqrt(3)*Pi+9/4*ln(2)+1/8*Pi-5/2

1.266079603

Limite de expressões

> expr := (2*x+3)/(7*x+5);

expr := (2*x+3)/(7*x+5)

> limite:=Limit( expr, x=infinity );

limite := Limit((2*x+3)/(7*x+5),x = infinity)

> value(limite);

>

2/7

> limite:=Limit( tan(x+Pi/2), x=0, left );value(limite);
# limite da esquerda

>

limite := Limit(-cot(x),x = 0,left)

infinity

> limite:=Limit( tan(x+Pi/2), x=0, right );value(limite);
# limite da direita

>

limite := Limit(-cot(x),x = 0,right)

-infinity

> limite:=Limit( abs(x-4)/(x-4) , x=4, right ); # contendo abs

limite := Limit(abs(x-4)/(x-4),x = 4,right)

> value(limite);

>

1

> l:=limit( sqrt(1-cos(x)) / x*sqrt(2), x=0 ); # lim indefinido
lesq:=limit( sqrt(1-cos(x)) / x*sqrt(2), x=0, left ); # lim da esquerda

l := undefined

lesq := -1

>

>

>

>

Integração e derivação de funções definidas por partes


> p := x -> piecewise( x<0, -1, x>1, 2*x, x^2 );

p := proc (x) options operator, arrow; piecewise(x ...

> p(x);

PIECEWISE([-1, x < 0],[2*x, 1 < x],[x^2, otherwise]...

> p_linha := diff( p(x), x );

p_linha := PIECEWISE([0, x < 0],[undefined, x = 0],...

> expr := piecewise( x<=-1, -x, x<=1, x*x, x>1, sin(x-1)/(x-1) );

expr := PIECEWISE([-x, x <= -1],[x^2, x <= 1],[sin(...

> anti := int( expr, x ); # integral
valor :=evalf(1/6+Si(5.66-1));
#OBS:Si(x) é a Função Integral Seno, Si(x)=int(sin(t)/t, t=0..x)

anti := PIECEWISE([-1/2*x^2, x <= -1],[1/3*x^3-1/6,...

valor := 1.786213839

Série e expansão em série

> expr := sin(4*x)*cos(x):
approx1 := series( expr, x=0 );

approx1 := series(4*x-38/3*x^3+421/30*x^5+O(x^6),x,...

> poly1 := convert( approx1, polynom ); # tranformar p/ polinômio

poly1 := 4*x-38/3*x^3+421/30*x^5

> plot( [expr, poly1], x=-1..1, title = `Aproxim. p/ Series` ); # p/ comparar original com a aproximação, em gráfico

[Maple Plot]

> Order := 13; # muda a ORDEM de aproximação

Order := 13

> approx2 := series( expr, x=0 );

approx2 := series(4*x-38/3*x^3+421/30*x^5-10039/126...

> poly2 := convert( approx2, polynom );plot( [expr, poly2], x=-1..1,`Aproxim. p/ Series` );

poly2 := 4*x-38/3*x^3+421/30*x^5-10039/1260*x^7+246...

[Maple Plot]

> poly2fs := 4*x-38/3*x^3+421/30*x^5-10039/1260*x^7+246601/90720*x^9-6125659/9979200*x^11;

poly2fs := 4*x-38/3*x^3+421/30*x^5-10039/1260*x^7+2...

>

>

Equações diferenciais

Definir uma equação:
eq:=t^2*diff(x(t),t$2)-t*diff(x(t),t)+x(t)=0;
Note t$2 para indicar derivada segunda.

eq := t^2*diff(x(t),`$`(t,2))-t*diff(x(t),t)+x(t) =...

> sol:=dsolve(eq,x(t));

dsolve() para resolver.

sol := x(t) = _C1*t+_C2*t*ln(t)

Para verificar a solução acima, usar subs():
simplify(subs(sol,lhs(eq))); # lhs indica Left Hand Side

0

> eq2:=t^2*diff(x(t),t$2)-2*t*diff(x(t),t)+4*x(t)=11;

eq2 := t^2*diff(x(t),`$`(t,2))-2*t*diff(x(t),t)+4*x...

> sol2:=dsolve(eq2,x(t));

sol2 := x(t) = 11/4+_C1*t^(3/2)*cos(1/2*sqrt(7)*ln(...

> simplify(sol2);

x(t) = 11/4+_C1*t^(3/2)*cos(1/2*sqrt(7)*ln(t))+_C2*...

Para verificar a solução acima, usar subs():
simplify(subs(sol2,lhs(eq2)));

11

Equação diferencial com condição inicial:
eq3:=diff(x(t),t)+3*t*x(t)=0;

eq3 := diff(x(t),t)+3*t*x(t) = 0

> dsolve( {eq3, x(0)=1}, x(t));

x(t) = exp(-3/2*t^2)

Condição inicial para a derivada é indicada com D() :
eq4:=diff(x(t),t$2)-2*x(t)=0;

eq4 := diff(x(t),`$`(t,2))-2*x(t) = 0

> dsolve( {eq4, x(0)=1,D(x)(0)=0}, x(t));

x(t) = 1/2*exp(sqrt(2)*t)+1/2*exp(-sqrt(2)*t)

> dsolve( {eq4, x(0)=1,D(x)(0)=1}, x(t));

x(t) = (1/2+1/4*sqrt(2))*exp(sqrt(2)*t)+(1/2-1/4*sq...

Equação com condição inicial para a segunda derivada :
eq5:=diff(x(t),t$2)-cos(t)=0;

eq5 := diff(x(t),`$`(t,2))-cos(t) = 0

>
dsolve( {eq5, x(0)=1,(D@@2)(x)(0)=1}, x(t));
Notação D@@2
dsolve( {eq5, x(0)=1,D(D(x))(0)=1}, x(t)); Notação D(D(x))

x(t) = -cos(t)+_C1*t+2

x(t) = -cos(t)+_C1*t+2

Sistema de equações diferenciais lineares.
eq6a:=diff(x(t),t)-2*x(t)+5*y(t)=0;
eq6b:=diff(y(t),t)-x(t)+2*y(t)=0;

eq6a := diff(x(t),t)-2*x(t)+5*y(t) = 0

eq6b := diff(y(t),t)-x(t)+2*y(t) = 0

> inic1:=x(0)=0; inic2:=y(0)=1;

inic1 := x(0) = 0

inic2 := y(0) = 1

> dsolve({eq6a,eq6b,inic1,inic2},{x(t),y(t)});

{y(t) = cos(t)-2*sin(t), x(t) = -5*sin(t)}

Solução numérica de sistema de equações diferenciais (Equações de Lorenz)

> eqa:=diff(x(t),t)-3*(y(t)-x(t))=0;
eqb:=diff(y(t),t)-30*x(t)+y(t)+x(t)*z(t)=0;
eqc:=diff(z(t),t)-x(t)*y(t)+z(t)=0;

eqa := diff(x(t),t)-3*y(t)+3*x(t) = 0

eqb := diff(y(t),t)-30*x(t)+y(t)+x(t)*z(t) = 0

eqc := diff(z(t),t)-x(t)*y(t)+z(t) = 0

> inic1:=x(0)=0; inic2:=y(0)=1;inic3:=z(0)=0;

inic1 := x(0) = 0

inic2 := y(0) = 1

inic3 := z(0) = 0

>

> sol:=dsolve({eqa,eqb,eqc,inic1,inic2,inic3},{x(t),y(t),z(t)},numeric):
# Note a opção numeric

> s2:=sol(2);

s2 := [t = 2, y(t) = -2.67172641677660082, z(t) = 1...

> with(plots): odeplot(sol,[x(t),y(t),z(t)],0..25,numpoints=1000,axes=boxed);

Warning, the name changecoords has been redefined

[Maple Plot]

Equação diferencial não-linear: (Cauchy-Euler)

> eqNL:=diff(x(t),t$2)+0.1*diff(x(t),t)+sin(x(t))=0.02*cos(t);

eqNL := diff(x(t),`$`(t,2))+.1*diff(x(t),t)+sin(x(t...

Primeiro convertemos esta equação para um sistema de equações de primeira ordem:

> eqa:=diff(x(t),t)=y(t);
eqb:=diff(y(t),t)=-0.1*y(t)-sin(x(t))+0.02*cos(t);

eqa := diff(x(t),t) = y(t)

eqb := diff(y(t),t) = -.1*y(t)-sin(x(t))+.2e-1*cos(...

> inic1:=x(0)=0;inic2:=y(0)=1;

inic1 := x(0) = 0

inic2 := y(0) = 1

Agora a solução do sistema equivalente à equação não-linear:

> sol:=dsolve({eqa,eqb,inic1,inic2},{x(t),y(t)},numeric):
# sol() é uma função de t

> s2:=sol(2); # solução numérica no ponto t=2

s2 := [t = 2, y(t) = -.300776933331209584, x(t) = ....

A seguir um gráfico da solução no espaço de fases:

> with(plots): odeplot(sol,[x(t),y(t)],0..25,numpoints=1000,axes=boxed);

[Maple Plot]



Para obter solução em forma de série infinita
:
eq7:=diff(x(t),t$2)-t*x(t)=0;

eq7 := diff(x(t),`$`(t,2))-t*x(t) = 0

> Order:=12;dsolve(eq7, x(t), series); # default é Order=8

Order := 12

x(t) = series(x(0)+D(x)(0)*t+1/6*x(0)*t^3+1/12*D(x)...

Com condições iniciais:

> dsolve( {eq7, x(0)=1, D(x)(0)=2}, x(t), series);

x(t) = series(1+2*t+1/6*t^3+1/6*t^4+1/180*t^6+1/252...

Equações diferenciais parciais (pdsolve())

>
restart;with(PDEtools):
eq:=(1+x^2)*diff(u(x,y),x)-y^2*diff(u(x,y),y)=0;

eq := (1+x^2)*diff(u(x,y),x)-y^2*diff(u(x,y),y) = 0...

> sol:=pdsolve(eq,u(x,y));
_F1 na solução a seguir é uma função arbitrária dos seus argumentos.

sol := u(x,y) = _F1(-(y*arctan(x)-1)/y)

Para verificar a solução acima, usar subs():
simplify(subs(sol,lhs(eq)));

0

>
eq2:=diff(u(x,t),t$2)-diff(u(x,t),x$2)=0;

eq2 := diff(u(x,t),`$`(t,2))-diff(u(x,t),`$`(x,2)) ...

> sol2:=pdsolve(eq2,u(x,t));

sol2 := u(x,t) = _F1(t+x)+_F2(t-x)

Para verificar a solução acima, usar subs():
simplify(subs(sol2,lhs(eq2)));

0

>

>

Solução de equações e inequaçõe s

Solução de equações

> eqn := x^3-1/2*a*x^2+13/3*x^2 = 13/6*a*x+10/3*x-5/3*a;

eqn := x^3-1/2*a*x^2+13/3*x^2 = 13/6*a*x+10/3*x-5/3...

> solve( eqn, {x} );

{x = 2/3}, {x = -5}, {x = 1/2*a}

Sistema de equações a seguir é linear

> eqn1 := a+2*b+3*c+4*d+5*e=41;
eqn2 := 5*a+5*b+4*c+3*d+2*e=20;
eqn3 := 3*b+4*c-8*d+2*e=125;
eqn4 := a+b+c+d+e=9;
eqn5 := 8*a+4*c+3*d+2*e=11;

eqn1 := a+2*b+3*c+4*d+5*e = 41

eqn2 := 5*a+5*b+4*c+3*d+2*e = 20

eqn3 := 3*b+4*c-8*d+2*e = 125

eqn4 := a+b+c+d+e = 9

eqn5 := 8*a+4*c+3*d+2*e = 11

> solve( {eqn1, eqn2, eqn3, eqn4, eqn5}, {a, b, c, d, e} );

{c = -1, e = 16, d = -11, a = 2, b = 3}

Sustema a seguir não é linear

> eqn1 := a^2+2*b+3*c+4*d+5*e=41;
eqn2 := 5*a^2+5*b+4*c+3*d+2*e=20;
eqn3 := 3*b^2+4*c-8*d+2*e=125;
eqn4 := a+b+c+d+e=9;
eqn5 := 8*a+4*c+3*d+2*e=11;

eqn1 := a^2+2*b+3*c+4*d+5*e = 41

eqn2 := 5*a^2+5*b+4*c+3*d+2*e = 20

eqn3 := 3*b^2+4*c-8*d+2*e = 125

eqn4 := a+b+c+d+e = 9

eqn5 := 8*a+4*c+3*d+2*e = 11

> solve( {eqn1, eqn2, eqn3, eqn4, eqn5}, {a, b, c, d, e} );

{b = 47/20, a = 1/2, d = -40573/4400, c = 17253/880...

> fsolve( {eqn1, eqn2, eqn3, eqn4, eqn5}, {a, b, c, d, e} );
# fsolve() para ponto flutuante

{a = .5000000000, b = 2.350000000, c = 1.960568182,...

> solve( arccos(x) = arctan(x), {x} ); # trigonométrica

{x = 1/2*sqrt(-2+2*sqrt(5))/(sqrt((1/2*sqrt(5)-1/2)...

> eqn:=abs( (z+abs(z+2))^2-1 )^2 = 9; # exemplo contendo abs

eqn := abs((z+abs(z+2))^2-1)^2 = 9

> solve( eqn, {z});

{z = 0}, {z <= -2}

Solução de inequações

> solve( {x^2<1, y^2<=1, x+y<1/2}, {x,y} );

{x+y < 1/2, -1 < x, x < 1, -1 <= y, y <= 1}

> ineq := x+y+4/(x+y) < 10:solve( ineq, {x} );

{x < -y}, {x < 5+sqrt(21)-y, 5-sqrt(21)-y < x}

> expr := 2*sqrt(-1-I)*sqrt(-1+I); # exemplo contendo complexo (I é unidade imaginária)

expr := 2*sqrt(-1-I)*sqrt(-1+I)

> is( expr <> 0 );

true

>

Método SIMPLEX de otimização

> restart;

> with(simplex): # carrega package SIMPLEX de otimização

Warning, the protected names maximize and minimize have been redefined and unprotected

> restrics:={14*x+y<=6,0<=x}; # restrições
obj:=y; # função OBJETIVO
pontomax:=maximize(obj,restrics);

restrics := {14*x+y <= 6, 0 <= x}

obj := y

pontomax := {x = 0, y = 6}

> plot({-14*x+6,6},x=-1..1,thickness=3);

[Maple Plot]

> restrics:={15*x+y<=6,x+21*y<=4};

restrics := {15*x+y <= 6, x+21*y <= 4}

> obj:=3*x+4*y;

obj := 3*x+4*y

> pontomax:=maximize(obj,restrics);
evalf(pontomax);
maximo:=eval(3*.3885+4*.1719);

pontomax := {y = 27/157, x = 61/157}

{y = .1719745223, x = .3885350318}

maximo := 1.8531

> plot3d({15*x+y-6,x+21*y-4,3*x+4*y},y=7/157..47/157, x=40/157..80/157,axes=boxed,thickness=3,
orientation=[-140,80],shading=ZHUE);

[Maple Plot]

> plot3d({15*x+y-6,x+21*y-4,3*x+4*y},y=0.05..0.3, x=0.3..0.5,axes=boxed,
orientation=[120,70],shading=ZHUE,thickness=3);

[Maple Plot]

> plot3d({3*x+4*y,1.85},x=0.3..0.4, y=0.05..0.45,axes=boxed,
shading=ZHUE,thickness=3);

[Maple Plot]

Exemplo de minimização

> restrics := {14*x+3*y-3*z>=6,
3*x+8*z>=2,5*y-2*z<=1,
x<=2,2<=y,1<=z};
obj:=x+2*y+3*z;
pontomin:=minimize(obj,restrics);

restrics := {6 <= 14*x+3*y-3*z, 2 <= 3*x+8*z, 5*y-2...

obj := x+2*y+3*z

pontomin := {z = 9/2, y = 2, x = 27/28}

> evalf(pontomin);

{z = 4.500000000, y = 2., x = .9642857143}

> evalf(27/28+2*2+3*9/2);

18.46428571

FINANCE package

> restart;with(finance);

[amortization, annuity, blackscholes, cashflows, ef...
[amortization, annuity, blackscholes, cashflows, ef...

Exercício 1:

Vamos supor que começando daqui a 30 dias, pelo testamento da Tia Maria, V vai receber $1 mil por mês durante 2 anos! Como V necessita hoje de uma quantia alta de uma só vez, V quer vender esta herança. Ou seja, V quer saber quanto isto valeria hoje, se a taxa de juros permanecer estável em p % ao ano. Ou seja, qual seria o valor presente do seu asset .

Primeiro calculamos a taxa mensal equivalente a p %.

> # Vamos supor p= 0.07
taxames:=fsolve((1+x)^12=1+0.07, x, 0..0.01);

taxames := .5654145387e-2

Note que o intervalo 0..0.01 é fornecido para selecionar a raiz correta

Agora aplicamos a função annuity()

> annuity(1000,taxames,24);

22383.80070

que é o valor presente desejado.

***********************************************************************

Exercício 2 - Black e Scholes

Uma outra surpresa da Tia Maria: ela lhe deixou uma opção de comprar 1 mil ações da empresa BigBluff por $80 cada, daqui a 6 meses! O valor atual destas ações é $101. Por quanto V poderia vender estas opções hoje? Para obter uma resposta V necessita conhecer uma certa medida estocástica de volatilidade destas ações. A sua corretora lhe diz que a tal medida é 0.28, baseada em dados históricos. Mais ainda, V conhece o modelo de Black e Scholes:

> evalf(blackscholes(101,80,0.07,6/12,0.28));

24.45807854

Este é o preço por ação da opção que V agradece muito à Tia Maria.

***********************************************************************

Exercício 3

Vamos supor que há um empréstimo de $1 mil com juro de 10 % por mês a ser amortizado com $500 ao final de cada mês. Os cálculos são feitos abaixo, e a tabela a seguir mostra os resultados.

> A:= amortization( 1000, 500, 0.10 );

A := [[0, 0, 0, -1000, 1000], [1, 500, 100.00, 400....
A := [[0, 0, 0, -1000, 1000], [1, 500, 100.00, 400....

Serão necessários 3 pagamentos: $500, $500, e $176. O custo do empréstimo é portanto $176.00.

> Tabela_Amort[n, Pagamento, Taxa-juro, Principal, Saldo] = matrix(A[1]);

Tabela_Amort[n,Pagamento,Taxa-juro,Principal,Saldo]...

A primeira coluna mostra o número do pagamento.

A segunda coluna mostra o pagamento mensal.

A terceira coluna mostra a alíquota do pagamento que contribui para pagar a parte dos juros.

A quarta coluna mostra o quanto do pagamento paga a parte principal.

A última coluna mostra o saldo em aberto.

***********************************************************************

Exercício 4

Vamos supor que desejamos calcular o valor presente de receitas variáveis, $200 daqui a 1 mês, $150 e $100 ao fim do mês 2 e 3, respectivamente.

A taxa de desconto é 3.8% por mês.

> cashflows( [200, 150, 100], 0.038 );

421.3110972

Genericamente, se a taxa de desconto for r %, o valor presente das receitas é dada pela função cashflows:

> cashflows( [200, 150, 100], r );

200*1/(1+r)+150/((1+r)^2)+100/((1+r)^3)

Geração de BlackScholes em C

> ### WARNING: persistent store makes one-argument readlib obsolete
restart;readlib(C):with(finance); # carregar as libraries

Error, could not find `C` in the library

[amortization, annuity, blackscholes, cashflows, ef...
[amortization, annuity, blackscholes, cashflows, ef...

> interface(verboseproc=3); # Isto é para ligar a opção "verbose"

> procgerado:=eval(blackscholes); # Isto é para armazenar o proc numa var.

procgerado := proc (Amount, Exercise, Rate, Nperiod...

> ### WARNING: calls to `C` for generating C code should be replaced by codegen[C]
C(procgerado); # Isto é para gerar em linguagem C
# a função procgerado() == blackscholes()

C(procgerado)

AVISO sobre erf(x)


erf(x) = 2/sqrt(Pi) * int(exp(-t^2), t=0..x)

A função blackscholes() na forma algébrica

> procgerado:=eval(blackscholes(A,E,R,N,Sd,H));

procgerado := A*(1/2*erf(1/2*(ln(A/E)+(R+1/2*Sd^2)*...

>

> ### WARNING: calls to `C` for generating C code should be replaced by codegen[C]
C(procgerado);

C(A*(1/2*erf(1/2*(ln(A/E)+(R+1/2*Sd^2)*N)*sqrt(2)/(...

annuity()

Geração em C da função annuity() pode ser feita também da mesma forma

> procgerado:=eval(annuity);

procgerado := proc (Cash, Rate, Nperiods) option `C...
procgerado := proc (Cash, Rate, Nperiods) option `C...

> ### WARNING: calls to `C` for generating C code should be replaced by codegen[C]
C(procgerado);

C(procgerado)

futurevalue()

> procgerado:=eval(futurevalue);

procgerado := proc (Amount, Rate, Nperiods) option ...

> ### WARNING: calls to `C` for generating C code should be replaced by codegen[C]
C(procgerado);

C(procgerado)

presentvalue ()

> fgerado:=eval(presentvalue(quantia,taxa,nperiodos));
# internamente este proc chama futurevalue()

fgerado := quantia/((1+taxa)^nperiodos)

> ### WARNING: calls to `C` for generating C code should be replaced by codegen[C]
C(fgerado);

C(quantia/((1+taxa)^nperiodos))

system() - system call em ms-windows

Para executar um comando de sistema, utilizar system();

> system(`dir/p`); # isto abre uma janela para mostrar o diretório

0

Da mesma forma system(`progr.exe`) provoca a execução do programa chamado progr em outra janela.