দ্বিঘাত সমীকরণ ax² + bx + c = 0-এর বাস্তব মূল বের করা।
ফর্মুলা
বিভেদক (Discriminant): D = b² - 4ac
- D > 0: দুটি বাস্তব মূল
- D = 0: একটি বাস্তব মূল (ডাবল)
- D < 0: বাস্তব মূল নেই (কомп্লেক্স)
মূল: x = (-b ± √D) / 2a
সমাধান
const findRoots = (coefficients) => {
const [a, b, c] = coefficients;
// a শূন্য হলে লিনিয়ার ইকুয়েশন
if (a === 0) {
if (b === 0) return c === 0 ? 'Infinite solutions' : 'No solution';
return [-c / b];
}
const discriminant = b * b - 4 * a * c;
// বাস্তব মূল নেই
if (discriminant < 0) {
return false; // বা { complex: true, roots: [...] }
}
const sqrtD = Math.sqrt(discriminant);
const denominator = 2 * a;
const x1 = (-b + sqrtD) / denominator;
const x2 = (-b - sqrtD) / denominator;
// D === 0 হলে দুটি একই হবে
return discriminant === 0 ? [x1] : [x1, x2];
};
// টেস্ট
console.log(findRoots([3, 12, 2])); // [-0.174..., -3.825...]
console.log(findRoots([1, -5, 6])); // [3, 2] (x²-5x+6=0)
console.log(findRoots([1, 2, 1])); // [-1] (x+1)²=0
console.log(findRoots([1, 0, 1])); // false (x²+1=0, কমপ্লেক্স)
কমপ্লেক্স রুট হ্যান্ডলিং
const findRootsComplex = (a, b, c) => {
const discriminant = b * b - 4 * a * c;
const denom = 2 * a;
const realPart = -b / denom;
if (discriminant >= 0) {
const sqrtD = Math.sqrt(discriminant);
return [
{ real: realPart + sqrtD / denom, imag: 0 },
{ real: realPart - sqrtD / denom, imag: 0 }
];
} else {
const sqrtD = Math.sqrt(-discriminant);
return [
{ real: realPart, imag: sqrtD / denom },
{ real: realPart, imag: -sqrtD / denom }
];
}
};
উৎপাদন
[ -0.17425814164944628, -3.825741858350554 ]