當前位置:首頁 » 操作系統 » 平方根倒數演算法

平方根倒數演算法

發布時間: 2022-08-09 00:57:11

1. C語言作業!!求助~~~

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int scan()
{
char s[100];
int i,t,z=0;
do
{
z=0;

gets(s);
for(i=0;s[i]!='\0';i++)
if(s[i]<'0' || s[i]>'9') break;
if(i>=strlen(s))
for(t=0;s[t]!='\0';t++)
z=z*10+((int)s[t]-48);
else
printf("您的輸入有誤,請重新輸入");
}
while(i<strlen(s));
return(z);
}

int x=1,y=1,choice=0,sum=0,right=0,z=0,answer;
float precent;
char fuhao;
void suiji()
{
srand(time(NULL));
x=rand()%100+1;
y=rand()%100+1;
}

void choose()
{
int yunsuan(int,int,int);
if(sum==0) precent=0.0;
else precent=(float)right/sum;
printf("\n如需進行加減乘除運算測試,請分別輸入1、2、3、4\n");
printf("如需退出請輸入5\n");
choice=scan();
switch(choice)
{
case 1:printf("歡迎來到加法運算測試系統,如需退出請輸入9999\n");fuhao='+';break;
case 2:printf("歡迎來到減法運算測試系統,如需退出請輸入9999\n");fuhao='-';break;
case 3:printf("歡迎來到乘法運算測試系統,如需退出請輸入9999\n");fuhao='*';break;
case 4:printf("歡迎來到除法運算測試系統,如需退出請輸入9999\n");fuhao='/';break;
case 5:printf("本次測試愉快,歡迎下次再來測試\n");
printf("本次共做%d道題,其中%d道正確,正確率為%f\n",sum,right,precent);
break;
default:printf("您的輸入有誤,請重新輸入\n");choose();
}
}

int ans(int x,int y,int choice)
{
switch(choice)
{
case 1:z=x+y;break;
case 2:z=x-y;break;
case 3:z=x*y;break;
case 4:z=x/y;break;
}
return(z);
}
void yunsuan()
{
suiji();
printf("%d%c%d=",x,fuhao,y);
z=ans(x,y,choice);
answer=scan();
if(z==answer)
{
printf("正確\n");
right++;sum++;
yunsuan();
}
else if(answer==9999) choose();
else
{
printf("不正確, 正確答案為%5d\n",z);
sum++;
yunsuan();
}
}
void main()
{
printf("歡迎來到四則運算測試系統\n");
choose();
while(choice!=5)
yunsuan();
}

2. 怎麼解平方根

一般方法

很類似除法, 以求200的開平方為例

1 4. 1 4 2…… {以小數點為界, 每隔2位寫一位得數, 注意加小數點}

