秦九韶算法詳解


秦九韶算法

秦九韶算法是將一元n次多項式的求值問題轉化為n個一次式的算法,比普通計算方式提高了一個數量級
普通算式

a*x^i

因為多次求冪,消耗了大量的計算時間

我們來分析一下秦九韶算法
例如:

求
1+x+2x^2+3x^3
當x=2時的值

首先我們將系數按照從大到小的方式提出來排列

如圖所示,我們需要將系數這樣排列計算

除了第一個值以外,其他的處置我們都在循環內取得,首先我們需要得到第一個值(注明,從第二個循環開始即使用sum結果進行乘積)

for (int i = 0; i <n-1; i++)
	{
		sum = sum * x + arr[i+1];  
	}

從第一個數開始每次乘了加上下一個值,然后繼續使用結果乘以x加下一個值

下面附上源碼

#include <stdio.h>
#define MAX 10  //只建議十項
int algorithm(double arr[], int n, int x)  
{
	double sum;
	sum = arr[0];
	for (int i = 0; i <n-1; i++)
	{
		sum = sum * x + arr[i+1];  
	}
	return sum;
}
int main()
{
	int n;
	double x;
	double sum;
	double arr[MAX];
	while(1)
	{
		printf("請輸入項數(注明,項數為最高項的冪+1):");
		scanf("%d", &n);
		if (n == 0) 
		{
			break;
		}
		else
		{
			printf("請輸入從小到大的系數,以空格隔開,沒有的用0代替:");
			for (int i = n - 1; i >= 0; i--)  //必須反向存
			{
				scanf("%lf", &arr[i]);
			}
			printf("請輸入乘數x:");
			scanf("%lf", &x);
			sum = algorithm(arr, n, x);
			printf("%.9lf", sum);
			printf("\n");
		}
	}
}


聯系請找ajin_w@163.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM