コード例 #1
0
def newtonRaphson2(f,x,tol=1.0e-9):
    def jacobian(f,x):
        h = 1.0e-4
        n = len(x)
        jac = np.zeros((n,n))
        f0 = f(x)
        for i in range(n):
            temp = x[i]
            x[i] = temp + h
            f1 = f(x)
            x[i] = temp
            jac[:,i] = (f1 - f0)/h
        return jac,f0
    for i in range(30):
        jac,f0 = jacobian(f,x)
        if math.sqrt(np.dot(f0,f0)/len(x)) < tol: return x
        dx = alg.gaussPivot(jac,-f0)
        x = x + dx
        if math.sqrt(np.dot(dx,dx)) < tol*max(max(abs(x)),1.0):
            return x
    print('Too many iterations')
コード例 #2
0
a = 1 - (lam / 0.1)                 # nilai untuk diagonal kiri
b = 1 + (lam / 0.1)                 # nilai untuk diagonal kanan
A = np.zeros([n, n])
B = np.zeros([n])

# Ax = B
# Matriks A
for i in range(0, n):
	for j in range(0, n):                      # loop dari 0 sampai 9
		if (i == j):
			A[i, j] = -2	                        # nilai diagonal
			if ((j-1) >= 0):                        # kondisi agar tidak melebihi ukuran matriks
				A[i, j - 1] = 1 - (lam / r[i])   # nilai diagonal kiri
			if ((j+1) <= n-1):
				A[i, j + 1] = 1 + (lam / r[i])   # nilai diagonal kanan
A[0,0] = -3 ; A[0,1] = 4 ; A[0,2] = -1	     # definisi titik awal
print("Matriks A adalah \n", A,"\n")

# Matriks B
s = float(input("masukkan nilai S : "))         # input nilai s
for i in range(1, n - 1):                       # loop dari 1 sampai 8
	B[i] = -s * h**2
B[n - 1] = -s * h**2 - (1 + lam/r[n-1])         # nilai untuk baris terakhir
#print("Matriks B adalah \n",B)

C = gaussPivot(A,B)
for i in range(0,n):
    print("Nilai dari T_{:d} adalah {:7.6f}".format(i,C[i]))
plt.title('Grafik Soal 27.24')
plt.xlabel("Jari-jari (r)") ; plt.ylabel("T(r)")
plt.plot(r,C)   ; plt.show()