Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Adding Algoritm Derivative #100

Merged
merged 8 commits into from
Sep 18, 2023
55 changes: 55 additions & 0 deletions math/cos.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include<iostream>
#include<cmath>
#include<vector>


/**
* @file cos.cpp
* @brief fungsi untuk mengetahui Cos nilai output dengan
* menggunakan algoritma
*/


int factorial(int n){
if (n<0){
throw std::invalid_argument("Angka faktorial harus real");
}
else if (n==0 or n==1){
return 1;
}
else{
return n * factorial(n-1);
}
}


/**
* @brief fungsi untuk mengetahui nilai cosinus pada titik
* dengan menggunakan algoritma taylor series
* @param sudut merupakan titik input untuk mengetahui
* nilai cos dari titik tersebut
* @param iterable merupakan jumlah perulangan perjumlah yang dilakukan
* default 4
* @return hasilnya berupa angka decimal
*/


template <typename T> double cosinus(T sudut,int iterable=4){
double result = 0.0;
for (int n = 0; n <= iterable; ++n){
double numerator = pow(-1,n) * pow(sudut,2*n);
double denumerator = factorial(2*n);
result =result + (numerator/denumerator);
}
return result;
}


int main(){
// testing
std::vector<double> list_sudut ={M_PI,M_PI/2,M_PI * 3/4};
for(int i =0;i<list_sudut.size();++i){
std::cout<<"Cos dari Sudut:"<<list_sudut[i]<<"="<<cosinus(list_sudut[i])<<std::endl;
}
return 0;
}
93 changes: 93 additions & 0 deletions math/derivative.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#include <cmath>
#include <iostream>

float derivative(float (*f)(float), float x, float h = 1e-5) {
/**
* @brief derivative atau familiar dengan istilah `limit`.limit
* limier merupakan suatu konsep yang digunakan untuk mengetahui
* perilaku suatu fungsi saat variabel independennya mendekati nilai
* tertentu
* @param f merupakan parameter input berupa fungsi
* @param x merupakan parameter input berupa angka desima
* @param h merupakan mengisi perbadingan nilai awal yang optimal nya
* 1e-5
* @return float outputnya berupa angka desimal
*/
return (f(x - h) - f(h) / h);
}

float poly_derivative(float x, int n) {
/**
* @brief merupakan turunan dari limit biasa dengan input fungsi
* berupa input polynominal
* @param x input value berupa angka decimal
* @param n input value berupa angka untuk pangkat
* @return float berupa angka decimal
*
*/
return n * pow(x, n - 1);
}

float sum_derivative(float (*f)(float), float (*h)(float), float x) {
/**
* @brief fungsi ini merupakan fungsi dari turunan limit dengan
* input fungsi dua atau lebih dan juga hasilnya ditambah
* sama seperti X(a+b) = Xa + Xb
* @param f input value fungsi pertama
* @param h input value fungsi kedua
* @param x input value berupa angka decimal
* @return float hasilnya berupa desimal
*/
return derivative(f, x) + derivative(h, x);
}

float product_derivative(float (*f)(float), float (*h)(float), float(x)) {
/**
* @brief fungsi ini merupakan konsepnya seperti sum tetapi berupa angka
* konsepnya seperti ini X(ab) Xab + aXb
* @param f input berupa fungsi pertama
* @param g input berupa fungsi kedua
* @param x input berupa angka decimal
* @return float keluar dengan angka decimal
*/

return derivative(f, x) * h(x) + f(x) * derivative(h, x);
}

float chain_derivative(float (*f)(float), float (*g)(float), float x) {
/**
* @brief urunan fungsi komposit (fungsi bersusun) dari dua fungsi matematika
* @param f input fungsi berupa fungsi pertama
* @param g input fungsi berupa fungsi kedua
* @param x input berupa angka desimal
* @return float output berupa angka desimal
*/
return derivative(g, f(x)) * derivative(f, x);
}

int main() {
float x = 2.0;
int n = 3;
auto f = [](float x) { return x * x; };
auto g = [](float x) { return x * x * x; };
std::cout << "Percobaan untuk derivative\n";
std::cout << "Hasil dari derivative dari x adalah" << derivative(f, x)
<< std::endl;

std::cout << "Percobaan untuk Poly derivative\n";
std::cout << "Hasil dari Poly derivative dari x adalah"
<< poly_derivative(x, n) << std::endl;

std::cout << "Percobaan untuk Sum derivative\n";
std::cout << "Hasil dari Sum derivative dari x adalah"
<< sum_derivative(f, g, x) << std::endl;

std::cout << "Percobaan untuk Product derivative\n";
std::cout << "Hasil dari Product derivative dari x adalah"
<< product_derivative(f, g, x) << std::endl;

std::cout << "Percobaan untuk Chain derivative\n";
std::cout << "Hasil dari Chain derivative dari x adalah"
<< chain_derivative(f, g, x) << std::endl;
return 0;
}
Loading