Numerical

Numerical adalah sebuah Class yang dapat membantu kita dalam menginisialisasi awal dalam mencari solusi menggunakan Komputasi Numerik baik Akolade maupun Non Akolade.

Class ini akan melakukan inisialisasi nilai awal seperti low, high, dan step dan juga sekaligus membuat atau mendefinisikan rumus-rumus yang akan dipakai nantinya.


INISIALISASI

import computing.numeric as num

numeric = num.Numerical(
low = 0,
high = 1,
step = 0.1,
formula = "x^2 - x + 3"
)

Low

Nilai low adalah nilai terendah yang didefinisikan (didaftarkan) yang nantinya akan dipakai untuk menjadi patokan nilai bawah dari mencari solusi Numerik.

High

Nilai high adalah nilai terendah yang didefinisikan (didaftarkan) yang nantinya akan dipakai untuk menjadi batas akhir dari mencari solusi Numerik.

Step

Nilai step adalah nilai yang digunakan untuk menambahkan nilai low sampai mendekati nilai high dengan tujuan untuk mencari persamaan akar pada lingkup low <= step <= high.

Formula

Daripada kita mendefiniskan rumus-rumus f(x), f'(x), g(x), maupun g'(x) secara manual, mengapa kita tidak menyerahkan semua itu untuk dibuatkan oleh sistem, 

Class Numerical ini juga memiliki kemampuan untuk membuat formula-formula yang dibutuhkan, hanya dengan membutuhkan rumus awal f(x) maka sistem akan dapat membuatkan rumus-rumus yang lainnya secara otomatis. 

Didalam class Numerical ini akan memanggil class lain bernama Expression untuk dibuatkan rumus-rumusnya. Class Expression ini hanya dapat membuat rumus-rumus yang sederhana (tanpa ada operasi trigonometri, exp, log, dan lainnya) seperti deret x berpangkat.

Contoh:
import computing.numeric as num

numeric = num.Numerical(
    ...
    formula = "x^2 - x + 3"
)

numeric.showFormulas()
# f(x)	=  x^2 - x + 3
# f'(x)	=  2*x - 1

# g(x)	=  x^2 + 3
# g'(x)	=  2*x
import computing.numeric as num

numeric = num.Numerical(
    ...
    formula = "2*x^5 - 4*x^4 + x^3 - 2*x^2 + 2*x - 4"
)

numeric.showFormulas()
# f(x)	=  2*x^5 - 4*x^4 + x^3 - 2*x^2 + 2*x - 4
# f'(x)	=  10.0*x^4 - 16.0*x^3 + 3*x^2 - 4.0*x + 2

# g(x)	=  (-2*x^5 + 4*x^4 - x^3 + 2*x + 4) / (2)
# g'(x)	=  (-10.0*x^4 + 16.0*x^3 - 3*x^2 + 2)

*Pastikan telah sesuai dengan aturan penulisan rumus pada Equation Definition.

Jika kita membutuhkan rumus-rumus dengan fungsi - fungsi trigonometri (sin, cos, tan), log, exp dsb, kita dapat mendefinisikannya di file yang telah disediakan pada program, file itu bernama formula.py yang berada di computing/formula/formula.py


Tetapi sebelum itu pastikan kita sudah memberi tahu class Numerical jika ingin menggunakan atau mendefinisikan rumus secara manual dengan mengisi parameter formula dengan constanta num.MANUAL.

import computing.numeric as num

numeric = num.Numerical(
    ...
    formula = num.MANUAL
)

numeric.showFormulas()
# f(x)	=  Manual
# f'(x)	=  Manual

# g(x)	=  Manual
# g'(x)	=  Manual


Didalam file formula.py akan berisi sebuah 4 buah function yang dapat diubah - ubah rumusnya.

import math
from numpy import log as ln
from numpy import log10


def f(x):
    return math.exp(-x) - x


def fs(x):
    return - math.exp(-x) - 1


def g(x):
    return math.exp(-x)


def gs(x):
    return - math.exp(-x)


FUNCTION

Function Fungsi
getLow() mengambil nilai low yang telah didefinisikan diawal
getHigh() mengambil nilai high yang telah didefinisikan diawal
getStep() mengambil nilai step yang telah didefinisikan diawal
getTable() mendapatkan list tabel dari hasil perhitungan f(x) didala range low sampai high
getPoints() mendapatkan kumpulan titik x dan f(x) dalam bentuk List
getExpression() mendapatkan objek dari class Expression yang nantinya dapat meng eval rumus-rumus yang dibuat pada Numerical


import computing.numeric as num

numeric = num.Numerical(
    low=0,
    high=1,
    step=0.1,
    formula="3*x^2 - 2*x + 1"
)

low = numeric.getLow()
print(low) # 0

high = numeric.getHigh()
print(high) # 1

step = numeric.getStep()
print(step) # 0.1


import computing.numeric as num

numeric = num.Numerical(
    low=0,
    high=1,
    step=0.1,
    formula="3*x^2 - 2*x + 1"
)

points = numeric.getPoints()
print(points)
# [[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,
# 0.8, 0.9, 1.0], [1, 0.83, 0.72, 0.6699999999999999,
# 0.68, 0.75, 0.8800000000000001, 1.0699999999999998,
# 1.3199999999999998, 1.63, 1.9999999999999993]]

table = numeric.getTable()
print(table)
# [[0, 1], [0.1, 0.83], [0.2, 0.72],
# [0.3, 0.6699999999999999], [0.4, 0.68],
# [0.5, 0.75], [0.6, 0.8800000000000001], 
# [0.7, 1.0699999999999998], [0.8, 1.3199999999999998],
# [0.9, 1.63], [1.0, 1.9999999999999993]]


import computing.numeric as num

numeric = num.Numerical(
    low=0,
    high=1,
    step=0.1,
    formula="3*x^2 - 2*x + 1"
)

expression = numeric.getExpression()
print(expression.getF()) # 3*x**2-2*x+1
print(expression.getFs()) # 6.0*x-2
print(expression.getG()) # (3*x**2+1)/(2)
print(expression.getGs()) # (6.0*x)


import computing.numeric as num

numeric = num.Numerical(
    low=0,
    high=1,
    step=0.1,
    formula="3*x^2 - 2*x + 1"
)

expression = numeric.getExpression()
print(expression.evalF(1)) # 2
print(expression.evalFs(1)) # 4.0
print(expression.evalG(1)) # 2.0
print(expression.evalGs(1)) # 6.0