√2`00. {以小數點為界, 每隔2位做一個標記(其實做不做沒所謂)}

1 1 {算出不大於最右一組數的開平方的最大整數,寫在標記左上方,

即 Int( sqrt(最右一組數) ), 並把這個整數的平方寫下1}

100 {計算它們的差, 在右邊添兩個零}

24 96 {將剛才求得的一位數乘以20(即1*20)然後, 算出不大於差的x(20+x),

的x的最大整數 4 }

400 {計算它們的差, 在右邊添兩個零}

281 281 {將求得的數乘以20(即14*20)然後, 算出不大於差的x(280+x),

的x的最大整數 1 }

11900 {計算它們的差, 在右邊添兩個零}

2824 11296 {同上, 算出不大於差的x(141*20+x),的x的最大整數 4}

60400

28282 56564

3826

……

級數展開

1. 由代數式的變換

Sqrt(x)=a/b * 1/Sqrt[1-(xb2-a2)/(xb2)]

而1/sqrt(1-y) = 1+(1/2)y+(1*3)/(2*4)y2+(1*3*5)/(2*4*6)y3+…

a/b是Sqrt(x)的近似值.

例如Sqrt(2)≈239/169 , a=239,b=169 ,得

Sqrt(2) = (239/169)*1/Sqrt(1-1/57122)

2. 開N (正整數 次方)(x是被開方數)(x)1/n=a/b * 1/[1-(xbn-an)/(xbn)]1/n

而1/(1-y)1/n = 1 + (1/n)y + (1*(n+1))/(n*2n)y2 + (1*(1+n)*(1+2n))/(n*2n*3n)y3+...



它的時間復雜度是 O(n2). 牛頓疊代法 (它是目前最快的演算法, ∴這是同時是最重要的方法)

先求出1/sqrt(A)的近似值並賦給X, 反復運算下式

hn=1-Axn2

xn+1=xn+xn*hn/2

直到得到想要的精度(每算一次上式, 可比前次多差不多一倍的精度)

{也可以用X←X+X[4(1-AX2)+3(1-AX2)2]/8, 算一次, 可比前次多差不多2倍的精度}

最後X←AX 就得到Sqrt(A)

反復算的過程有許多地方可以優化:

While X 0 do begin

Mul(X,X,Tmp);

Mul(Tmp,A,Tmp); {每次只取比X多一倍位數的A}

Tmp ← 1-Tmp; {for i=1 to size do tmp }

Mul(Tmp,X,Tmp);

Mul(Tmp,0.5,Tmp); {乘以0.5 比除以2快}

Add(X,Tmp,X); {X的前(size-1)部分幾乎不用考慮}

End;2.開N (正整數 次方)(A是被開方數)

X≈Exp(-Ln(A)/n); {X約等於A開N次方的倒數}

While X精度不夠do

X ← X+X(1-AXn)/n; {算一次, 可比前次多差不多一倍的精度}

X←A*Xn-1 {得到A開N次方}

3. 怎麼計算某數的平方根

如果一個數的開方是無理數. 直接就用:

如√20即簡寫,不必具體寫出該數.

平方根就是開二次方運算的值. 它的逆運算就是乘二次方.

//
// 計算參數x的平方根的倒數
//
float InvSqrt (float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i >> 1); // 計算第一個近似根
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x); // 牛頓迭代法
return x;
}
該演算法的本質其實就是牛頓迭代法(Newton-Raphson Method,簡稱NR),而NR的基礎則是泰勒級數(Taylor Series)。NR是一種求方程的近似根的方法。首先要估計一個與方程的根比較靠近的數值,然後根據公式推算下一個更加近似的數值,不斷重復直到可以獲得滿意的精度。其公式如下:

函數:y=f(x)

其一階導數為:y'=f'(x)

則方程:f(x)=0 的第n+1個近似根為

x[n+1] = x[n] - f(x[n]) / f'(x[n])
NR最關鍵的地方在於估計第一個近似根。如果該近似根與真根足夠靠近的話,那麼只需要少數幾次迭代,就可以得到滿意的解。

現在回過頭來看看如何利用牛頓法來解決我們的問題。求平方根的倒數,實際就是求方程1/(x^2)-a=0的解。將該方程按牛頓迭代法的公式展開為:

x[n+1]=1/2*x[n]*(3-a*x[n]*x[n])
將1/2放到括弧裡面,就得到了上面那個函數的倒數第二行。

接著,我們要設法估計第一個近似根。這也是上面的函數最神奇的地方。它通過某種方法算出了一個與真根非常接近的近似根,因此它只需要使用一次迭代過程就獲得了較滿意的解。它是怎樣做到的呢?所有的奧妙就在於這一行:

i = 0x5f3759df - (i >> 1); // 計算第一個近似根
超級莫名其妙的語句,不是嗎?但仔細想一下的話,還是可以理解的。我們知道,IEEE標准下,float類型的數據在32位系統上是這樣表示的(大體來說就是這樣,但省略了很多細節,有興趣可以GOOGLE):

bits:31 30 ... 0
31:符號位
30-23:共8位,保存指數(E)
22-0:共23位,保存尾數(M)
所以,32位的浮點數用十進制實數表示就是:M*2^E。開根然後倒數就是:M^(-1/2)*2^(-E/2)。現在就 十分清晰了。語句i>>1其工作就是將指數除以2,實現2^(E/2)的部分。而前面用一個常數減去它,目的就是得到M^(1/2)同時反轉所有指數的符號。

至於那個0x5f3759df,呃,我只能說,的確是一個超級的Magic Number。

那 個Magic Number是可以推導出來的,但我並不打算在這里討論,因為實在太繁瑣了。簡單來說,其原理如下:因為IEEE的浮點數中,尾數M省略了最前面的1,所以實際的尾數是1+M。如果你在大學上數學課沒有打瞌睡的話,那麼當你看到(1+M)^(-1/2)這樣的形式時,應該會馬上聯想的到它的泰勒級數展開, 而該展開式的第一項就是常數。下面給出簡單的推導過程:

對於實數R>0,假設其在IEEE的浮點表示中,
指數為E,尾數為M,則:

R^(-1/2)
= (1+M)^(-1/2) * 2^(-E/2)

將(1+M)^(-1/2)按泰勒級數展開,取第一項,得:

原式
= (1-M/2) * 2^(-E/2)
= 2^(-E/2) - (M/2) * 2^(-E/2)

如果不考慮指數的符號的話,
(M/2)*2^(E/2)正是(R>>1),
而在IEEE表示中,指數的符號只需簡單地加上一個偏移即可,
而式子的前半部分剛好是個常數,所以原式可以轉化為:

原式 = C - (M/2)*2^(E/2) = C - (R>>1),其中C為常數

所以只需要解方程:
R^(-1/2)
= (1+M)^(-1/2) * 2^(-E/2)
= C - (R>>1)
求出令到相對誤差最小的C值就可以了

上面的推導過程只是我個人的理解,並未得到證實。而Chris Lomont則在他的論文中詳細討論了最後那個方程的解法,並嘗試在實際的機器上尋找最佳的常數C。有興趣的朋友可以在文末找到他的論文的鏈接。

所以,所謂的Magic Number,並不是從N元宇宙的某個星系由於時空扭曲而掉到地球上的,而是幾百年前就有的數學理論。只要熟悉NR和泰勒級數,你我同樣有能力作出類似的優化。

在GameDev.net上有人做過測試,該函數的相對誤差約為0.177585%,速度比C標准庫的sqrt提高超過20%。如果增加一次迭代過程,相對誤差可以降低到e-004 的級數,但速度也會降到和sqrt差不多。據說在DOOM3中,Carmack通過查找表進一步優化了該演算法,精度近乎完美,而且速度也比原版提高了一截(正在努力弄源碼,誰有發我一份)。

值得注意的是,在Chris Lomont的演算中,理論上最優秀的常數(精度最高)是0x5f37642f,並且在實際測試中,如果只使用一次迭代的話,其效果也是最好的。但奇怪的是,經過兩次NR後,在該常數下解的精度將降低得非常厲害(天知道是怎麼回事!)。經過實際的測試,Chris Lomont認為,最優秀的常數是0x5f375a86。如果換成64位的double版本的話,演算法還是一樣的,而最優常數則為0x5fe6ec85e7de30da(又一個令人冒汗的Magic Number - -b)。

這個演算法依賴於浮點數的內部表示和位元組順序,所以是不具移植性的。如果放到Mac上跑就會掛掉。如果想具備可移植性,還是乖乖用sqrt好了。但演算法思想是通用的。大家可以嘗試推算一下相應的平方根演算法。

下面給出Carmack在QUAKE3中使用的平方根演算法。Carmack已經將QUAKE3的所有源代碼捐給開源了,所以大家可以放心使用,不用擔心會收到律師信。

//
// Carmack在QUAKE3中使用的計算平方根的函數
//
float CarmSqrt(float x){
union{
int intPart;
float floatPart;
} convertor;
union{
int intPart;
float floatPart;
} convertor2;
convertor.floatPart = x;
convertor2.floatPart = x;
convertor.intPart = 0x1FBCF800 + (convertor.intPart >> 1);
convertor2.intPart = 0x5f3759df - (convertor2.intPart >> 1);
return 0.5f*(convertor.floatPart + (x * convertor2.floatPart));
}
另一個基於同樣演算法的更高速度的sqrt實現如下。其只是簡單地將指數除以2,並沒有考慮尾數的方根。要看懂該代碼的話必 須知道,在IEEE浮點數的格式中,E是由實際的指數加127得到的。例如,如果實數是0.1234*2^10,在浮點表示中,E(第23-30位)的值其實為10+127=137。所以下面的代碼中,要處理127偏移,這就是常數0x3f800000的作用。我沒實際測試過該函數,所以對其優劣無從評 論,但估計其精度應該會降低很多。

float Faster_Sqrtf(float f)
{
float result;
_asm
{
mov eax, f
sub eax, 0x3f800000
sar eax, 1
add eax, 0x3f800000
mov result, eax
}
return result;
}
除了基於NR的方法外,其他常見的快速演算法還有多項式逼近。下面的函數取自《3D游戲編程大師技巧》,它使用一個多項式來近似替代原來的長度方程,但我搞不清楚作者使用的公式是怎麼推導出來的(如果你知道的話請告訴我,謝謝)。

//
// 這個函數計算從(0,0)到(x,y)的距離,相對誤差為3.5%
//
int FastDistance2D(int x, int y)
{
x = abs(x);
y = abs(y);
int mn = MIN(x,y);
return(x+y-(mn>>1)-(mn>>2)+(mn>>4));
}
//
// 該函數計算(0,0,0)到(x,y,z)的距離,相對誤差為8%
//
float FastDistance3D(float fx, float fy, float fz)
{
int temp;
int x,y,z;
// 確保所有的值為正
x = int(fabs(fx) * 1024);
y = int(fabs(fy) * 1024);
z = int(fabs(fz) * 1024);
// 排序
if (y < x) SWAP(x,y,temp)
if (z < y) SWAP(y,z,temp)
if (y < x) SWAP(x,y,temp)
int dist = (z + 11 * (y >> 5) + (x >> 2) );
return((float)(dist >> 10));
}
還有一種方法稱為Distance Estimates(距離評估?),如下圖所示:

紅線所描繪的正八邊形上的點為:

octagon(x,y) = min((1/√2) * (|x|+|y|), max(|x|,|y|))
求出向量v1和v2的長度,則:

√(x^2+y^2) = (|v1|+|v2|)/2 * octagon(x,y)
到目前為止我們都在討論浮點數的方根演算法,接下來輪到整數的方根演算法。也許有人認為對整型數據求方根無任何意義,因為會得 到類似99^(1/2)=9的結果。通常情況下確實是這樣,但當我們使用定點數的時候(定點數仍然被應用在很多系統上面,例如任天堂的GBA之類的手持設備),整數的方根演算法就顯得非常重要。對整數開平方的演算法如下。我並不打算在這討論它(事實是我也沒有仔細考究,因為在短期內都不會用到- -b),但你可以在文末James Ulery的論文中找到非常詳細的推導過程。

//
// 為了閱讀的需要,我在下面的宏定義中添加了換行符
//
#define step(shift)
if((0x40000000l >> shift) + sqrtVal <= val)
{
val -= (0x40000000l >> shift) + sqrtVal;
sqrtVal = (sqrtVal >> 1) | (0x40000000l >> shift);
}
else
{
sqrtVal = sqrtVal >> 1;
}
//
// 計算32位整數的平方根
//
int32 xxgluSqrtFx(int32 val)
{
// Note: This fast square root function
// only works with an even Q_FACTOR
int32 sqrtVal = 0;
step(0);
step(2);
step(4);
step(6);
step(8);
step(10);
step(12);
step(14);
step(16);
step(18);
step(20);
step(22);
step(24);
step(26);
step(28);
step(30);
if(sqrtVal < val)
{
++sqrtVal;
}
sqrtVal <<= (Q_FACTOR)/2;
return(sqrtVal);
}

4. 平方根問題

3的-2次方=1/9.理由:指數的運演算法則,負次方的演算法也就是3的平方的倒數.
同理3的-2次方開平方根也就是1/9的平方根,根號下1/9=1/3

5. 平方根是怎麼解的呀

一般方法

很類似除法, 以求200的開平方為例

1 4. 1 4 2…… {以小數點為界, 每隔2位寫一位得數, 注意加小數點}

√2`00. {以小數點為界, 每隔2位做一個標記(其實做不做沒所謂)}

