یافتن ریشه سوم یک عدد — به زبان ساده

۴۳۶۶ بازدید
آخرین به‌روزرسانی: ۱۶ اردیبهشت ۱۴۰۲
زمان مطالعه: ۵ دقیقه
یافتن ریشه سوم یک عدد — به زبان ساده

در آموزش‌های قبلی مجله فرادرس، با روش محاسبه ریشه دوم یک عدد آشنا شدیم. در این آموزش، با نحوه یافتن ریشه سوم یک عدد آشنا می‌شویم. همچنین، برنامه مربوط به آن را در زبان‌های برنامه‌نویسی مختلف را ارائه خواهیم کرد.

الگوریتم یافتن ریشه سوم یک عدد با جست‌وجوی باینری

برای نوشتن برنامه یافتن ریشه سوم یک عدد، می‌توانیم از جست‌وجوی باینری استفاده کنیم. ابتدا خطای $$e$$ را تعریف می‌کنیم.

برای مثال، مقدار خطا را $$10^ { - 7 } $$ قرار می‌دهیم. گام‌های اصلی الگوریتم محاسبه ریشه سوم عدد $$n$$ به صورت زیر است:

  1. شروع را برابر با صفر (start=0) و پایان را برابر با $$n$$ (end = n) قرار می‌دهیم.
  2. میانگین mid = (start + end)/2 را محاسبه می‌کنیم.
  3. قدر مطلق n – mid*mid*mid را بررسی می‌کنیم که کوچک‌تر از e باشد. اگر شرط n – mid*mid*mid) < e) برقرار باشد، آنگاه جواب همان mid خواهد بود.
  4. اگر mid*mid*mid)>n) باشد، آنگاه این تساوی end = mid را قرار می‌دهیم.
  5. اگر 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

1// C++ program to find cubic root of a number 
2// using Binary Search 
3#include <bits/stdc++.h> 
4using namespace std; 
5
6// Returns the absolute value of n-mid*mid*mid 
7double diff(double n,double mid) 
8{ 
9	if (n > (mid*mid*mid)) 
10		return (n-(mid*mid*mid)); 
11	else
12		return ((mid*mid*mid) - n); 
13} 
14
15// Returns cube root of a no n 
16double cubicRoot(double n) 
17{ 
18	// Set start and end for binary search 
19	double start = 0, end = n; 
20
21	// Set precision 
22	double e = 0.0000001; 
23
24	while (true) 
25	{ 
26		double mid = (start + end)/2; 
27		double error = diff(n, mid); 
28
29		// If error is less than e then mid is 
30		// our answer so return mid 
31		if (error <= e) 
32			return mid; 
33
34		// If mid*mid*mid is greater than n set 
35		// end = mid 
36		if ((mid*mid*mid) > n) 
37			end = mid; 
38
39		// If mid*mid*mid is less than n set 
40		// start = mid 
41		else
42			start = mid; 
43	} 
44} 
45
46// Driver code 
47int main() 
48{ 
49	double n = 3; 
50	printf("Cubic root of %lf is %lf\n", 
51		n, cubicRoot(n)); 
52	return 0; 
53}

برنامه یافتن ریشه سوم یک عدد در Java

1// Java program to find cubic root of a number 
2// using Binary Search 
3import java.io.*; 
4
5class GFG 
6{ 
7	// Returns the absolute value of n-mid*mid*mid 
8	static double diff(double n,double mid) 
9	{ 
10		if (n > (mid*mid*mid)) 
11			return (n-(mid*mid*mid)); 
12		else
13			return ((mid*mid*mid) - n); 
14	} 
15	
16	// Returns cube root of a no n 
17	static double cubicRoot(double n) 
18	{ 
19		// Set start and end for binary search 
20		double start = 0, end = n; 
21
22		// Set precision 
23		double e = 0.0000001; 
24
25		while (true) 
26		{ 
27			double mid = (start + end)/2; 
28			double error = diff(n, mid); 
29
30			// If error is less than e then mid is 
31			// our answer so return mid 
32			if (error <= e) 
33				return mid; 
34
35			// If mid*mid*mid is greater than n set 
36			// end = mid 
37			if ((mid*mid*mid) > n) 
38				end = mid; 
39
40			// If mid*mid*mid is less than n set 
41			// start = mid 
42			else
43				start = mid; 
44		} 
45	} 
46	
47	// Driver program to test above function 
48	public static void main (String[] args) 
49	{ 
50		double n = 3; 
51		System.out.println("Cube root of "+n+" is "+cubicRoot(n)); 
52	} 
53} 
54
55// This code is contributed by Pramod Kumar

