Polinom Fonksiyonlarının Türevlerini Alma

<?php
class turev {
	var $ds = array(
		'log(ax+b)' => 'd(ax+b)/(ax+b)',
		'cos(ax+b)' => '-1*sin(ax+b)*d(ax+b)',
		'sin(ax+b)' => '1*cos(ax+b)*d(ax+b)');
	function coklu_turev($fonksiyon) {
		// İşlev formatı: k(coklu)^n + k(coklu)^n vb ...
		$q = explode(" ",$fonksiyon);
		foreach ($q as $r => $s) {
			if (strlen($s) > 1) {
				$t = preg_match("/([0-9]+)\((.+)\)\^([0-9-])/",$s,$w);
				if (is_array($w)) {
					if ($w[3] == 1) {
						$c1 = $w[1];
						$c2 = $this->tekli_turev(str_replace("+"," + ",str_replace("-"," - ",$w[2])));
						$df[] = $c1*$c2."x^0";
					}
					elseif ($w[3] == 0) $df[] = 0;
					else {
						$c1 = $w[1]*$w[3];
						$pfin = $w[3]-1;
						$c2 = $this->tekli_turev(str_replace("+"," + ",str_replace("-"," - ",$w[2])));
						if (is_int($c2)) {
							$c3 = $c1*$c2;
							$df[] = $c3."(".$w[2].")^".$pfin;
						}
						else {
							$r = $c1."(".$w[2].")^".$pfin;
							$df[] = $r;							
						}
					}
				}
				else{
					$df[] = $s;
				} 
			}
			else{
				if($t==1){
					$df[] = " + ";
				}else{
					$df[] = $t;
				}
			}
		}
		return implode($df);
	}
	function tekli_turev($fonksiyon) {
		// İşlev formatı: kx^n + kx^n + kx^n
		$a = explode(" ",$fonksiyon);
		foreach ($a as $b => $c) {
			if (strlen($c) > 1) {
				$r = preg_match("/([0-9]+)x\^([0-9-]+)/",$c,$d);
				if (is_array($d)) {
					if ($d[2] > 1 or $d[2] < -1) $turev[] = ($d[1]*$d[2])."x^".($d[2]-1);
					elseif (abs($d[2]) == 1) $turev[] = $d[1];
					else array_pop($turev);
					unset($d);
				}
				else $turev[] = $c;
			}
			else $turev[] = $c;
		}
		return implode(" ",$turev);
	}
}
$t= new turev;
echo $t->coklu_turev("3(x+b)^3 + 3(x+b)^3");
echo "<br>";
echo $t->tekli_turev("3x^2 + 3x^2 + 3x^2");

Çıktısı

9(x+b)^2 + 9(x+b)^2
6x^1 + 6x^1 + 6x^1

 

Yazı İçinde Matematiksel İşlem Hesaplama Sınıfı

Bu metin içinde geçen (3+(5*2)) nin 13 olduğunu bulan bir sınıftır.

<?php
class Matematiklestir{
	function degistir($metin){
		$Mat = preg_match_all("/\(+[0-9+\s+\-.*\/()%]+\)/", $metin, $mMat);
		for ($i=0;$i<$Mat; $i++){
			$formul = str_replace(" ", "", $mMat[0][$i]);
			$formul = preg_replace("/([+-])([0-9]+)(%)/", "*(1\$1.\$2)", $formul);
			$formul = preg_replace("/([0-9]+)(%)/",".\$1",$formul);
			eval("\$sonuc=" . $formul . ";");
			$poz = strpos($metin, $mMat[0][$i]);
			$metin = substr_replace($metin, $sonuc, $poz, strlen($mMat[0][$i]));
		}
		return $metin;
	}
}
$yuzde = 10;
$zincir = " [[40+15]*2] + $yuzde% u (((40+15)*2)+ $yuzde%) eder";
$ciktilar = new Matematiklestir;
$cikti = $ciktilar->degistir($zincir);
echo $cikti;
?>

Çıktı

[[40+15]*2] + 10% u 121 eder