造价通

反馈
取消

热门搜词

造价通

取消 发送 反馈意见

牛顿迭代法C语言代码

2022/07/16246 作者:佚名
导读:#include #include doublefunc(doublex)//举例函数 { returnx*x*x*x-3*x*x*x 1.5*x*x-4.0; } doublefunc1(doublex)//导函数 { return4*x*x*x-9*x*x 3*x; } intNewton(double*x,doubleprecision,intmaxcyc)//maxcyc迭代

#include
 
  
#include
  
    doublefunc(doublex)//举例函数 { returnx*x*x*x-3*x*x*x 1.5*x*x-4.0; } doublefunc1(doublex)//导函数 { return4*x*x*x-9*x*x 3*x; } intNewton(double*x,doubleprecision,intmaxcyc)//maxcyc迭代次数 { doublex1,x0; intk; x0=*x; for(k=0;k
    
    

牛顿迭代法C 代码

//此函数是用来求一元3次方程ax^3 bx^2 cx d=0的解
//比如x^3-27=0,我们就可以输入100-27,这样我们就可以得到一个解
#include
     
      
#include
      
        usingnamespacestd; intmain() { doublediedai(doublea,doubleb,doublec,doubled,doublex); doublea,b,c,d; doublex=10000.0; cout<<"请依次输入方程四个系数:"; cin>>a>>b>>c>>d; x=diedai(a,b,c,d,x); cout<
       
        0.000001) { x=x-(a*x*x*x b*x*x c*x d)/(3*a*x*x 2*b*x c); } returnx; } 
       
      
     

求一元3次方程3个解的程序:

#include
     
      
#include
      
        usingnamespacestd;vector
       
        v;//stlvector链型数组 vector
        
         ::iteratorit;//vector迭代器intx0=5;doublea,b,c,d;doubleabs(doubley){while(y<0)y=-y;returny;}doublef(doublex){returna*x*x*x b*x*x c*x d;}doublefd(doublex){return3*a*x*x 2*b*x c;}boolu;//用来判断是否重复voidnewton(inta1,intb1,intc1,intd1) { for(x0=-5000;x0<=5000;x0 )//在一个大区域中逐个点用牛顿法,可找出大多数3次方程所有根 { doublex1=x0; while(abs(f(x1))>0.001) { doublex=x1; x1=x-f(x)/fd(x); } for(it=v.begin();it!=v.end();it ) { if(abs((*it-x1))<0.01){u=1;break;} } if(u!=1&&x1<1000000000) { cout<
         
          >a>>b>>c>>d; newton(a,b,c,d); }
         
        
       
      
     

牛顿迭代法Python代码

Python代码以实例展示求解方程

的根。
deff(x):
return(x-3)**3'''定义f(x)=(x-3)^3'''deffd(x):
return3*((x-3)**2)'''定义f'(x)=3*((x-3)^2)'''defnewtonMethod(n,assum):
time=n
x=assum
Next=0
A=f(x)
B=fd(x)
print('A=' str(A) ',B=' str(B) ',time=' str(time))
iff(x)==0.0:
returntime,x
else:
Next=x-A/B
print('Nextx=' str(Next))
ifabs(A-f(Next))<1e-6:
print('Meetf(x)=0,x=' str(Next))'''设置迭代跳出条件,同时输出满足f(x)=0的x值'''
else:
returnnewtonMethod(n 1,Next)newtonMethod(0,4.0)'''设置从0开始计数,x0=4.0'''

牛顿迭代法Java代码

Java实现开平方的牛顿迭代法. 求

的算术平方根就是求
的正根, 得迭代公式:
. 代码中取初始值
, 误差控制在
.
publicstaticdoublesqrt(doublec){if(c<0){returnDouble.NaN;
}

doublee=1e-15;
doublex=c;
doubley=(x c/x)/2;
while(Math.abs(x-y)>e){
x=y;
y=(x c/x)/2;
}
returnx;
}

牛顿迭代法JavaScript代码

