当前位置:首页 » 操作系统 » 平方根倒数算法

平方根倒数算法

发布时间: 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)检验所求的答案是否符合题意,并做答

热点内容
keil编译步骤 发布:2024-05-19 08:58:12 浏览:701
ipad有哪些好用的c语言编译器 发布:2024-05-19 08:41:56 浏览:766
征途手游版脚本 发布:2024-05-19 08:38:11 浏览:164
安卓咪咕音乐怎么录制视频 发布:2024-05-19 07:56:06 浏览:838
如何搞出超大声的听声辨位安卓版 发布:2024-05-19 07:46:21 浏览:927
linux安全模式 发布:2024-05-19 07:27:25 浏览:176
为什么安卓手机安装不了cpk 发布:2024-05-19 07:22:21 浏览:313
pythonempty 发布:2024-05-19 07:15:16 浏览:930
路由器虚拟服务器搭建 发布:2024-05-19 07:15:15 浏览:999
方舟编译器何时推送 发布:2024-05-19 07:15:10 浏览:599