1 1 {算出不大於最右一組數的開平方的最大整數,寫在標記左上方,

即 Int( sqrt(最右一組數) ), 並把這個整數的平方寫下1}

100 {計算它們的差, 在右邊添兩個零}

24 96 {將剛才求得的一位數乘以20(即1*20)然後, 算出不大於差的x(20+x),

的x的最大整數 4 }

400 {計算它們的差, 在右邊添兩個零}

281 281 {將求得的數乘以20(即14*20)然後, 算出不大於差的x(280+x),

的x的最大整數 1 }

11900 {計算它們的差, 在右邊添兩個零}

2824 11296 {同上, 算出不大於差的x(141*20+x),的x的最大整數 4}

60400

28282 56564

3826

……

級數展開

1. 由代數式的變換

Sqrt(x)=a/b * 1/Sqrt[1-(xb2-a2)/(xb2)]

而1/sqrt(1-y) = 1+(1/2)y+(1*3)/(2*4)y2+(1*3*5)/(2*4*6)y3+…

a/b是Sqrt(x)的近似值.

例如Sqrt(2)≈239/169 , a=239,b=169 ,得

Sqrt(2) = (239/169)*1/Sqrt(1-1/57122)

2. 開N (正整數 次方)(x是被開方數)(x)1/n=a/b * 1/[1-(xbn-an)/(xbn)]1/n

而1/(1-y)1/n = 1 + (1/n)y + (1*(n+1))/(n*2n)y2 + (1*(1+n)*(1+2n))/(n*2n*3n)y3+...



它的時間復雜度是 O(n2). 牛頓疊代法 (它是目前最快的演算法, ∴這是同時是最重要的方法)

先求出1/sqrt(A)的近似值並賦給X, 反復運算下式

hn=1-Axn2

xn+1=xn+xn*hn/2

直到得到想要的精度(每算一次上式, 可比前次多差不多一倍的精度)

{也可以用X←X+X[4(1-AX2)+3(1-AX2)2]/8, 算一次, 可比前次多差不多2倍的精度}

最後X←AX 就得到Sqrt(A)

反復算的過程有許多地方可以優化:

While X 0 do begin

Mul(X,X,Tmp);

Mul(Tmp,A,Tmp); {每次只取比X多一倍位數的A}

Tmp ← 1-Tmp; {for i=1 to size do tmp }

Mul(Tmp,X,Tmp);

Mul(Tmp,0.5,Tmp); {乘以0.5 比除以2快}

Add(X,Tmp,X); {X的前(size-1)部分幾乎不用考慮}

End;2.開N (正整數 次方)(A是被開方數)

X≈Exp(-Ln(A)/n); {X約等於A開N次方的倒數}

While X精度不夠do

X ← X+X(1-AXn)/n; {算一次, 可比前次多差不多一倍的精度}

X←A*Xn-1 {得到A開N次方}如果幫到您的話,可以好評嗎?謝謝了!!!(右上角採納)

6. 平方根的倒數怎麼算呀

解:通項:1/(√n) (其中n>0)
分子,分母同時乘以√n,即:
1/(√n) = (√n) /[(√n)*(√n)]=(√n)/n(即n分之根號下n的意思)

因此像平方根3的倒數就是√3/3 (3分之根號下3),不知你明白了沒?

7. 一個數的平方根倒數有什麼意義幾何意義物理意義與計算機編程 演算法 有關的問題 勿亂回答

參考維基網路
http://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%A0%B9%E5%80%92%E6%95%B0%E9%80%9F%E7%AE%97%E6%B3%95
這個演算法是用來對一個矢量歸一化的
例如v=(x, y, z)
對v歸一化為u則
u=v/sqrt(x^2+y^2+z^2)
其中的(x^2+y^2+z^2)很好求, 不妨設為X
但是f(X)=1/sqrt(X)則需要迭代求解.

8. 平方根的倒數怎麼算呀

解:通項:1/(√n) (其中n>0)
分子,分母同時乘以√n,即:
1/(√n) = (√n) /[(√n)*(√n)]=(√n)/n(即n分之根號下n的意思)

