lzth.net
当前位置:首页 >> C++ 迭代法求根号 >>

C++ 迭代法求根号

while那里是大于而不是小于; #include#include#includeusing namespace std;int main(void){ double a,x0,x1; couta; while (a

#include #include using namespace std; int main() { float a,x,y; cout 1e-5); //少了括号 cout

#include #include using namespace std; int main() { float a,x,y; cout 1e-5); //少了括号 cout

x0=a/2; 是不对的。会造成数据出错(1/2会等于0的)。应该改为: x0=(float)a/2; 或x0=a/2.0; 下面的 x1=(x0+a/x0)/2; 则不需要转。因为a/x0时,因为x0是double,系统会自动将a转为double的。

例如:#include "iostream.h"#include "math.h"void main(){int a;double x0,x1;for(a=1;a1E-5){x0=x1;x1=2*x0/3+a/(3*x0*x0);}if(x1==pow(a,1/3))cout

for(int i=0;;i++){newx=a/x;if(fabs(newx-x)

第一个办法比较简单,就是利用一元三次方程的求根公式,具体算法请参看关于一元三次方程的卡尔丹方法; 第二个办法是利用高斯-塞德尔迭代法把方程变形为: x=(63x³-114x²+42)/95 把初始迭代值(即-1.0, 0.4和1.2三值)分别代入上述...

a/2是在迭代法中自定义的x0的初值。 用牛顿迭代法解方程,理论上初值可以是任意值。但是如果初值选得好,收敛得就快。当然程序所需要的内存更低,费时更少了。 这条方程转换过来就是a=Xn(2Xn+1-Xn),求的就是a的平方根,无限迭代求近似值。 这样...

比较浮点数是否相等时,考虑有舍入误差,一般不用a==b 而是abs(a-b)

#include #include #include const int N=200; //带入原函数后所得的值 double f(float x) { return (x*x*x-1.8*x*x+0.15*x+0.65); } //带入一阶导函数后所得的值 double f1(double x) { return (3*x*x-3.6*x+0.15); } //牛顿迭代函数 double F(...

网站首页 | 网站地图
All rights reserved Powered by www.lzth.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com