Sei sulla pagina 1di 8

Root Finding

Question R1.

The roots of the equation is obtained with the roots function, which returned an array of the
(possibly complex) roots.

from scipy import *


import numpy as np
from scipy.optimize import fsolve

def f(z):
y = z**4.0 + z + 1.0
return y

z0 = 1.0
z = fsolve(f, z0)

print("z = ", z)
print("f(z) = ", f(z))

# print very small values in arrays as 0


set_printoptions ( suppress = True )
# make the equation
p = poly1d ([1, 0, 0, 1, 1])
r = roots (p)
print("r = ",r) # note : complex roots

import numpy as np
import numpy.polynomial.polynomial as poly
c = np.array([1.0, 0.0, 0.0, 1.0, 1.0])
r = poly.polyroots(c)
print("Roots of the polynomial")
print(r)

runfile('C:/Users/sarah/Desktop/polynomial root.py', wdir='C:/Users/sarah/Desktop')


Roots of the polynomial
[-1.01891279-0.60256542j -1.01891279+0.60256542j 0.51891279-0.66660984j
0.51891279+0.66660984j]

z = [-0.62962079]
f(z) = [ 0.52752988]
[ 0.72713608+0.93409929j 0.72713608-0.93409929j -0.72713608+0.43001429j
-0.72713608-0.43001429j]
C:\Program Files\Anaconda3\lib\site-packages\scipy\optimize\minpack.py:161: RuntimeWarning:
The iteration is not making good progress, as measured by the
improvement from the last five Jacobian evaluations.
warnings.warn(msg, RuntimeWarning)
Linear Algebra
Question L2.

The Jacobi method is a matrix iterative method used to solve the equation Ax=b for a known square
matrix A of size nn and known vector b or length n. The algorithm for the Jacobi method is
relatively straightforward. We begin with the following matrix equation:
Ax=bAx=b
AA is split into the sum of two separate matrices, DD and RR, such
that A=D+RA=D+R. Dii=AiiDii=Aii, but Dij=0Dij=0, for ijij. RR is essentially the
opposite. Rii=0Rii=0, but Rij=AijRij=Aij for ijij. The solution to the equation, i.e. the value
of xx, is given by the following iterative equation:
x(k+1)=D1(bRx(k)).x(k+1)=D1(bRx(k)).
We will make use of the NumPy library to speed up the calculation of the Jacobi method. NumPy is
significantly more efficient than writing an implementation in pure Python. The iterative nature of
the Jacobi method means that any increases in speed within each iteration can have a large impact
on the overall calculation.

import numpy as np
from scipy.linalg import solve

def jacobi(A, b, x, n):

D = np.diag(A)
R = A - np.diagflat(D)

for i in range(n):
x = (b - np.dot(R,x))/ D
print(x)
return x

'''___Main___'''

A = np.array([[1, 10, 1, 0, 0, 0],


[2, 0, 20, 1, 0, 0],
[0, 3, 0, 0, 30, 3],
[10, 1, 0, 0, 0, -1],
[0, 0, 0, 2, -2, 20],
[0, 0, 1, 10, -1, 0]])

# initialize the RHS vector


b = np.array([[10],[10], [0], [5], [5], [0]])

x = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]


n = 25

x = jacobi(A, b, x, n)
print(solve(A, b))

