10个重要的算法C语言实现源代码(其4和5---龙贝格和牛顿迭代)

4.龙贝格求积公式,求解定积分
#include < stdio.h > #include < math.h >
#define f(x) (sin(x)
/ x)
#define N
20
#define MAX
20      
#define a
2
#define b
4
#define e
0.00001      
float LBG( float p, float q, int n)
{
int i;
float sum = 0 ,h = (q - p) / n;
for (i = 1 ;i < n;i ++ )
sum
+= f(p + i * h);
sum
+= (f(p) + f(q)) / 2 ;
return (h * sum);
}
void main()
{
int i;
  
int n = N,m = 0 ;
  
float T[MAX + 1 ][ 2 ];
   T[
0 ][ 1 ] = LBG(a,b,n);
   n
*= 2 ;
  
for (m = 1 ;m < MAX;m ++ )
   {
for (i = 0 ;i < m;i ++ )
      T[i][
0 ] = T[i][ 1 ];
     T[
0 ][ 1 ] = LBG(a,b,n);
     n
*= 2 ;
    
for (i = 1 ;i <= m;i ++ )
     T[i][
1 ] = T[i - 1 ][ 1 ] + (T[i - 1 ][ 1 ] - T[i - 1 ][ 0 ]) / (pow( 2 , 2 * m) - 1 );
    
if ((T[m - 1 ][ 1 ] < T[m][ 1 ] + e) && (T[m - 1 ][ 1 ] > T[m][ 1 ] - e))
     { printf(
" Answer=%f/n " ,T[m][ 1 ]); getch();
     
return ;
     }
   }
}
 
 

5.牛顿迭代公式,求方程的近似解

#include<stdio.h>
#include<math.h>
#include
<conio.h>
#define N
100
#define PS 1e
-5
#define TA 1e
-5
float Newton(float (*f)(float),float(*f1)(float),float x0 )
{
float x1,d=0;
int k=0;
do
{ x1
= x0-f(x0)/f1(x0);
   
if((k++>N)||(fabs(f1(x1))<PS))
    { printf(
"/nFailed!");
      getch();
      exit();
    }
    d
=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
    x0
=x1;
    printf(
"x(%d)=%f/n",k,x0);
}
while((fabs(d))>PS&&fabs(f(x1))>TA) ;
return x1;
}
float f(float x)
{
return x*x*x+x*x-3*x-3; }
float f1(float x)
{
return 3.0*x*x+2*x-3; }
void main()
{
float f(float);
float f1(float);
float x0,y0;
printf(
"Input x0: ");
scanf(
"%f",&x0);
printf(
"x(0)=%f/n",x0);
y0
=Newton(f,f1,x0);
printf(
"/nThe root is x=%f/n",y0);
getch();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牛顿-科斯特公式和龙贝格算法是数值积分的经典算法。在 MATLAB 中,可以使用`integral`函数进行数值积分计算,该函数支持多种数值积分算法,包括牛顿-科斯特公式和龙贝格算法。 下面分别介绍使用`integral`函数实现牛顿-科斯特公式和龙贝格算法计算定积分的方法。 1. 牛顿-科斯特公式 牛顿-科斯特公式是用多项式插值的方法进行数值积分的一种算法。在 MATLAB 中,可以使用`integral`函数的`'Newton-Cotes'`选项来实现牛顿-科斯特公式计算定积分。 例如,计算$f(x)=x^2$在区间$[0,1]$上的定积分,可以使用如下代码: ```matlab f = @(x) x.^2; a = 0; b = 1; I = integral(f,a,b,'Method','Newton-Cotes'); ``` 其中,`f`是被积函数,`a`和`b`是积分区间的上下限,`'Method'`选项设置为`'Newton-Cotes'`表示使用牛顿-科斯特公式计算积分。计算结果保存在变量`I`中。 2. 龙贝格算法 龙贝格算法是递归地使用梯形公式和辛普森公式进行数值积分的一种算法。在 MATLAB 中,可以使用`integral`函数的`'Romberg'`选项来实现龙贝格算法计算定积分。 例如,计算$f(x)=x^2$在区间$[0,1]$上的定积分,可以使用如下代码: ```matlab f = @(x) x.^2; a = 0; b = 1; I = integral(f,a,b,'Method','Romberg'); ``` 其中,`f`是被积函数,`a`和`b`是积分区间的上下限,`'Method'`选项设置为`'Romberg'`表示使用龙贝格算法计算积分。计算结果保存在变量`I`中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值