در آموزشهای قبلی مجله فرادرس، با روش محاسبه ریشه دوم یک عدد آشنا شدیم. در این آموزش، با نحوه یافتن ریشه سوم یک عدد آشنا میشویم. همچنین، برنامه مربوط به آن را در زبانهای برنامهنویسی مختلف را ارائه خواهیم کرد.
الگوریتم یافتن ریشه سوم یک عدد با جستوجوی باینری
برای نوشتن برنامه یافتن ریشه سوم یک عدد، میتوانیم از جستوجوی باینری استفاده کنیم. ابتدا خطای $$e$$ را تعریف میکنیم. برای مثال، مقدار خطا را $$10^ { – 7 } $$ قرار میدهیم. گامهای اصلی الگوریتم محاسبه ریشه سوم عدد $$n$$ به صورت زیر است:
- شروع را برابر با صفر (start=0) و پایان را برابر با $$n$$ (end = n) قرار میدهیم.
- میانگین mid = (start + end)/2 را محاسبه میکنیم.
- قدر مطلق n – mid*mid*mid را بررسی میکنیم که کوچکتر از e باشد. اگر شرط n – mid*mid*mid) < e) برقرار باشد، آنگاه جواب همان mid خواهد بود.
- اگر mid*mid*mid)>n) باشد، آنگاه این تساوی end = mid را قرار میدهیم.
- اگر mid*mid*mid)<n) باشد، آنگاه این تساوی start = mid را قرار میدهیم.
مثال
به عنوان یک مثال ساده، فرض کنید میخواهیم ریشه سوم عدد 10 را به دست آوریم. با قرار دادن start = 0 و end = 10، مقدار mid = 5 به دست میآید. قدر مطلق خطا برابر با 10 – ۱۲۵ = ۱۱۵ است. با توجه به اینکه این مقدار بیشتر از خطای قابل قبول (مثلاً 0٫1) است و mid*mid*mid)>n) تساوی end = mid را قرار میدهیم. اکنون end = 5 و در نتیجه mid = 2٫۵ است. قدر مطلق خطا در این حالت ۱۰ – ۱۵٫۶۳۵ = ۵٫۶۳۵ است و از آنجایی که mid*mid*mid)>n) است، تساوی end = ۲٫۵ را قرار میدهیم. اکنون start = 0 و end = ۲٫۵ است. همینگونه، محاسبات را ادامه میدهیم تا به مقدار خطای مطلوب برسیم.
کدهای مربوط به این الگوریتم، در زبانهای برنامهنویسی مختلف، در ادامه ارائه شده است. هدف از این برنامهها، این است که برای مثال، ورودی و خروجیهای زیر را داشته باشیم:
Input: n = 3 Output: Cubic Root is 1.442250 Input: n = 8 Output: Cubic Root is 2.000000
برنامه یافتن ریشه سوم یک عدد در ++C
// C++ program to find cubic root of a number
// using Binary Search
#include <bits/stdc++.h>
using namespace std;
// Retus the absolute value of n-mid*mid*mid
double diff(double n,double mid)
{
if (n > (mid*mid*mid))
retu (n-(mid*mid*mid));
else
retu ((mid*mid*mid) - n);
}
// Retus cube root of a no n
double cubicRoot(double n)
{
// Set start and end for binary search
double start = 0, end = n;
// Set precision
double e = 0.0000001;
while (true)
{
double mid = (start + end)/2;
double error = diff(n, mid);
// If error is less than e then mid is
// our answer so retu mid
if (error <= e)
retu mid;
// If mid*mid*mid is greater than n set
// end = mid
if ((mid*mid*mid) > n)
end = mid;
// If mid*mid*mid is less than n set
// start = mid
else
start = mid;
}
}
// Driver code
int main()
{
double n = 3;
printf("Cubic root of %lf is %lfn",
n, cubicRoot(n));
retu 0;
}برنامه یافتن ریشه سوم یک عدد در Java
// Java program to find cubic root of a number
// using Binary Search
import java.io.*;
class GFG
{
// Retus the absolute value of n-mid*mid*mid
static double diff(double n,double mid)
{
if (n > (mid*mid*mid))
retu (n-(mid*mid*mid));
else
retu ((mid*mid*mid) - n);
}
// Retus cube root of a no n
static double cubicRoot(double n)
{
// Set start and end for binary search
double start = 0, end = n;
// Set precision
double e = 0.0000001;
while (true)
{
double mid = (start + end)/2;
double error = diff(n, mid);
// If error is less than e then mid is
// our answer so retu mid
if (error <= e)
retu mid;
// If mid*mid*mid is greater than n set
// end = mid
if ((mid*mid*mid) > n)
end = mid;
// If mid*mid*mid is less than n set
// start = mid
else
start = mid;
}
}
// Driver program to test above function
public static void main (String[] args)
{
double n = 3;
System.out.println("Cube root of "+n+" is "+cubicRoot(n));
}
}
// This code is contributed by Pramod Kumar
برنامه یافتن ریشه سوم یک عدد در Python
# Python 3 program to find cubic root
# of a number using Binary Search
# Retus the absolute value of
# n-mid*mid*mid
def diff(n, mid) :
if (n > (mid * mid * mid)) :
retu (n - (mid * mid * mid))
else :
retu ((mid * mid * mid) - n)
# Retus cube root of a no n
def cubicRoot(n) :
# Set start and end for binary
# search
start = 0
end = n
# Set precision
e = 0.0000001
while (True) :
mid = (start + end) / 2
error = diff(n, mid)
# If error is less than e
# then mid is our answer
# so retu mid
if (error <= e) :
retu mid
# If mid*mid*mid is greater
# than n set end = mid
if ((mid * mid * mid) > n) :
end = mid
# If mid*mid*mid is less
# than n set start = mid
else :
start = mid
# Driver code
n = 3
print("Cubic root of", n, "is",
round(cubicRoot(n),6))
# This code is contributed by Nikita Tiwari.برنامه یافتن ریشه سوم یک عدد #C
// C# program to find cubic root
// of a number using Binary Search
using System;
class GFG {
// Retus the absolute value
// of n - mid * mid * mid
static double diff(double n, double mid)
{
if (n > (mid * mid * mid))
retu (n-(mid * mid * mid));
else
retu ((mid * mid * mid) - n);
}
// Retus cube root of a no. n
static double cubicRoot(double n)
{
// Set start and end for
// binary search
double start = 0, end = n;
// Set precision
double e = 0.0000001;
while (true)
{
double mid = (start + end) / 2;
double error = diff(n, mid);
// If error is less than e then
// mid is our answer so retu mid
if (error <= e)
retu mid;
// If mid * mid * mid is greater
// than n set end = mid
if ((mid * mid * mid) > n)
end = mid;
// If mid*mid*mid is less than
// n set start = mid
else
start = mid;
}
}
// Driver Code
public static void Main ()
{
double n = 3;
Console.Write("Cube root of "+ n
+ " is "+cubicRoot(n));
}
}
// This code is contributed by nitin mittal.
برنامه یافتن ریشه سوم یک عدد در PHP
<?php
// PHP program to find cubic root
// of a number using Binary Search
// Retus the absolute value
// of n - mid * mid * mid
function diff($n,$mid)
{
if ($n > ($mid * $mid * $mid))
retu ($n - ($mid *
$mid * $mid));
else
retu (($mid * $mid *
$mid) - $n);
}
// Retus cube root of a no n
function cubicRoot($n)
{
// Set start and end
// for binary search
$start = 0;
$end = $n;
// Set precision
$e = 0.0000001;
while (true)
{
$mid = (($start + $end)/2);
$error = diff($n, $mid);
// If error is less
// than e then mid is
// our answer so retu mid
if ($error <= $e)
retu $mid;
// If mid*mid*mid is
// greater than n set
// end = mid
if (($mid * $mid * $mid) > $n)
$end = $mid;
// If mid*mid*mid is
// less than n set
// start = mid
else
$start = $mid;
}
}
// Driver Code
$n = 3;
echo("Cubic root of $n is ");
echo(cubicRoot($n));
// This code is contributed by nitin mittal.
?>
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای محاسبات عددی
- آموزش محاسبات عددی با MATLAB
- مجموعه آموزشهای دروس ریاضیات
- آموزش ریاضی پایه دانشگاهی
- روش نیوتن — به زبان ساده
- دستگاه معادلات خطی — به زبان ساده
- روش ژاکوبی — به زبان ساده
^^