因此像平方根3的倒數就是√3/3 (3分之根號下3),不知你明白了沒?

是的。分子分子1也要乘根號3,
1乘根號3等於根號3。
1乘以任何數等於它本身。

9. 平方根倒數速演算法的演算法的切入點

浮點數的平方根倒數常用於計算正規化矢量。 3D圖形程序需要使用正規化矢量來實現光照和投影效果,因此每秒都需做上百萬次平方根倒數運算,而在處理坐標轉換與光源的專用硬體設備出現前,這些計算都由軟體完成,計算速度亦相當之慢;在1990年代這段代碼開發出來之時,多數浮點數操作的速度更是遠遠滯後於整數操作,因而針對正規化矢量演算法的優化就顯得尤為重要。下面陳述計算正規化矢量的原理:
要將一個矢量標准化,就必須計算其歐幾里得范數以求得矢量長度,而這時就需對矢量的各分量的平方和求平方根;而當求取到其長度並以之除該矢量的每個分量後,所得的新矢量就是與原矢量同向的單位矢量,若以公式表示: 可求得矢量v的歐幾里得范數,此演算法正類如對歐幾里得空間的兩點求取其歐幾里得距離, 而求得的就是標准化的矢量,若以代表,則有, 可見標准化矢量時需要用到對矢量分量的平方根倒數計算,所以對平方根倒數計算演算法的優化對計算正規化矢量也大有裨益。
為了加速圖像處理單元計算,《雷神之錘III競技場》使用了平方根倒數速演算法,而後來採用現場可編程邏輯門陣列的頂點著色器也應用了此演算法。

10. 20開更演算法公試演算法!

