SharedSECITEC-2019-PARTE-02.ipynbOpen in CoCalc
Author: João Marcello Pereira
Views : 23
License: MIT License
Description: SECITEC - 2019 - IFC LUZERNA - PARTE II

SECITEC - 2019 - PARTE II

PROGRAMAÇÃO BÁSICA

A estrutura de programação do CoCalc é baseada em Python, com algumas diferenças quanto à sintaxe de alguns comandos.

ESTRUTURA DE DECISÃO

Condicional "SE" (IF)

In [1]:
%display latex
In [2]:
randrange(1,60)
27
In [2]:
# números aleatorios x e y x=randrange(0,10) y=randrange(0,10) x , y
(0,6)\left(0, 6\right)
In [3]:
# se x < y será impresso a mensagem, se x > y não será feito nada if x < y: print("x é menor que y")
x é menor que y
In [4]:
if x < y: show("x menor que y .","Valor de x: ", x," Valor de y: ", y) else: show("x maior que y .","Valor de x: ", x," Valor de y: ", y)
xxmenorxquexyx.Valorxdexx:0xValorxdexy:6\verb|x|\phantom{\verb!x!}\verb|menor|\phantom{\verb!x!}\verb|que|\phantom{\verb!x!}\verb|y|\phantom{\verb!x!}\verb|.| \verb|Valor|\phantom{\verb!x!}\verb|de|\phantom{\verb!x!}\verb|x:| 0 \phantom{\verb!x!}\verb|Valor|\phantom{\verb!x!}\verb|de|\phantom{\verb!x!}\verb|y:| 6
In [5]:
if x < y: show("x menor que y .","Valor de x: ", x," Valor de y: ", y) elif x > y: show("x maior que y .","Valor de x: ", x," Valor de y: ", y) else: show("x igual a y .","Valor de x: ", x," Valor de y: ", y)
xxmenorxquexyx.Valorxdexx:0xValorxdexy:6\verb|x|\phantom{\verb!x!}\verb|menor|\phantom{\verb!x!}\verb|que|\phantom{\verb!x!}\verb|y|\phantom{\verb!x!}\verb|.| \verb|Valor|\phantom{\verb!x!}\verb|de|\phantom{\verb!x!}\verb|x:| 0 \phantom{\verb!x!}\verb|Valor|\phantom{\verb!x!}\verb|de|\phantom{\verb!x!}\verb|y:| 6

Definindo funções do tipo: f(x) = {cos(x);x01e1/x2;x < 0.\begin{cases} \cos(x) &; x \geq 0\\ 1 - e^{-1/x^2} &; \text{x < 0}. \end{cases}

In [6]:
x = random() print(x) if x >= 0: show("f = cos(x) = ", cos(x)) elif x < 0: show("f = exp(-1/x^2) = ", exp(-1/x^2))
0.61412618519
fx=xcos(x)x=0.8172772899134825\verb|f|\phantom{\verb!x!}\verb|=|\phantom{\verb!x!}\verb|cos(x)|\phantom{\verb!x!}\verb|=| 0.8172772899134825

Condicional "TROCAR" (SWITCH)

In [7]:
x = randrange(-10,10) y = n(sin(x)) if y == 0: show("Raiz: ",x) elif y > 0: show("Valor positivo: ", y,". valor de x: ", x) elif y < 0: show("Valor negativo: ", y,". valor de x: ", x)
Valorxnegativo:0.958924274663138.xvalorxdexx:5\verb|Valor|\phantom{\verb!x!}\verb|negativo:| -0.958924274663138 \verb|.|\phantom{\verb!x!}\verb|valor|\phantom{\verb!x!}\verb|de|\phantom{\verb!x!}\verb|x:| 5

ESTRURA DE REPETIÇÃO

Repetição "PARA" (FOR)

In [8]:
show("Valor de sin(x)*cos(x/2)+x:") for x in [1, 2, 3, 4, 5]: show(n(sin(x)*cos(x/2)+x) , '. Para x = ', x)
Valorxdexsin(x)*cos(x/2)+x:\verb|Valor|\phantom{\verb!x!}\verb|de|\phantom{\verb!x!}\verb|sin(x)*cos(x/2)+x:|
1.73846026260413.xParaxxx=11.73846026260413 \verb|.|\phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 1
2.49129549643388.xParaxxx=22.49129549643388 \verb|.|\phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 2
3.00998243446948.xParaxxx=33.00998243446948 \verb|.|\phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 3
4.31494096431338.xParaxxx=44.31494096431338 \verb|.|\phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 4
5.76823606043935.xParaxxx=55.76823606043935 \verb|.|\phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 5
In [9]:
show("Valor de sin(x)*cos(x/2)+x:") vetor = range(1, 5) for x in vetor: show( n(sin(x)*cos(x/2)+x)," Para x = ", x)
Valorxdexsin(x)*cos(x/2)+x:\verb|Valor|\phantom{\verb!x!}\verb|de|\phantom{\verb!x!}\verb|sin(x)*cos(x/2)+x:|
1.73846026260413xParaxxx=11.73846026260413 \phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 1
2.49129549643388xParaxxx=22.49129549643388 \phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 2
3.00998243446948xParaxxx=33.00998243446948 \phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 3
4.31494096431338xParaxxx=44.31494096431338 \phantom{\verb!x!}\verb|Para|\phantom{\verb!x!}\verb|x|\phantom{\verb!x!}\verb|=| 4
In [10]:
%%time # Método bruto de encontrar raízes de uma função sem otimização x = srange(0, 5, 0.00001) for k in x: if abs(sin(k)*k + 1 ) < 0.0001: show("Valor(y):", sin(k)*k + 1 ," . Raiz(x): ", k) print('fim')
Valor(y):0.0000676888000875620x.xRaiz(x):3.43681000001405\verb|Valor(y):| 0.0000676888000875620 \phantom{\verb!x!}\verb|.|\phantom{\verb!x!}\verb|Raiz(x):| 3.43681000001405
Valor(y):0.0000318979772357952x.xRaiz(x):3.43682000001405\verb|Valor(y):| 0.0000318979772357952 \phantom{\verb!x!}\verb|.|\phantom{\verb!x!}\verb|Raiz(x):| 3.43682000001405
Valor(y):3.89293696634319×106x.xRaiz(x):3.43683000001405\verb|Valor(y):| -3.89293696634319 \times 10^{-6} \phantom{\verb!x!}\verb|.|\phantom{\verb!x!}\verb|Raiz(x):| 3.43683000001405
Valor(y):0.0000396839425147455x.xRaiz(x):3.43684000001405\verb|Valor(y):| -0.0000396839425147455 \phantom{\verb!x!}\verb|.|\phantom{\verb!x!}\verb|Raiz(x):| 3.43684000001405
Valor(y):0.0000754750394051928x.xRaiz(x):3.43685000001405\verb|Valor(y):| -0.0000754750394051928 \phantom{\verb!x!}\verb|.|\phantom{\verb!x!}\verb|Raiz(x):| 3.43685000001405
fim CPU times: user 6.38 s, sys: 63.5 ms, total: 6.44 s Wall time: 7.03 s

Repetição "ENQUANTO" (WHILE)

In [11]:
i = 0 while (i / 3 <= 4): print(i) i = i + 1
0 1 2 3 4 5 6 7 8 9 10 11 12

Repetição "FAÇA ATÉ QUE" (DO...UNTIL)

FUNÇÃO

Função, de acordo com a matemática, é uma correspondência unívoca entre dois conjuntos em que a cada elemento do primeiro conjunto corresponde a um e somente um elemento do segundo. Dessa forma, temos que uma função é uma relação entre das variáveis, sendo uma dependente e outra independente. Ex: y(x)=x+2,z=xy2x,f(x)=x2+y2y(x) = x + 2, z = xy - 2x, f(x) = x^2 + y^2.

Para definir uma nova função no CoCalc de duas maneiras:

  • forma reduzida - utilizada de forma semelhante a definição matemática de função.

  • def - use o comando def e dois pontos após a lista de nomes das variáveis. Em Python, blocos de código não são indicados por colchetes ou blocos de início e fim, como em outras linguagens. Em vez disso, blocos de código são indicados por tabulação, que devem estar alinhadas exatamente.

In [12]:
# Função área do circulo def areaC(raio): return pi*raio^2
In [13]:
areaC(5)
25π25 \, \pi
In [14]:
n(areaC(5))
78.539816339744878.5398163397448
In [15]:
# Função área do circulo simplificada areaCs(r) = pi*r^2
In [16]:
# Calculo da área para r = 5 areaCs(5)
25π25 \, \pi
In [17]:
# # Calculo da área para r = 5 numérico n(areaCs(5))
78.539816339744878.5398163397448

GRÁFICOS 2D E 3D

In [74]:
# resetar variáveis reset()
In [78]:
# dados x_dados = [0.0, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0] y_dados = [0.0, 0.5, 0.84, 1.0, 0.91, 0.6, 0.14, -0.35, -0.76, -0.98] len(x_dados) == len(y_dados)
True\mathrm{True}
In [79]:
# import pandas import pandas
In [80]:
# Criar data frame dados_data = pandas.DataFrame() dados_data['x'] = x_dados dados_data['y'] = y_dados dados_data
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy0xx0.000000000000000xxx0.0000000000000001xxx1.00000000000000xxx0.5000000000000002xxx1.50000000000000xxx0.8400000000000003xxx2.00000000000000xxxx1.000000000000004xxx2.50000000000000xxx0.9100000000000005xxx3.00000000000000xxx0.6000000000000006xxx3.50000000000000xxx0.1400000000000007xxx4.00000000000000xx-0.3500000000000008xxx4.50000000000000xx-0.7600000000000009xxx5.00000000000000xx-0.980000000000000\begin{array}{l} \phantom{\verb!xxxxxxxxxxxxxxxxxxx!}\verb|x|\phantom{\verb!xxxxxxxxxxxxxxxxxxx!}\verb|y|\\ \verb|0|\phantom{\verb!xx!}\verb|0.000000000000000|\phantom{\verb!xxx!}\verb|0.000000000000000|\\ \verb|1|\phantom{\verb!xxx!}\verb|1.00000000000000|\phantom{\verb!xxx!}\verb|0.500000000000000|\\ \verb|2|\phantom{\verb!xxx!}\verb|1.50000000000000|\phantom{\verb!xxx!}\verb|0.840000000000000|\\ \verb|3|\phantom{\verb!xxx!}\verb|2.00000000000000|\phantom{\verb!xxxx!}\verb|1.00000000000000|\\ \verb|4|\phantom{\verb!xxx!}\verb|2.50000000000000|\phantom{\verb!xxx!}\verb|0.910000000000000|\\ \verb|5|\phantom{\verb!xxx!}\verb|3.00000000000000|\phantom{\verb!xxx!}\verb|0.600000000000000|\\ \verb|6|\phantom{\verb!xxx!}\verb|3.50000000000000|\phantom{\verb!xxx!}\verb|0.140000000000000|\\ \verb|7|\phantom{\verb!xxx!}\verb|4.00000000000000|\phantom{\verb!xx!}\verb|-0.350000000000000|\\ \verb|8|\phantom{\verb!xxx!}\verb|4.50000000000000|\phantom{\verb!xx!}\verb|-0.760000000000000|\\ \verb|9|\phantom{\verb!xxx!}\verb|5.00000000000000|\phantom{\verb!xx!}\verb|-0.980000000000000| \end{array}
In [26]:
# listar somente a segunda linha do data frame dados_data.iloc[[2]]
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy2xx1.50000000000000xx0.840000000000000\begin{array}{l} \phantom{\verb!xxxxxxxxxxxxxxxxxx!}\verb|x|\phantom{\verb!xxxxxxxxxxxxxxxxxx!}\verb|y|\\ \verb|2|\phantom{\verb!xx!}\verb|1.50000000000000|\phantom{\verb!xx!}\verb|0.840000000000000| \end{array}
In [27]:
# listar somente o segundo elemento da coluna dados_data.x.iloc[[2]]
2xxxx1.50000000000000Name:xx,xdtype:xobject\begin{array}{l} \verb|2|\phantom{\verb!xxxx!}\verb|1.50000000000000|\\ \verb|Name:|\phantom{\verb!x!}\verb|x,|\phantom{\verb!x!}\verb|dtype:|\phantom{\verb!x!}\verb|object| \end{array}
In [28]:
# gráfico pontos discretos point(zip(dados_data.x,dados_data.y))
In [29]:
# gráfico espalhamento scatter_plot(zip(dados_data.x,dados_data.y))
In [30]:
# gráfico melhorado scatter_plot(zip(dados_data.x,dados_data.y), axes_labels = ['x','y'], gridlines = "minor", figsize = (5, 4))
In [31]:
# Funções y1(x) e y2(x) y1(x) = sin(x)*x y2(x) = cos(x)
In [32]:
# Gráfico funções y1 e y2 plot(y1, (x, -4, 4), legend_label = 'y(x)', axes_labels = ['x','y'], color = 'red', gridlines = 'minor', figsize = (5, 4))
In [33]:
# Gráfico funções y1 e y2 com preenchimento plot(y1, (x, -4, 4), legend_label = 'y(x)', axes_labels = ['x','y'], color = 'red', gridlines = 'minor', figsize = (5, 4), fill = 'axis')
In [34]:
# Gráfico funções y1 e y2 com pontos em destaque plot(y1, (x, -4, 4), legend_label = 'y1(x)', axes_labels = ['x','y'], color = 'red', gridlines = 'minor', figsize = (5, 4)) + points([(1, y1(1)) , (2.5, y1(2.5)) ], color = 'blue', size = 30)
In [35]:
# Gráfico 3d var('y') plot3d(cos(y^2 + x^2)*x^2 + sin(x^2) , (x, -2, 2), (y, -2, 2), color = 'green', mesh = True, aspect_ratio=1, spin=30)

SOLUÇÃO DE EQUAÇÕES

De acordo com o dicionario matemático disponível em "http://www.somatematica.com.br/dicionarioMatematico" temos que:

Equação: Expressão algébrica indicada por uma igualdade, onde há valores desconhecidos expressos por letras (incógnitas). Logo, todo conjunto de expressões no qual há uma igualdade cuja(s) incógita(s) satisfaçam a um conjunto limitado de soluções, então temos uma equação. Ex: x+2=0,xy2x=2,x2+y2=22x + 2 =0, xy - 2x = 2, x^2 + y^2 = 2^2.

In [36]:
# Função f(x) f(x) = x^2 - 2*x - 3
In [37]:
# gráfico da função f(x) plot(f, (x, -2, 4), axes_labels=['x','y'], color="red", gridlines = "minor", figsize = (4, 3))
In [38]:
# resolvendo equações sage_eval('x^2 - 2*x - 3', {'x': 2.8})
0.760000000000001-0.760000000000001
In [39]:
# resolvendo equações s1 = solve(x^2 - 2*x - 3, x) s1
[x=3,x=(1)]\left[x = 3, x = \left(-1\right)\right]
In [40]:
# somente a segunda raiz s1[1]
x=(1)x = \left(-1\right)
In [41]:
# Gráfico de x^2 - 3*x + cos(4*x) plot(x^2 - 3*x + cos(4*x), (x, -2, 4), axes_labels=['x','y'], color = "red", gridlines = "minor", figsize = (4, 3))
In [42]:
# raízes de x^2 - 3*x + cos(4*x) solve(x^2 - 3*x + cos(4*x), x)
[x=124cos(4x)+9+32,x=124cos(4x)+9+32]\left[x = -\frac{1}{2} \, \sqrt{-4 \, \cos\left(4 \, x\right) + 9} + \frac{3}{2}, x = \frac{1}{2} \, \sqrt{-4 \, \cos\left(4 \, x\right) + 9} + \frac{3}{2}\right]
In [43]:
# método numérico sol2 s2 = find_root(x^2 - 3*x + cos(4*x), 2, 3) s2
2.85534267812309842.8553426781230984
In [44]:
# mínimo local find_local_minimum(x^2 - 3*x + cos(4*x), 0, 3)
(2.796519407945447,0.8660347529766458)\left(-2.796519407945447, 0.8660347529766458\right)
In [45]:
# máximo local find_local_maximum(x^2 - 3*x + cos(4*x), 0, 3)
(1.244271751318072,1.5809132312220195)\left(-1.244271751318072, 1.5809132312220195\right)
In [46]:
reset()
In [47]:
# Sistemas de Equações Lineares eq1(x) = 2*x+3*y-6 eq2(x) = 3*x-4*y-12 var('y') eq1(x) = 2*x+3*y-6 eq2(x) = 3*x-4*y-12
In [48]:
# Gráfico implícito implicit_plot(eq1(x),(x,-10, 10),(y,-10, 10), axes_labels=['x','y']) + implicit_plot(eq2(x),(x,-10, 10),(y,-10, 10), gridlines = 'minor')
In [49]:
# Solução sol3 s3 = solve([eq1(x), eq2(x) ],[x , y]) s3
[[x=(6017),y=(617)]]\left[\left[x = \left(\frac{60}{17}\right), y = \left(-\frac{6}{17}\right)\right]\right]

Sistemas Equações Não Lineares

In [50]:
# definir eq3(x,y) e eq4(x,y) var('y') eq3(x,y) = y^2 + 8*x == 0 eq4(x,y) = -x^2 -8*y == 2
In [51]:
# Gráfico implícito implicit_plot(eq3(x, y),(x, -10, 10),(y, -10, 10), color = 'red', axes_labels=['x','y']) + implicit_plot(eq4(x, y),(x, -10, 10),(y, -10, 10), gridlines = 'minor')
In [52]:
# Solução sol4 sol4 = solve([eq3, eq4], [x, y]) sol4
[[x=(0.00781297686626381),y=(0.2500076305588621)],[x=(7.830640958832725),y=(7.914868105515588)],[x=(3.9192270642071337.072470694459699i),y=(4.082437617897199+6.929654639134567i)],[x=(3.919227064207133+7.072470694459699i),y=(4.0824376178971996.929654639134567i)]]\left[\left[x = \left(-0.00781297686626381\right), y = \left(-0.2500076305588621\right)\right], \left[x = \left(-7.830640958832725\right), y = \left(-7.914868105515588\right)\right], \left[x = \left(3.919227064207133 - 7.072470694459699i\right), y = \left(4.082437617897199 + 6.929654639134567i\right)\right], \left[x = \left(3.919227064207133 + 7.072470694459699i\right), y = \left(4.082437617897199 - 6.929654639134567i\right)\right]\right]
In [53]:
# Primeiro conjunto solução sol4[1]
[x=(7.830640958832725),y=(7.914868105515588)]\left[x = \left(-7.830640958832725\right), y = \left(-7.914868105515588\right)\right]
In [54]:
# solução de y do primeiro conjunto solução sol4[1][1]
y=(7.914868105515588)y = \left(-7.914868105515588\right)
In [55]:
# somente a parte numérica de y sol4[1][1].rhs()
7.914868105515588-7.914868105515588

INTERPOLAÇÃO

In [83]:
point(zip(dados_data.x, dados_data.y), axes_labels = ['x','y'], size = 30, gridlines = 'minor', figsize = (5, 4))
In [84]:
# Importar a função interp1d from scipy.interpolate import interp1d
In [85]:
# definir a função interpoladora fint fint = interp1d(dados_data.x, dados_data.y)
In [86]:
# testar a função fint(1.3)
0.7040000000000000.704000000000000
In [89]:
plot(fint, 0, 5, color = 'gray') + point(zip(dados_data.x, dados_data.y), gridlines = 'minor', axes_labels = ['x','y'], figsize = (4, 3))

AJUSTE DE CURVAS

In [91]:
# Importar CSV import csv
In [92]:
# Importar Pandas import pandas
In [93]:
# Definir variáveis a, b e c var('a, b')
(a,b)\left(a, b\right)
In [94]:
# importar tabela de dados dados_pontos = pandas.read_csv('dados_reta.csv')
In [95]:
# visualizar dados dados_pontos
xxxxxxxxxxxxxxxxy0xxx0.0x-0.1834401xxx0.2x-0.1311012xxx0.4xx0.0268883xxx0.8xx0.1105334xxx1.0xx0.2539455xxx1.2xx0.2571906xxx1.4xx0.5318897xxx1.6xx0.5790488xxx2.0xx0.9351819xxx2.2xx0.91660010xx2.6xx1.13328611xx2.8xx1.26893312xx3.0xx1.10202913xx3.4xx1.133916\begin{array}{l} \phantom{\verb!xxxxxx!}\verb|x|\phantom{\verb!xxxxxxxxx!}\verb|y|\\ \verb|0|\phantom{\verb!xxx!}\verb|0.0|\phantom{\verb!x!}\verb|-0.183440|\\ \verb|1|\phantom{\verb!xxx!}\verb|0.2|\phantom{\verb!x!}\verb|-0.131101|\\ \verb|2|\phantom{\verb!xxx!}\verb|0.4|\phantom{\verb!xx!}\verb|0.026888|\\ \verb|3|\phantom{\verb!xxx!}\verb|0.8|\phantom{\verb!xx!}\verb|0.110533|\\ \verb|4|\phantom{\verb!xxx!}\verb|1.0|\phantom{\verb!xx!}\verb|0.253945|\\ \verb|5|\phantom{\verb!xxx!}\verb|1.2|\phantom{\verb!xx!}\verb|0.257190|\\ \verb|6|\phantom{\verb!xxx!}\verb|1.4|\phantom{\verb!xx!}\verb|0.531889|\\ \verb|7|\phantom{\verb!xxx!}\verb|1.6|\phantom{\verb!xx!}\verb|0.579048|\\ \verb|8|\phantom{\verb!xxx!}\verb|2.0|\phantom{\verb!xx!}\verb|0.935181|\\ \verb|9|\phantom{\verb!xxx!}\verb|2.2|\phantom{\verb!xx!}\verb|0.916600|\\ \verb|10|\phantom{\verb!xx!}\verb|2.6|\phantom{\verb!xx!}\verb|1.133286|\\ \verb|11|\phantom{\verb!xx!}\verb|2.8|\phantom{\verb!xx!}\verb|1.268933|\\ \verb|12|\phantom{\verb!xx!}\verb|3.0|\phantom{\verb!xx!}\verb|1.102029|\\ \verb|13|\phantom{\verb!xx!}\verb|3.4|\phantom{\verb!xx!}\verb|1.133916| \end{array}
In [96]:
# Gráfico dados point(zip(dados_pontos.x, dados_pontos.y), axes_labels = ['x','y'], gridlines = 'minor', figsize=(5, 4))
In [97]:
# modelo reta 'ax+b' modelo_reta(x) = a*x + b modelo_reta
x  ax+bx \ {\mapsto}\ a x + b
In [98]:
# Fit linear find_fit(dados_pontos, modelo, [ai, bi], solution_dict = True) coef = find_fit(dados_pontos, modelo_reta,[0.5, 0.5], solution_dict = True) coef
{b:0.17573217304516242,a:0.45996226645180155}\left\{b : -0.17573217304516242, a : 0.45996226645180155\right\}
In [99]:
#imprimir coef 'a' coef[a]
0.459962266451801550.45996226645180155
In [100]:
# substituir coef no modelo reta modelo_reta(x) = modelo_reta.subs(coef) modelo_reta(x)
0.45996226645180155x0.175732173045162420.45996226645180155 \, x - 0.17573217304516242
In [102]:
# Gráfico point(zip(dados_pontos.x, dados_pontos.y), axes_labels = ['x','y'], gridlines = 'minor', figsize=(5, 4)) + plot(modelo_reta(x),(x, 0, 3.5), color = 'green', legend_label = "reta")