[[ -1. -inf -inf nan 6. nan]


[ -1. -inf -inf nan 6. nan]
[-11. -inf -inf -inf 11. -inf]
[ -6. -inf -inf -inf 8.5 -inf]
[ -6. -inf -inf -inf 8.5 -inf]
[-11. -inf -inf -inf 11. -inf]]
[[ 31. nan nan nan 30.5 nan]
[ 238. nan nan nan 115.25 nan]
[ 216. nan nan nan 153. nan]
[ 5. nan nan nan 25. nan]
[ 237. nan nan nan 116. nan]
[ 65. nan nan nan 43.75 nan]]
[[-2586. nan nan nan 647.75 nan]
[-4377. nan nan nan 1568. nan]
[-8019. nan nan nan 1978.5 nan]
[ -478. nan nan nan 185.75 nan]
[-1305. nan nan nan 460. nan]
[ -29. nan nan nan 143.5 nan]]
[[ 51799. nan nan nan 8824.25 nan]
[ 166040. nan nan nan 20520.625 nan]
[ 52368. nan nan nan 9467.25 nan]
[ 30213. nan nan nan 3948.5 nan]
[ 1541. nan nan nan 1618.25 nan]
[ 11494. nan nan nan 1688. nan]]
[[-1712758. nan nan nan 107331.75
nan]
[-1181161. nan nan nan 105466.
nan]
[ -578832. nan nan nan 57586.6875
nan]
[ -672531. nan nan nan 53535.0625
nan]
[ -290301. nan nan nan 20826.
nan]
[ -352957. nan nan nan 23667.
nan]]
[[ 12390452. nan nan nan
556118.34375 nan]
[ 15674697. nan nan nan
709961.15625 nan]
[ 13311384. nan nan nan
506089.5 nan]
[ 17955789. nan nan nan
577555.75 nan]
[ 8404207. nan nan nan
290202.5625 nan]
[ 7013841. nan nan nan
286055.65625 nan]]
[[ -1.70058344e+08 nan nan nan
3.80284553e+06 nan]
[ -3.08964363e+08 nan nan nan
5.90578622e+06 nan]
[ -3.20191824e+08 nan nan nan
5.84706366e+06 nan]
[ -1.32565371e+08 nan nan nan
2.99254197e+06 nan]
[ -1.76188393e+08 nan nan nan
3.43810981e+06 nan]
[ -1.84465067e+08 nan nan nan
2.99572222e+06 nan]]
[[ 3.40983546e+09 nan nan nan
3.24524579e+07 nan]
[ 6.87651855e+09 nan nan nan
6.37697481e+07 nan]
[ 6.76594008e+09 nan nan nan
6.49239098e+07 nan]
[ 1.82508274e+09 nan nan nan
2.04692572e+07 nan]
[ 3.95443209e+09 nan nan nan
3.29497617e+07 nan]
[ 1.46965714e+09 nan nan nan
1.61671868e+07 nan]]
[[ -7.55311256e+10 nan nan nan
3.51310690e+08 nan]
[ -1.43963555e+11 nan nan nan
6.91926180e+08 nan]
[ -1.43671490e+11 nan nan nan
6.14151827e+08 nan]
[ -3.95052160e+10 nan nan nan
1.86063568e+08 nan]
[ -3.30433083e+10 nan nan nan
1.82141122e+08 nan]
[ -2.10623354e+10 nan nan nan
1.18333360e+08 nan]]
[[ 1.58330704e+12 nan nan nan
3.76670681e+09 nan]
[ 3.06399726e+12 nan nan nan
6.58586074e+09 nan]
[ 1.48637692e+12 nan nan nan
3.94750614e+09 nan]
[ 8.78212475e+11 nan nan nan
2.04334986e+09 nan]
[ 5.00257140e+11 nan nan nan
1.36939716e+09 nan]
[ 5.05680342e+11 nan nan nan
1.14632319e+09 nan]]
[[ -3.21263495e+13 nan nan nan
3.49030568e+10 nan]
[ -3.37723650e+13 nan nan nan
4.42634432e+10 nan]
[ -2.57167470e+13 nan nan nan
3.21392334e+10 nan]
[ -1.83913873e+13 nan nan nan
2.15533028e+10 nan]
[ -1.18700318e+13 nan nan nan
1.35065818e+10 nan]
[ -9.76824454e+12 nan nan nan
1.15058038e+10 nan]]
[[ 3.63440397e+14 nan nan nan
2.37386833e+11 nan]
[ 5.96979027e+14 nan nan nan
3.67072042e+11 nan]
[ 4.86722782e+14 nan nan nan
2.86252597e+11 nan]
[ 3.45267616e+14 nan nan nan
1.90894104e+11 nan]
[ 2.32147665e+14 nan nan nan
1.36611341e+11 nan]
[ 1.97760589e+14 nan nan nan
1.17082840e+11 nan]]
[[ -6.45651305e+15 nan nan nan
1.97848651e+12 nan]
[ -1.08066041e+16 nan nan nan
3.19535985e+12 nan]
[ -9.34864881e+15 nan nan nan
2.77540243e+12 nan]
[ -4.03362241e+15 nan nan nan
1.31192876e+12 nan]
[ -4.64574700e+15 nan nan nan
1.36172250e+12 nan]
[ -3.70725127e+15 nan nan nan
1.02929115e+12 nan]]
[[ 1.17414689e+17 nan nan nan
1.73645005e+13 nan]
[ 2.03919625e+17 nan nan nan
3.03884752e+13 nan]
[ 1.82913976e+17 nan nan nan
2.67628140e+13 nan]
[ 7.16644833e+16 nan nan nan
1.09754669e+13 nan]
[ 8.22122703e+16 nan nan nan
1.16048402e+13 nan]
[ 4.50391259e+16 nan nan nan
7.26648378e+12 nan]]
[[ -2.22211022e+18 nan nan nan
1.65323783e+14 nan]
[ -3.96477338e+18 nan nan nan
2.90480374e+14 nan]
[ -3.21324436e+18 nan nan nan
2.30555042e+14 nan]
[ -1.33302739e+18 nan nan nan
9.83834981e+13 nan]
[ -1.04411148e+18 nan nan nan
8.36403047e+13 nan]
[ -8.17346538e+17 nan nan nan
6.24563214e+13 nan]]
[[ 4.28609782e+19 nan nan nan
1.56767939e+15 nan]
[ 7.00421350e+19 nan nan nan
2.52006595e+15 nan]
[ 4.56697043e+19 nan nan nan
1.78400961e+15 nan]
[ 2.53685291e+19 nan nan nan
9.40630942e+14 nan]
[ 1.90129856e+19 nan nan nan
7.22946712e+14 nan]
[ 1.54994068e+19 nan nan nan
5.65374859e+14 nan]]
[[ -7.46091055e+20 nan nan nan
1.34923346e+16 nan]
[ -1.02448457e+21 nan nan nan
1.98780910e+16 nan]
[ -8.27014192e+20 nan nan nan
1.54723619e+16 nan]
[ -4.83152510e+20 nan nan nan
8.81574251e+15 nan]
[ -3.60725194e+20 nan nan nan
6.59437953e+15 nan]
[ -2.80342009e+20 nan nan nan
5.23368616e+15 nan]]
[[ 1.10718599e+22 nan nan nan
1.07126636e+17 nan]
[ 1.85156185e+22 nan nan nan
1.72623825e+17 nan]
[ 1.47362356e+22 nan nan nan
1.36583359e+17 nan]
[ 8.20505311e+21 nan nan nan
7.47838752e+16 nan]
[ 6.57314521e+21 nan nan nan
6.11526041e+16 nan]
[ 5.29781410e+21 nan nan nan
4.85177037e+16 nan]]
[[ -1.99892420e+23 nan nan nan
9.31410803e+17 nan]
[ -3.25073484e+23 nan nan nan
1.51035216e+18 nan]
[ -2.68634654e+23 nan nan nan
1.24900135e+18 nan]
[ -1.23936403e+23 nan nan nan
5.97686240e+17 nan]
[ -1.22366388e+23 nan nan nan
5.59960912e+17 nan]
[ -9.02136214e+22 nan nan nan
4.11634753e+17 nan]]
[[ 3.51936950e+24 nan nan nan
8.17626148e+18 nan]
[ 5.89641432e+24 nan nan nan
1.37202675e+19 nan]
[ 4.91685296e+24 nan nan nan
1.12823941e+19 nan]
[ 2.23378406e+24 nan nan nan
5.20641272e+18 nan]
[ 2.05214524e+24 nan nan nan
4.71403377e+18 nan]
[ 1.38563230e+24 nan nan nan
3.33295142e+18 nan]]
[[ -6.38809962e+25 nan nan nan
7.42425344e+19 nan]
[ -1.07609582e+26 nan nan nan
1.23603408e+20 nan]
[ -8.34104969e+25 nan nan nan
9.62903350e+19 nan]
[ -3.97044770e+25 nan nan nan
4.60749654e+19 nan]
[ -3.21802141e+25 nan nan nan
3.85359269e+19 nan]
[ -2.52025484e+25 nan nan nan
2.93162437e+19 nan]]
[[ 1.15950632e+27 nan nan nan
6.66162210e+20 nan]
[ 1.83567641e+27 nan nan nan
1.06018337e+21 nan]
[ 1.36384282e+27 nan nan nan
8.07418382e+20 nan]
[ 7.21216996e+26 nan nan nan
4.18356254e+20 nan]
[ 5.83459921e+26 nan nan nan
3.39237403e+20 nan]
[ 4.48275053e+26 nan nan nan
2.59252031e+20 nan]]
[[ -1.97206069e+28 nan nan nan
5.70462602e+21 nan]
[ -3.03170860e+28 nan nan nan
8.94952416e+21 nan]
[ -2.43556520e+28 nan nan nan
7.06771414e+21 nan]
[ -1.29824646e+28 nan nan nan
3.73127672e+21 nan]
[ -1.04079350e+28 nan nan nan
3.01087657e+21 nan]
[ -7.99255285e+27 nan nan nan
2.32587176e+21 nan]]
[[ 3.27526512e+29 nan nan nan
4.82814779e+22 nan]
[ 5.39536719e+29 nan nan nan
7.82474058e+22 nan]
[ 4.27166968e+29 nan nan nan
6.20762424e+22 nan]
[ 2.19530602e+29 nan nan nan
3.18349563e+22 nan]
[ 1.85815986e+29 nan nan nan
2.69899943e+22 nan]
[ 1.43772363e+29 nan nan nan
2.06848024e+22 nan]]
[[ -5.82253416e+30 nan nan nan
4.22275150e+23 nan]
[ -9.41792298e+30 nan nan nan
6.84961380e+23 nan]
[ -7.62440683e+30 nan nan nan
5.53248227e+23 nan]
[ -3.67102947e+30 nan nan nan
2.70188691e+23 nan]
[ -3.31450846e+30 nan nan nan
2.38682980e+23 nan]
[ -2.43665700e+30 nan nan nan
1.76717906e+23 nan]]
[[ 0.43334901]
[ 0.91071107]
[ 0.45954026]
[-0.05750315]
[-0.11549123]
[ 0.24420119]]

Numerical Integral
Question I2.

Compute a definite integral. Integrate func from a to b using a technique from the Fortran library
QUADPACK.

from scipy.integrate import quad

def integrand(x):
return sqrt(sin (x))

print(round(ans,8))

2.39628047

Potrebbero piacerti anche