1..配方法(可解全部一元二次方程)
2.公式法(可解全部一元二次方程)
3.因式分解法(可解部分一元二次方程)(因式分解法又分「提公因式法」、「公式法(又分「平方差公式」和「完全平方公式」兩種)」和「十字相乘法」。
4.開方法(可解全部一元二次方程)一元二次方程的解法實在不行(你買個卡西歐的fx-500或991的計算器 有解方程的,不過要一般形式)
如何選擇最簡單的解法:
1、看是否可以直接開方解;
2、看是否能用因式分解法解(因式分解的解法中,先考慮提公因式法,再考慮公式法,最後考慮十字相乘法);
3、使用公式法求解;
4、除非題目要求,最後再考慮配方法(配方法雖然可以解全部一元二次方程,但是解題步驟太麻煩)。
一、知識要點:
一元二次方程和一元一次方程都是整式方程,它是初中數學的一個重點內容,也是今後學習數學的基礎,應引起同學們的重視。
一元二次方程的一般形式為:ax^2+bx+c=0, (a≠0),它是只含一個未知數,並且未知數的最高次數是2的整式方程。
解一元二次方程的基本思想方法是通過「降次」將它化為兩個一元一次方程。一元二次方程有四種解法:1、直接開平方法;2、配方法;3、公式法;4、因式分解法。
二、方法、例題精講:
1、直接開平方法:
直接開平方法就是用直接開平方求解一元二次方程的方法。用直接開平方法解形如(x-m)2=n (n≥0)的方程,其解為x=m±√n
例1.解方程(1)(3x+1)^2=7 (2)9x^2-24x+16=11
分析:(1)此方程顯然用直接開平方法好做,(2)方程左邊是完全平方式(3x-4)^2,右邊=11>0,所以此方程也可用直接開平方法解。
(1)解:(3x+1)^2=7
∴(3x+1)^2=7
∴3x+1=±√7(注意不要丟解)
∴x= ...
∴原方程的解為x1=...,x2= ...
(2)解: 9x^2-24x+16=11
∴(3x-4)^2=11
∴3x-4=±√11
∴x= ...
∴原方程的解為x1=...,x2= ...
2.配方法:用配方法解方程ax^2+bx+c=0 (a≠0)
先將固定數c移到方程右邊:ax^2+bx=-c
將二次項系數化為1:x^2+(b/a)x=-c/a
方程兩邊分別加上一次項系數的一半的平方:x^2+(b/a)x+0.5(b/a)^2=-c/a+0.5(b/a)^2
方程左邊成為一個完全平方式:[x+0.5(b/a)]^2=-c/a+0.5(b/a)^2
當b2-4ac≥0時,x+ =± √[-c/a+0.5(b/a)^2 ]-0.5(b/a)
∴x=...(這就是求根公式)
例2.用配方法解方程 3x^2-4x-2=0
解:將常數項移到方程右邊 3x^2-4x=2
將二次項系數化為1:x^2-x=
方程兩邊都加上一次項系數一半的平方:x^2-x+( )^2= +( )^2
配方:(x-)^2=
直接開平方得:x-=±
∴x=
∴原方程的解為x1=,x2= .
3.公式法:把一元二次方程化成ax^2+bx+c的一般形式,然後把各項系數a, b, c的值代入求根公式就可得到方程的根。
當b^2-4ac>0時,求根公式為x1=[-b+√(b^2-4ac)]/2a,x2=[-b-√(b^2-4ac)]/2a(兩個不相等的實數根)
當b^2-4ac=0時,求根公式為x1=x2=-b/2a(兩個相等的實數根)
當b^2-4ac<0時,求根公式為x1=[-b+√(4ac-b^2)i]/2a,x2=[-b-√(4ac-b^2)i]/2a(兩個共軛的虛數根)(初中理解為無實數根)
例3.用公式法解方程 2x^2-8x=-5
解:將方程化為一般形式:2x^2-8x+5=0
∴a=2, b=-8, c=5
b^2-4ac=(-8)2-4×2×5=64-40=24>0
∴x= = =
∴原方程的解為x1=,x2= .
4.因式分解法:把方程變形為一邊是零,把另一邊的二次三項式分解成兩個一次因式的積的形式,讓兩個一次因式分別等於零,得到兩個一元一次方程,解這兩個一元一次方程所得的根,就是原方程的兩個根。這種解一元二次方程的方法叫做因式分解法。
例4.用因式分解法解下列方程:
(1) (x+3)(x-6)=-8 (2) 2x^2+3x=0
(3) 6x^2+5x-50=0 (選學) (4)x^2-4x+4=0 (選學)
(1)解:(x+3)(x-6)=-8 化簡整理得
x^2-3x-10=0 (方程左邊為二次三項式,右邊為零)
(x-5)(x+2)=0 (方程左邊分解因式)
∴x-5=0或x+2=0 (轉化成兩個一元一次方程)
∴x1=5,x2=-2是原方程的解。
(2)解:2x^2+3x=0
x(2x+3)=0 (用提公因式法將方程左邊分解因式)
∴x=0或2x+3=0 (轉化成兩個一元一次方程)
∴x1=0,x2=-是原方程的解。
注意:有些同學做這種題目時容易丟掉x=0這個解,應記住一元二次方程有兩個解。
(3)解:6x2+5x-50=0
(2x-5)(3x+10)=0 (十字相乘分解因式時要特別注意符號不要出錯)
∴2x-5=0或3x+10=0
∴x1=, x2=- 是原方程的解。
(4)解:x^2-4x+4 =0 (∵4 可分解為2 ·2 ,∴此題可用因式分解法)
(x-2)(x-2 )=0
∴x1=2 ,x2=2是原方程的解。
小結:
一般解一元二次方程,最常用的方法還是因式分解法,在應用因式分解法時,一般要先將方程寫成一般形式,同時應使二次項系數化為正數。
直接開平方法是最基本的方法。
公式法和配方法是最重要的方法。公式法適用於任何一元二次方程(有人稱之為萬能法),在使用公式法時,一定要把原方程化成一般形式,以便確定系數,而且在用公式前應先計算判別式的值,以便判斷方程是否有解。
配方法是推導公式的工具,掌握公式法後就可以直接用公式法解一元二次方程了,所以一般不用配方法解一元二次方程。但是,配方法在學習其他數學知識時有廣泛的應用,是初中要求掌握的三種重要的數學方法之一,一定要掌握好。(三種重要的數學方法:換元法,配方法,待定系數法)。
例5.用適當的方法解下列方程。(選學)
(1)4(x+2)^2-9(x-3)^2=0 (2)x^2+2x-3=0
(3) x2-2 x=- (4)4x2-4mx-10x+m2+5m+6=0
分析:(1)首先應觀察題目有無特點,不要盲目地先做乘法運算。觀察後發現,方程左邊可用平方差公式分解因式,化成兩個一次因式的乘積。
(2)可用十字相乘法將方程左邊因式分解。
(3)化成一般形式後利用公式法解。
(4)把方程變形為 4x^2-2(2m+5)x+(m+2)(m+3)=0,然後可利用十字相乘法因式分解。
(1)解:4(x+2)^2-9(x-3)^2=0
[2(x+2)+3(x-3)][2(x+2)-3(x-3)]=0
(5x-5)(-x+13)=0
5x-5=0或-x+13=0
∴x1=1,x2=13
(2)解: x^2+2x-3=0
[x-(-3)](x-1)=0
x-(-3)=0或x-1=0
∴x1=-3,x2=1
(3)解:x^2-2 x=-
x^2-2 x+ =0 (先化成一般形式)
△=(-2 )^2-4 ×=12-8=4>0
∴x=
∴x1=,x2=
(4)解:4x^2-4mx-10x+m^2+5m+6=0
4x^2-2(2m+5)x+(m+2)(m+3)=0
[2x-(m+2)][2x-(m+3)]=0
2x-(m+2)=0或2x-(m+3)=0
∴x1= ,x2=
例6.求方程3(x+1)^2+5(x+1)(x-4)+2(x-4)^2=0的二根。 (選學)
分析:此方程如果先做乘方,乘法,合並同類項化成一般形式後再做將會比較繁瑣,仔細觀察題目,我們發現如果把x+1和x-4分別看作一個整體,則方程左邊可用十字相乘法分解因式(實際上是運用換元的方法)
解:[3(x+1)+2(x-4)][(x+1)+(x-4)]=0
即 (5x-5)(2x-3)=0
∴5(x-1)(2x-3)=0
(x-1)(2x-3)=0
∴x-1=0或2x-3=0
∴x1=1,x2=是原方程的解。
例7.用配方法解關於x的一元二次方程x^2+px+q=0
解:x^2+px+q=0可變形為
x^2+px=-q (常數項移到方程右邊)
x^2+px+( )2=-q+( )2 (方程兩邊都加上一次項系數一半的平方)
(x+)2= (配方)
當p^2-4q≥0時,≥0(必須對p^2-4q進行分類討論)
∴x=- ±=
∴x1= ,x2=
當p^2-4q<0時,<0此時原方程無實根。
說明:本題是含有字母系數的方程,題目中對p, q沒有附加條件,因此在解題過程中應隨時注意對字母取值的要求,必要時進行分類討論。
練習:
(一)用適當的方法解下列方程:
1. 6x^2-x-2=0 2. (x+5)(x-5)=3
3. x^2-x=0 4. x^2-4x+4=0
5. 3x2+1=2x 6. (2x+3)2+5(2x+3)-6=0
(二)解下列關於x的方程
1.x^2-ax+-b2=0 2. x^2-( + )ax+ a2=0
練習參考答案:
(一)1.x1=-1/2 ,x2=2/3 2.x1=2,x2=-2
3.x1=0,x2= 4.x1=x2=2 5.x1=x2=
6.解:(把2x+3看作一個整體,將方程左邊分解因式)
[(2x+3)+6][(2x+3)-1]=0
即 (2x+9)(2x+2)=0
∴2x+9=0或2x+2=0
∴x1=-,x2=-1是原方程的解。
(二)1.解:x^2-ax+( +b)( -b)=0 2、解:x^2-(+ )ax+ a· a=0
[x-( +b)] [x-( -b)]=0 (x- a)(x-a)=0
∴x-( +b)=0或x-( -b) =0 x- a=0或x-a=0
∴x1= +b,x2= -b是 ∴x1= a,x2=a是
原方程的解。 原方程的解。
測試(有答案在下面)
選擇題
1.方程x(x-5)=5(x-5)的根是( )
A、x=5 B、x=-5 C、x1=x2=5 D、x1=x2=-5
2.多項式a2+4a-10的值等於11,則a的值為( )。
A、3或7 B、-3或7 C、3或-7 D、-3或-7
3.若一元二次方程ax^2+bx+c=0中的二次項系數,一次項系數和常數項之和等於零,那麼方程必有一個根是( )。
A、0 B、1 C、-1 D、±1
4. 一元二次方程ax^2+bx+c=0有一個根是零的條件為( )。
A、b≠0且c=0 B、b=0且c≠0
C、b=0且c=0 D、c=0
5. 方程x^2-3x=10的兩個根是( )。
A、-2,5 B、2,-5 C、2,5 D、-2,-5
6. 方程x^2-3x+3=0的解是( )。
A、 B、 C、 D、無實根
7. 方程2x^2-0.15=0的解是( )。
A、x= B、x=-
C、x1=0.27, x2=-0.27 D、x1=, x2=-
8. 方程x^2-x-4=0左邊配成一個完全平方式後,所得的方程是( )。
A、(x-)2= B、(x- )2=-
C、(x- )2= D、以上答案都不對
9. 已知一元二次方程x^2-2x-m=0,用配方法解該方程配方後的方程是( )。
A、(x-1)^2=m2+1 B、(x-1)^2=m-1 C、(x-1)^2=1-m D、(x-1)^2=m+1
答案與解析
答案:1.C 2.C 3.B 4.D 5.A 6.D 7.D 8.C 9.D
解析:
1.分析:移項得:(x-5)^2=0,則x1=x2=5,
注意:方程兩邊不要輕易除以一個整式,另外一元二次方程有實數根,一定是兩個。
2.分析:依題意得:a^2+4a-10=11, 解得 a=3或a=-7.
3.分析:依題意:有a+b+c=0, 方程左側為a+b+c, 且具僅有x=1時, ax^2+bx+c=a+b+c,意味著當x=1時,方程成立,則必有根為x=1。
4.分析:一元二次方程 ax^2+bx+c=0若有一個根為零,則ax^2+bx+c必存在因式x,則有且僅有c=0時,存在公因式x,所以 c=0.另外,還可以將x=0代入,得c=0,更簡單!
5.分析:原方程變為 x^2-3x-10=0,
則(x-5)(x+2)=0
x-5=0 或x+2=0
x1=5, x2=-2.
6.分析:Δ=9-4×3=-3<0,則原方程無實根。
7.分析:2x2=0.15
x2=
x=±
注意根式的化簡,並注意直接開平方時,不要丟根。
8.分析:兩邊乘以3得:x^2-3x-12=0,然後按照一次項系數配方,x^2-3x+(-)2=12+(- )^2,
整理為:(x-)2=
方程可以利用等式性質變形,並且 x^2-bx配方時,配方項為一次項系數-b的一半的平方。
9.分析:x^2-2x=m, 則 x^2-2x+1=m+1
則(x-1)^2=m+1.
中考解析
考題評析
1.(甘肅省)方程的根是( )
(A) (B) (C) 或 (D) 或
評析:因一元二次方程有兩個根,所以用排除法,排除A、B選項,再用驗證法在C、D選項中選出正確選項。也可以用因式分解的方法解此方程求出結果對照選項也可以。選項A、B是只考慮了一方面忘記了一元
二次方程是兩個根,所以是錯誤的,而選項D中x=-1,不能使方程左右相等,所以也是錯誤的。正確選項為C。
另外常有同學在方程的兩邊同時除以一個整式,使得方程丟根,這種錯誤要避免。
2.(吉林省)一元二次方程的根是__________。
評析:思路,根據方程的特點運用因式分解法,或公式法求解即可。
3.(遼寧省)方程的根為( )
(A)0 (B)–1 (C)0,–1 (D)0,1
評析:思路:因方程為一元二次方程,所以有兩個實根,用排除法和驗證法可選出正確選項為C,而A、B兩選項只有一個根。D選項一個數不是方程的根。另外可以用直接求方程根的方法。
4.(河南省)已知x的二次方程的一個根是–2,那麼k=__________。
評析:k=4.將x=-2代入到原方程中去,構造成關於k的一元二次方程,然後求解。
5.(西安市)用直接開平方法解方程(x-3)2=8得方程的根為( )
(A)x=3+2 (B)x=3-2
(C)x1=3+2 ,x2=3-2 (D)x1=3+2,x2=3-2
評析:用解方程的方法直接求解即可,也可不計算,利用一元二次方程有解,則必有兩解及8的平方根,即可選出答案。
課外拓展
一元二次方程
一元二次方程(quadratic equation of one variable)是指含有一個未知數且未知數的最高次項是二次的整式方程。 一般形式為ax^2+bx+c=0, (a≠0)
在公元前兩千年左右,一元二次方程及其解法已出現於古巴比倫人的泥板文書中:求出一個數使它與它的倒數之和等於 一個已給數,即求出這樣的x與,使
x=1, x+ =b,
x^2-bx+1=0,
他們做出( )2;再做出 ,然後得出解答:+ 及 - 。可見巴比倫人已知道一元二次方程的求根公式。但他們當時並不接受 負數,所以負根是略而不提的。
埃及的紙草文書中也涉及到最簡單的二次方程,例如:ax^2=b。
在公元前4、5世紀時,我國已掌握了一元二次方程的求根公式。
希臘的丟番圖(246-330)卻只取二次方程的一個正根,即使遇到兩個都是正根的情況,他亦只取其中之一。
公元628年,從印度的婆羅摩笈多寫成的《婆羅摩修正體系》中,得到二次方程x^2+px+q=0的一個求根公式。
在阿拉伯阿爾.花拉子米的《代數學》中討論到方程的解法,解出了一次、二次方程,其中涉及到六種不同的形式,令 a、b、c為正數,如ax^2=bx、ax^2=c、 ax^2+c=bx、ax^2+bx=c、ax^2=bx+c 等。把二次方程分成不同形式作討論,是依照丟番圖的做法。阿爾.花拉子米除了給出二次方程的幾種特殊解法外,還第一次給出二次方程的一般解法,承認方程有兩個根,並有無理根存在,但卻未有虛根的認識。十六世紀義大利的數學家們為了解三次方程而開始應用復數根。
韋達(1540-1603)除已知一元方程在復數范圍內恆有解外,還給出根與系數的關系。
我國《九章算術.勾股》章中的第二十題是通過求相當於 x^2+34x-71000=0的正根而解決的。我國數學家還在方程的研究中應用了內插法。
[編輯本段]判別方法
一元二次方程的判斷式:
b^2-4ac>0 方程有兩個不相等的實數根.
b^2-4ac=0 方程有兩個相等的實數根.
b^2-4ac<0 方程有兩個共軛的虛數根(初中可理解為無實數根).
上述由左邊可推出右邊,反過來也可由右邊推出左邊.
[編輯本段]列一元二次方程解題的步驟
(1)分析題意,找到題中未知數和題給條件的相等關系;
(2)設未知數,並用所設的未知數的代數式表示其餘的未知數;
(3)找出相等關系,並用它列出方程;
(4)解方程求出題中未知數的值;
(5)檢驗所求的答案是否符合題意,並做答

熱點內容
寬頻通連接用戶名和密碼是什麼 發布:2022-09-23 21:56:25 瀏覽:684
如何維修拉桿箱密碼鎖 發布:2022-09-23 21:54:05 瀏覽:233
s7400存儲卡 發布:2022-09-23 21:52:58 瀏覽:493
挖礦什麼配置性價比高 發布:2022-09-23 21:52:43 瀏覽:162
網狐內核源碼 發布:2022-09-23 21:50:23 瀏覽:35
深夜客廳ftp 發布:2022-09-23 21:49:35 瀏覽:357
海康威視攝像頭ftp伺服器 發布:2022-09-23 21:48:00 瀏覽:77
csql操作類 發布:2022-09-23 21:47:10 瀏覽:970
isulad交叉編譯 發布:2022-09-23 21:46:50 瀏覽:928
我的世界伺服器為什麼不顯示插件 發布:2022-09-23 21:44:41 瀏覽:898