用C语言验算二重积分

众所周知二重积分可以用分割成小块块的方法计算,这里就是直接用这个

#include <stdio.h>
#include <math.h>
#define pi 3.141592658

long double func(long double x,long double y)
{
 long double z;          
 z = (x+y)-x*x-y*y;   //方程,可以随便修改
 /*******************
 DLC 绝对值型,如果需要绝对值就用下面的
  if(z < 0)
 {
  z = -z;
 }
 ********************/
 return z;
}

int main()
{
 unsigned long long N = 0;    //强烈建议把N取小一点 , 十亿实在算的太慢了
    unsigned long long i,j;
 long double x,y;
 unsigned long long n = 0;
 long double V = 0;
 /*******************************
 如果是矩形邻域,对N取个值,把x,y区间输进去a,b,c,d即可
 long double V; 
 long double a , b , c , d;  
 scanf("%Lf %Lf %Lf %Lf" , &a , &b , &c , &d);   
 for (j = 0 ; j <= N ; j++)   
 {   
 for (i = 0 ; i <= N ; i++)     
 {        
 V += ((b - a) * (d - c) / (N * N)) * function((a + ((b - a) / N) * i) , (c + ((d - c) / N) * j));    
 }  
 }   
 printf("%lf\n" , V);    
 return 0;
 ********************************/
 printf("请给出N分块的数量,将把x-y平面拆分成N×N个小块\n");           //下面给出非规则区域
 scanf("%ull",&N);
 for(i = 0;i < N;i++)
 {
  for(j = 0;j < N;j++)
  {
   x = (2.0/((long double)N))*i-1.0;
   y = (2.0/((long double)N))*j-1.0;
   if(x*x+y*y <= 1)                              //满足区域条件,这里是圆
   {
    n++;                                      //计算出分块数
   }
  }
 }
 for(i = 0;i<N;i++)
 {
  for(j = 0;j<N;j++)
  {
   x = (2.0/((long double)N))*i-1.0;       //这是x分割坐标
   y = (2.0/((long double)N))*j-1.0;       //这是y分割坐标
   if(x*x+y*y <= 1)                        //满足区域条件
   {
    V += (pi/n)*func(x,y);     //V+= S/分块个数(必须满足在区域内)*z;
   }
  }
 }
 printf("%lf\n" , V); 
}

建议不要给N太大,会爆炸

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值