برنامه یافتن ریشه سوم یک عدد در Python

1# Python 3 program to find cubic root 
2# of a number using Binary Search 
3
4# Returns the absolute value of 
5# n-mid*mid*mid 
6def diff(n, mid) : 
7	if (n > (mid * mid * mid)) : 
8		return (n - (mid * mid * mid)) 
9	else : 
10		return ((mid * mid * mid) - n) 
11		
12# Returns cube root of a no n 
13def cubicRoot(n) : 
14	
15	# Set start and end for binary 
16	# search 
17	start = 0
18	end = n 
19	
20	# Set precision 
21	e = 0.0000001
22	while (True) : 
23		
24		mid = (start + end) / 2
25		error = diff(n, mid) 
26
27		# If error is less than e 
28		# then mid is our answer 
29		# so return mid 
30		if (error <= e) : 
31			return mid 
32			
33		# If mid*mid*mid is greater 
34		# than n set end = mid 
35		if ((mid * mid * mid) > n) : 
36			end = mid 
37			
38		# If mid*mid*mid is less 
39		# than n set start = mid 
40		else : 
41			start = mid 
42			
43# Driver code 
44n = 3
45print("Cubic root of", n, "is", 
46	round(cubicRoot(n),6)) 
47
48
49# This code is contributed by Nikita Tiwari.

برنامه یافتن ریشه سوم یک عدد #C

1// C# program to find cubic root 
2// of a number using Binary Search 
3using System; 
4
5class GFG { 
6	
7	// Returns the absolute value 
8	// of n - mid * mid * mid 
9	static double diff(double n, double mid) 
10	{ 
11		if (n > (mid * mid * mid)) 
12			return (n-(mid * mid * mid)); 
13		else
14			return ((mid * mid * mid) - n); 
15	} 
16	
17	// Returns cube root of a no. n 
18	static double cubicRoot(double n) 
19	{ 
20		
21		// Set start and end for 
22		// binary search 
23		double start = 0, end = n; 
24
25		// Set precision 
26		double e = 0.0000001; 
27
28		while (true) 
29		{ 
30			double mid = (start + end) / 2; 
31			double error = diff(n, mid); 
32
33			// If error is less than e then 
34			// mid is our answer so return mid 
35			if (error <= e) 
36				return mid; 
37
38			// If mid * mid * mid is greater 
39			// than n set end = mid 
40			if ((mid * mid * mid) > n) 
41				end = mid; 
42
43			// If mid*mid*mid is less than 
44			// n set start = mid 
45			else
46				start = mid; 
47		} 
48	} 
49	
50	// Driver Code 
51	public static void Main () 
52	{ 
53		double n = 3; 
54		Console.Write("Cube root of "+ n 
55					+ " is "+cubicRoot(n)); 
56	} 
57} 
58
59// This code is contributed by nitin mittal.

برنامه یافتن ریشه سوم یک عدد در PHP

1<?php 
2// PHP program to find cubic root 
3// of a number using Binary Search 
4
5// Returns the absolute value 
6// of n - mid * mid * mid 
7function diff($n,$mid) 
8{ 
9	if ($n > ($mid * $mid * $mid)) 
10		return ($n - ($mid * 
11				$mid * $mid)); 
12	else
13		return (($mid * $mid * 
14				$mid) - $n); 
15} 
16
17// Returns cube root of a no n 
18function cubicRoot($n) 
19{ 
20	
21	// Set start and end 
22	// for binary search 
23	$start = 0; 
24	$end = $n; 
25
26	// Set precision 
27	$e = 0.0000001; 
28
29	while (true) 
30	{ 
31		$mid = (($start + $end)/2); 
32		$error = diff($n, $mid); 
33
34		// If error is less 
35		// than e then mid is 
36		// our answer so return mid 
37		if ($error <= $e) 
38			return $mid; 
39
40		// If mid*mid*mid is 
41		// greater than n set 
42		// end = mid 
43		if (($mid * $mid * $mid) > $n) 
44			$end = $mid; 
45
46		// If mid*mid*mid is 
47		// less than n set 
48		// start = mid 
49		else
50			$start = $mid; 
51	} 
52} 
53
54	// Driver Code 
55	$n = 3; 
56	echo("Cubic root of $n is "); 
57	echo(cubicRoot($n)); 
58
59// This code is contributed by nitin mittal. 
60?>

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
GeeksforGeeks
۱ دیدگاه برای «یافتن ریشه سوم یک عدد — به زبان ساده»

def rooting_fringe_n(num, fringe):
return num ** (fringe ** -1)

rooting_fringe_n(8, 3)

<<<2.0

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *