『壹』 什麼是秦九韶演算法
秦九韶演算法是中國南宋時期的數學家秦九韶提出的一種多項式簡化演算法。在西方被稱作霍納演算法( algorithm或Horner scheme),是以英國數學家威廉·喬治·霍納命名的.
把一個n次多項式f(x)=a[n]x^n+a[n-1]x^(n-1)+......+a[1]x+a[0]改寫成如下形式:
f(x)=a[n]x^n+a[n-1]x^(n-1))+......+a[1]x+a[0]
=(a[n]x^(n-1)+a[n-1]x^(n-2)+......+a[1])x+a[0]
=((a[n]x^(n-2)+a[n-1]x^(n-3)+......+a[2])x+a[1])x+a[0]
=......
=(......((a[n]x+a[n-1])x+a[n-2])x+......+a[1])x+a[0].
求多項式的值時,首先計算最內層括弧內一次多項式的值,即
v[1]=a[n]x+a[n-1]
然後由內向外逐層計算一次多項式的值,即
v[2]=v[1]x+a[n-2]
v[3]=v[2]x+a[n-3]
......
v[n]=v[n-1]x+a[0]
這樣,求n次多項式f(x)的值就轉化為求n個一次多項式的值。
(註:中括弧里的數表示下標)
結論:對於一個n次多項式,至多做n次乘法和n次加法。
[編輯本段]意義
該演算法看似簡單,其最大的意義在於將求n次多項式的值轉化為求n個一次多項式的值。在人工計算時,利用秦九韶演算法和其中的系數表可以大幅簡化運算;對於計算機程序演算法而言,加法比乘法的計算效率要高很多,因此該演算法仍有極大的意義,用於減少CPU運算時間。
『貳』 秦九韶演算法
秦九韶演算法是中國南宋時期的數學家秦九韶提出的一種多項式簡化演算法。在西方被稱作霍納演算法(Horner algorithm或Horner scheme),是以英國數學家威廉·喬治·霍納命名的.
把一個n次多項式f(x)=a[n]x^n+a[n-1]x^(n-1)+......+a[1]x+a[0]改寫成如下形式:
f(x)=a[n]x^n+a[n-1]x^(n-1))+......+a[1]x+a[0]
=(a[n]x^(n-1)+a[n-1]x^(n-2)+......+a[1])x+a[0]
=((a[n]x^(n-2)+a[n-1]x^(n-3)+......+a[2])x+a[1])x+a[0]
=......
=(......((a[n]x+a[n-1])x+a[n-2])x+......+a[1])x+a[0].
求多項式的值時,首先計算最內層括弧內一次多項式的值,即
v[1]=a[n]x+a[n-1]
然後由內向外逐層計算一次多項式的值,即
v[2]=v[1]x+a[n-2]
v[3]=v[2]x+a[n-3]
......
v[n]=v[n-1]x+a[0]
這樣,求n次多項式f(x)的值就轉化為求n個一次多項式的值。
(註:中括弧里的數表示下標)
結論:對於一個n次多項式,至多做n次乘法和n次加法
A為多項式降冪排列的系數
function value=qinjiushao(A,x)
n=length(A);
F=zeros(n);
F(1)=A(1);
for i=1:n-1
F(i+1)=F(i)*x+A(i+1);
end
value=F(n)
disp('真值')
polyval(A,x)
『叄』 秦九韶演算法在matlab中的寫法
秦九韶演算法在matlab中的寫法如下:
A=100:-1:1;
x=1:0.01:1.1;
y=zeros(11);
for j=1:11
n=length(A);
F=zeros(n);
F(1)=A(1);
for i=1:n-1
F(i+1)=F(i)*x(j)+A(i+1);
end
y(j)=F(n);
end
plot(x,y);
秦九韶演算法是中國南宋時期的數學家秦九韶提出的一種多項式簡化演算法。
一般地,一元n次多項式的求值需要經過(n+1)*n/2次乘法和n次加法,而秦九韶演算法只需要n次乘法和n次加法。在人工計算時,一次大大簡化了運算過程。
秦九韶的數學巨柱《數書九章》
宋淳祜四至七年(公元1244至1247),秦九韶在湖州為母親守孝三年期間,把長期積累的數學知識和研究所得加以編輯,寫成了舉世聞名的數學巨著《數書九章》。
書成後,並未出版。原稿幾乎流失,書名也不確切。後歷經宋、元,到明建國,此書無人問津,直到明永樂年間,在解縉主編《永樂大典》時,記書名為《數學九章》。又經過一百多年,經王應麟抄錄後,由王修改為《數書九章》。
全書不但在數量上取勝,重要的是在質量上也是拔尖的。從歷史上來看,秦九韶的《數書九章》可與《九章算術》相媲美;從世界范圍來看,秦九韶的《數書九章》也不愧為世界數學名著。
『肆』 用C語言編程實現秦九韶
/*修改n,n代表f(x)為n次多項式*/
#define n 5/*暫且版設定為5*/
#include<stdio.h>
void main()
{
float a[n],x,sum;
int i;
printf("Please input the value of x=");
scanf("%f",&x);
for(i=n;i>=0;i--)
{
printf("Please input the value of a%d=",i);
scanf("%f",&a[i]);
}
sum=a[n];
for(i=n;i>=1;i--)
{
sum=sum*x+a[i-1];
}
printf("f(x)=%f\n",sum);
}
/*互相學習哈權*/
『伍』 用秦九韶演算法求n次多項式f(x)=anx^n+an-1x^n-1+……+a1x+a0,求f(x0)需要算乘方的次數
『陸』 如何在MATLAB中編寫秦九韶演算法程序
『柒』 這個C程序是寫秦九韶演算法的,為什麼結果總是非常大的錯誤值,幫忙看看 #include <stdio
從代碼看出你沒弄明白演算法是怎麼計算的,你在看看,我幫你改了下版
#include <stdio.h>
#include <stdlib.h>
void main()
{
權int n;
double x , sum=0;
int *p;
int i;
printf("請輸入x的值:");
scanf("%lf",&x);
printf("請輸入參數個數:");
scanf("%d",&n);
p = (int *)malloc(n * sizeof(int));//定義動態數組判斷創建是否成功
if(!p)
{
printf("內存創建失敗。");
exit(0);
}
printf("請輸入常數值:");
for(i=0;i<n;i++)//輸入數組
{
scanf("%d",(p+i));
}
printf("輸入常數為:");
for( i=0;i<n;i++){
printf("%d ",p[i]);
}
for(i=n-1;i>=0;i--)//計算值
{
sum=sum*x+p[i];
}
printf("算式的值為:%lf",sum);
}
運行結果如下:
『捌』 求 秦九韶演算法matlab程序
A是冪降多項式階列的特殊系數:函數值=qinjiushao(A,x)N=長度(A);F=0(n);F(1)=(1);對於I=1:n-1F(I+1)=F(I)*x+A(I+1)。
結束:值=F(n)Disp(「真理」)Polyval(A,x)。
演算法是用matlab編寫的,如下所示:
A=100:-1:1;X=1:0.01:1.1;Y=0(11);對於j=1:11n=長度(A);F=0(n)F(1)等於A(1)I=1:n-1F(I+1)=F(我)*x(j)+(I+1);Endy(j)=F(n);Endplot(x,y);
該演算法是南宋數學家秦九義提出的一種多項式簡化演算法。
一般情況下,一個變數n次多項式的求值需要(n+1)*n/2次乘法和n次加法,而QinJiuyi演算法只需要n次乘法和n次加法。在手工計算中,一次計算可以大大簡化計算過程。
(8)秦九韶演算法程序vb擴展閱讀:
宋朝(1244-1247)四七年間,秦整理了自己在湖州三年學習積累的數學知識和研究收入,撰寫了舉世聞名的數學巨著《七書》。和章。」
這本書出版後就沒有出版。這部手稿幾乎丟失了。標題不準確。宋、元、明以後,這本書就不再受重視了。直到明朝永樂年間,《永樂丹言》的主編才寫出了《九章算術》。100多年後,王應林將其改寫為《周易》的七章。
這本書不僅在數量上占優勢,而且在質量上也占優勢。從歷史上看,秦九義書中的七章可以與算術中的九章相比較。從世界范圍來看,秦九義的《九章全書》並不是世界著名的數學著作。
『玖』 求用秦九韶演算法求多項式的程序
秦九韶演算法
1.教學任務分析
(1)在學習中國古代數學中的演算法案例的同(2)時,進一步體會演算法的特點。(3)體會中國古代數學對世界數學發展的貢獻。
2. 重點與難點重點:理解秦九韶演算法的思想。難點:用循環結構表示演算法步驟。
3.教學情境設計 (1) 設計求多項式f(x)=2x5-5x4-4x3+3x2-6x+7當x=5時的值的演算法,並寫出程序。
學生提出一般的解決方案,如:
x=5 f=2 * x^5 – 5 * x^4 – 4 * x^3 + 3 * x^2 – 6 * x + 7
PRINT「f=」;fEND
教師點評:上述演算法一共做了解15次乘法運算,5次加法運算,優點是簡單,易懂。缺點是不通用,不能解決任意多項式的求值問題,而且計算效率不高。
(2)有沒有更高效的演算法?
師:計算x的冪時,可以利用前面的計算結果,以減少計算量,即先計算x2,然後依次計算x2.x,(x2.x).x, ((x2.x).x).x的值,這樣計算上述多項式的值,一共需要多少次乘法,多少次加法?
第二種做法與第一種做法相比,乘法的運算次數減少了,因而能提高運算效率,而且對於計算機來說,做一次乘法所需的運算時間比做一次加法要長得多,因此第二種做法更快地得到結果。
(3)能否探索更好的演算法,解決任意多項式的求值問題?
教師引導學生把多項式變形為:f(x)= 2x5-5x4-4x3+3x2-6x+7
=((((2x-5)x-4)x+3)x-6)x+7
並提問:從內到外,如果把每一個括弧都看成一個常數,那麼變形後的式子中有哪些「一次式」?x的系數依次是什麼?
(4)若將x的值代入變形後的式子中,那麼求值的計算過程是怎樣的?
師:計算的過程可以列表表示為:
多項式x系數
2
-5
-4
3
-6
7
運算
10
25
105
540
2670
+
變形後x的"系數"
2
5
21
108
534
2677
*5
最後的系數2677即為所求的值,讓學生描述上述計算過程
師:指出這種演算法就是「秦九韶演算法」,同時介紹秦九韶的生平。
(5)用秦九韶演算法求多項式的值,與多項式的組成有直接關系嗎?用秦九韶演算法計算上述多項式的值,需要多少次乘法運算和多少次加法運算?教師引導學生發現在求值的過程中,計算只與多項式的系數有關,讓學生統計所進行的乘法和加法運算的次數。(6) 秦九韶演算法適用一般的多項式f(x)=anxn+an-1xn-1+….+a1x+a0的求值問題嗎?
師:怎樣用秦九韶演算法求一般多項式f(x)= anxn+an-1xn-1+….+a1x+a0當x=x0時的值?
教師引導學生思考,把n次多項式的求值問題轉化成求n個一次多項式的值的問題,即求v1=anx+an-1
v2=v1x+an-2 v3=v2x+an-3 …….. vn=vn-1x+a0
的值的過程,共做了多少次乘法運算,多少次加法運算?
(7)怎樣用程序框圖表示秦九韶演算法
觀察秦九韶演算法的數學模型,計算vk時要用到vk-1的值,若令v0=an,我們可以得到下面的遞推公式:
v0=an vk=vk-1+an-k(k=1,2,…n)
這是一個在秦九韶演算法中反復執行的步驟,可以用循環結構來實現。
(8)小結:通過對秦九韶演算法的學習,你對演算法本身有哪些進一步的認識?
教師引導學生思考、討論、概括,小結時要關注如下幾點:(1)演算法具有通用的特點,可以解決一類問題;(2)解決同一類問題,可以有不同的演算法,但計算的效率是不同的,應該選擇高效的演算法;(3)演算法的種類雖多,但三種邏輯結構可以有效地表達各種演算法;等等。
(9)課後作業:習題1.3A組第2題。
『拾』 用C++實現秦九韶演算法~怎麼搞的~
干嗎用二重循環阿,根本沒有你寫的復雜阿?
看:
int P(int x,int n){
int a[5]={1,2,2,2,1};
int y=a[n];
for(int i=n;i>=1;--i){
y=y*x+a[i-1];
}
return y;
}
v(1) = a(n)x + a(n – 1)、v(2) = v(1)x + a(n – 2)、v(3) = v(2)x + a(n – 3)…回…v(n) = v(n – 1)x + a(0),
直接按公式寫,答很簡單 阿?