# %load http://che.byu.edu/imports.py
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from scipy.optimize import fsolve, curve_fit
from scipy.integrate import odeint, quad
from scipy.interpolate import interp1d
from scipy.misc import derivative
import scipy.constants as const
import sympy as sp
sp.init_printing()
from IPython.display import display
import glob
import time
#import pint; u = pint.UnitRegistry()
from __future__ import division
$f(x) = x^2$
def f(x) :
return x**2.0
$f(x,y) = x^2 + y^2$
def f(x,y=5) : # y has a default argument
return x**2.0 + y**2.0
If you call this as f(my_x), then it will assume y=5 in the function. If you call it with f(my_x, my_y), then it will use x=my_x and y=my_y in the function.
for i in range(3) : # range will start at 0, and do all but the last
print(i)
0 1 2
for i in range(3,6) :
print(i)
3 4 5
for i in range(5,2,-1) :
print(i)
5 4 3
for i in range(100) :
if i < 3 : continue
print(i)
if i == 5 : break # note, you can put this on one line
3 4 5
x = np.array([1.1, 2.2, 3.3]) # 1-D array
xx = np.array([[11, 12, 13],[21,22,23],[31,32,33]])
print("x=\n", x, '\n')
print("xx=\n", xx, '\n')
x[0] = 1.5 # indexing starts at 0
xx[1,2] = 18 # xx[row,column]
c0 = xx[:,0] # 0th column
c1 = xx[:,1] # 1st column
x[1:] # elements 1 to the end
x[:2] # elements 0, 1 (2 skipped)
x[-1] # last element
x[-2] # next to last element (note, this line gets output)
x= [ 1.1 2.2 3.3] xx= [[11 12 13] [21 22 23] [31 32 33]]
x = np.linspace(1.1, 5.5, 50) # (start, stop, n_points), stop is included
x = np.logspace(0,3,10) # 10^0 to 10^3 with 10 points
np.shape(x) # rows, columns returned
np.size(xx,1) # num elems on axis 1, or total numb: np.size(xx)
np.dot(x,y) # dot product
x=np.linalg.solve(A,b) # solve linear system: Ax=b
y=x.copy() # make a SEPARATE copy of y, unlike x=y
xx.T
xx.transpose()
np.sort(x)
np.diag(xx) # or np.diag(xx,1), np.diag(xx,-1), etc. for off-diags
np.vstack([x,x]).T # takes x's (rows) stack 'em vert, then .T to cols
np.hstack # stack horizontally (less useful for 1-D arrays
np. sin, cos, exp, sqrt(), etc.
np.pi
x1 = np.linspace(0,6,40)
y1 = np.exp(-x1)*np.sin(4*x1)
x2 = np.linspace(0,6,10)
y2 = 0.2*np.sqrt(x2)
plt.plot(x1,y1,'-' ,label='y1') # linestyles: -- -. : etc; colors = kbrgcm; k=black
plt.plot(x2,y2,'g^-',label='y2') # g^- is color,symbol,line: symbols: .s^v*dpx+<>h
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
<matplotlib.text.Text at 0x1152c18d0>
x = x1.copy()
plt.subplot(2,2,1) # (2,2,1) = 2x2 matrix of plots, and activate plot 1 (L-R, T-B)
plt.plot(x,y1)
plt.subplot(2,2,2)
plt.plot(x,np.sqrt(x))
plt.subplot(2,2,3)
plt.plot(x,np.cos(x))
plt.subplot(2,2,4)
plt.plot(x,1/(x+1))
[<matplotlib.lines.Line2D at 0x1155107f0>]
np.savetxt("fileName", matrix) # optional args: header, comments, format, etc.
data = np.loadtxt(fileName) # optional args...
ifile = open("fileName.yaml", 'r')
yfile = yaml.load(ifile)
ifile.close()
someVar = yfile["someVar"] # yaml line looks like: someVar: 8314.46 # J/kmol*K
# OR
subVar = yfile["someVar"]["subVar]
ifile = open("fileName", 'r')
single_line = ifile.readline()
list_of_all_lines = ifile.readlines()
for line in list_of_all_lines :
# process line:
words = line.split()
ifile.close()
ofile = open("fileName", 'w')
ofile.write("# x, y")
for i in range(np.size(x)) :
ofile.write(x[i], y[i])
# or better yet:
# ofile.write("%12.5e %12.5e" %(x[i], y[i]))
ofile.close()
pi = 3.14159265358979323846264338
Na = 6.0221409e+26 # #/kmol
atm = 101.325 # kPa
kB = 1.3806485279E-23 # J/K
Rg = 8314 # J/kmol*K
f"some text, value of var inserted here: {var}"
{var}
inserts the value of variable var{var}
in a single string.{var:w.pt}
:
w
is the width the variable should take (optional).p
is the precision (optional)t
is the type (optional)e
for scientific 6.02E23f
for floating point number 3.14d
for integer 101s
for stringprint( f"Na = {Na:20.7e} #/kmol" )
print( f"atm = {atm:20.3f} kPa" )
print( f"Rg = {Rg:20d} J/kmol*K" )
Na = 6.0221409e+26 #/kmol atm = 101.325 kPa Rg = 8314 J/kmol*K
class units:
def __init__(self) : # this gets called when we create an object of the class
self.m_to_ft = 3.28084
self.hr_to_s = 3600
self.mi_to_ft = 5280
self.K_to_R = 9.0/5.0
def F_to_C(self, Tf) : # ignore the self argument when calling: my_units.F_to_C(T)
Tc = (Tf-32) / self.K_to_R
return Tc
#--------------------
my_units = units()
Tf = 212.0
Tc = my_units.F_to_C(Tf)
print("%g F = %g C" %(Tf, Tc))
212 F = 100 C
x = fsolve(func, x_guess)
x = fsolve(func, x_guess)
where $f[0] = g$, $f[1] = h$; and $x[0] = y$, $x[1] = z$.
x = fsolve(func, x_guess)
p = np.polyfit(x_data, y_data, polynomialOrder) # e.g. order = 2 for ax^2 + bx + c
y_eval = np.polyval(p, x_eval)
$f(x) = a\exp(-bx)+c.$
f(x,a,b,c)
params, extras = cuve_fit(f, x_given, y_given)
a=params[0]; b=params[1]; c=params[2]
Normally, we have a system of coupled ODEs, like: \begin{align} \frac{dT}{dt} &= g(T,Z,t)\\ \frac{dZ}{dt} &= h(T,Z,t). \end{align} Write this in vector form: $$\frac{d\vec{y}}{dt} = \vec{f}(\vec{y},t),$$ where, $y[0] = T$, $y[1]=Z$; and $f[0] = g$, $f[1]=h$.
y = odeint(f, y0, times)
T=y[:,0]; Z=y[:,1]
x, y, z = sp.symbols('x, y, z') # declare x, y, z to be symbols
my_ex = x*sp.cos(y) # store an expression as variable my_ex
my_ex.subs(x,z**2) # substituion: --> z**2*cos(y)
my_ex.evalf(subs={y:1,z:2}) # numeric evaluation
my_ex = x**2/x
sp.simplify(my_ex) # --> x
sp.expand((x+2)*(x-3)) # --> x^2-x-y
sp.factor(x**3 - x**2 + x - 1) # --> (x-1)(x^2+1)
etc.
sp.diff(sp.cos(x),x) # --> -sin(x)
sp.diff(x**4,x,x,x) # d^3(x^4)/dx^3 --> 24x
my_exp = sp.exp(x*y*z)
my_der = sp.Derivative(my_exp,x,y,z) # d^3(e^xyz)/dxdydz: makes the expr, not eval it
my_der.doit() # now eval it --> (x^2y^2z^2 + 3xyz +1)e^xyz
sp.integrate(x**2,x) # --> x^3/3
sp.integrate(sp.exp(-x), (x,0,oo)) # --> 1; infinity is "oo" (double o's)
sp.integrate(sp.exp(-x**2-y**2), (x,-oo,oo), (y,-oo,oo)) # double integral --> pi
my_ex = sp.Integral(log(x)**2,x) # makes the expr, doesn't eval it
my_ex.doit() # now eval it
sp.solve(x**2-1, x) # --> [-1, 1]
my_ex = sp.Eq(x**2, 1) # Eq(x**2,1) --> x**2 = 1; use for equality
sp.solve(my_ex, x) # --> [-1, 1]
sp.solve([x-y+2, x+y-3], [x,y]) # --> x = 1/2, y = 5/2 (symbolic, not numeric)
f, g = sp.symbols('f, g', cls=Function) # define function symbols
f(x).diff(x) # --> df(x)/dx
Setup and solve this equation: $$f^{\prime\prime}(x)-2f^{\prime}(x)+f(x) = sin(x).$$
my_diffeq = sp.Eq( f(x).diff(x,x) - 2*f(x).diff(x) + f(x), sin(x) )
sp.dsolve(my_diffeq, f(x)) # --> f(x) = (C_1 + C_2x)e^x + cos(x)/2
A = sp.Matrix([1,-1],[3,4],[0,2]]) # 3x2 matrix
b = sp.Matrix([1,2]) # assumes a column vector
A.shape # --> (3,2)
A.row(1) # --> [3,4]
A.row_del(0) # --> deletez row [1, -1]
x = A**-1 * b # --> x = [-1,1]^T; solve for x
# fill A, b with symbolic vars, then do:
A.inv()*b # --> symbolic x in terms of A, b elements
(Its called markdown instead of markup because its easy!)
*This will be italic (there is no space after the star)*
**This will be bold text (again no space)**
* This is a bullet: type a star, then space, then type
* This one will be indented
* So is this with a "*" style bullet
* Another bullet point
1. This is an item
2. This is an item
1. This is a sub item (will become "A")
2. Another sub (will become "B")
3. Item
[Link to Google](http://www.google.com)
<br>
, end with blank line.This is a blockquote:
This is a block quote
And here is a new line
for i in range(25) :
print(i)
<font color="red">This is red</font>
<img src="pic.png">
(https://xkcd.com/353/)| Code | Meaning |
|-----------------------------------------------------------|
| %s | string |
| %r | string (converts any python object) |
| %c | single character |
| %d | signed integer |
| %f | floating point decimal number |
| %e, %E | exponential notation (lowercase) |
| %g, %G | pretty output: like %e, %E, if exp > -4, else %f |
Code | |
---|---|
%s | string |
%r | string (converts any python object) |
%c | single character |
%d | signed integer |
%f | floating point decimal number |
%e, %E | exponential notation (lowercase) |
%g, %G | pretty output: like %e, %E, if exp > -4, else %f |
$'s.
Like this: $f(x)=x^2+3$
. This gives $f(x)=x^2.$$$f(x)=x^2+3.$$
$$f(x)=x^2+3.$$$'s
below)^
for superscript: T^2
$\rightarrow T^2$._
for subscript: T_0
$\rightarrow T_0$.T_{min}
$\rightarrow T_{min}$.sin(x)
$\rightarrow sin(x)$, but $s$, $i$, $n$ are treated as separate variables.\sin(x)
$\rightarrow \sin(x)$.\exp, \sin, \log
, etc.\sqrt{5+x}
$\rightarrow \sqrt{5+x}$.\int_a^bf(x)dx
$\rightarrow \int_a^bf(x)dx$.\frac{a+b}{c^2}
$\rightarrow \frac{a+b}{c^2}$.\lambda, \xi, \pi, \Lambda, \Xi, \Pi
$\rightarrow \lambda,\,\, \xi,\,\, \pi,\,\, \Lambda,\,\, \Xi,\,\, \Pi$.\frac{\partial f}{\partial x}
$\rightarrow \frac{\partial f}{\partial x}$.\left(
and \right)
or \left[
and \right]
, etc. $$f(x) = \left[\frac{(a+b)}{\sqrt{b}}\right].$$
$$
\left[\begin{array}{ccc}
a & b & c \\
d & e & f \\
g & h & i \end{array}
\right]
$$