/**
*@functionnewtonMethod该函数是牛顿迭代法的js实现他可以用于求任意一元高次方程的解。(简单版)
*@paramfn要求根的函数
*@paramdfn要求根的函数的导函数
*@paramx0在函数x定义域上任意取的一个x值x0
*@paramn期望迭代的次数
*@return该方程的近似解
**/functionnewtonMethod(fn,dfn,x0,n){
consty=fn(x0)//在函数有效区间内选取任意x0求出点(x0,y)其中y=fn(x0)
constk=dfn(x0)//使用导函数求出过点(x0,y)的切线斜率k
constb=y-k*x0//将点(x0,y)代入直线方程y=kx b求出常数b。
constx=(0-b)/k//将y=0代入直线方程y=kx b求出该方程的一次近似解x
if(--n>0){
returnnewtonMethod(fn,dfn,x,n)//当n趋于无穷大时得到该方程的精确解
}
returnx
}//化简函数(simplify)functionNTMethod(fn=_=>_,dfn=_=>1,x0=0,n=1){
constx=x0-fn(x0)/dfn(x0)
if(n===1){
returnx//返回一个关于函数fn(x)的近似解
}
returnNTMethod(fn,dfn,x,--n)
}// 优化函数表达方式 用户差参数代替迭代次数function NTMethod(fn = _ => _, dfn = _ => 1, x0 = 0, instrumentalError) {
    const x = x0 - fn(x0) / dfn(x0)
    if (fn(x) < instrumentalError && fn(x) > -instrumentalError) {
        return x
    }
    return NTMethod(fn, dfn, x, instrumentalError)
}

牛顿迭代法Fortran代码

program newton

implicit none
real::a
real::b
real::fb
real::counter
integer::n
!real,parameter::zero=0.00001
real::fx,fx1
real::df
write(*,*)"enter a number:"
read(*,*)a
do counter=1,a-1
fx=sin(counter)
fx1=sin(counter 1)
if (fx*fx1
df=cos(counter)
fx=sin(counter)
write(*,*)"初始值取:"
write(*,*)counter
do n=1,25,1
b=counter-fx/df
fb=sin(b)
end do
write(*,*)"数值解:"
write(*,*)b
end if
end do
stop
end program

牛顿迭代法其他迭代算法

牛顿迭代法欧几里德算法

最经典的迭代算法是欧几里德算法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:

定理:gcd(a,b) = gcd(b,a mod b)

证明:a可以表示成a = kb r,则r = a mod b。假设d是a,b的一个公约数,则有 a%d==0,b%d==0,而r = a - kb,因此r%d==0 ,因此d是(b,a mod b)的公约数

同理,假设d 是(b,a mod b)的公约数,则 b%d==0,r%d==0 ,但是a = kb r ,因此d也是(a,b)的公约数。

因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

欧几里德算法就是根据这个原理来做的,欧几里德算法又叫辗转相除法,它是一个反复迭代执行,直到余数等于0停止的步骤,这实际上是一个循环结构。其算法用C语言描述为:

intGcd_2(inta,intb)/*欧几里德算法求a,b的最大公约数*/
{
if(a<=0||b<=0)/*预防错误*/
return0;
inttemp;
while(b>0)/*b总是表示较小的那个数,若不是则交换a,b的值*/
{
temp=a%b;/*迭代关系式*/
a=b;
b=temp;
}
returna;
}

从上面的程序我们可以看到a,b是迭代变量,迭代关系是temp = a % b;根据迭代关系我们可以由旧值推出新值,然后循环执a = b; b = temp;直到迭代过程结束(余数为0)。在这里a好比那个胆小鬼,总是从b手中接过位置,而b则是那个努力向前冲的先锋。

牛顿迭代法斐波那契数列

还有一个很典型的例子是斐波那契(Fibonacci)数列。斐波那契数列为:0、1、1、2、3、5、8、13、21、…,即 fib⑴=0; fib⑵=1;fib(n)=fib(n-1) fib(n-2) (当n>2时)。

在n>2时,fib(n)总可以由fib(n-1)和fib(n-2)得到,由旧值递推出新值,这是一个典型的迭代关系,所以我们可以考虑迭代算法。

intFib(intn)//斐波那契(Fibonacci)数列
{
if(n<1)/*预防错误*/
return0;
if(n==1||n==2)/*特殊值,无需迭代*/
return1;
intf1=1,f2=1,fn;/*迭代变量*/
inti;
for(i=3;i<=n;  i)/*用i的值来限制迭代的次数*/
{
fn=f1 f2;/*迭代关系式*/
f1=f2;//f1和f2迭代前进,其中f2在f1的前面
f2=fn;
}
returnfn;
}

*文章为作者独立观点,不代表造价通立场,除来源是“造价通”外。
关注微信公众号造价通(zjtcn_Largedata),获取建设行业第一手资讯

热门推荐

相关阅读