当前位置:首页 » 编程语言 » c语言二重积分
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言二重积分

发布时间: 2022-01-21 22:01:14

‘壹’ 用c语言实现辛普森法二重积分~!谢了 !

分函数
a,b 积分下上限,eps 精度。

#include<stdlib.h>
#include <math.h>

double fsimpf(double x)
{
return sin(x) ;
}

double fsimp(double a,double b,double eps)
{
int n,k;
double h,t1,t2,s1,s2,ep,p,x;
n=1; h=b-a;
t1=h*(fsimpf(a)+fsimpf(b))/2.0;
s1=t1;
ep=eps+1.0;
while (ep>=eps)
{
p=0.0;
for (k=0;k<=n-1;k++)
{
x=a+(k+0.5)*h;
p=p+fsimpf(x);
}
t2=(t1+h*p)/2.0;
s2=(4.0*t2-t1)/3.0;
ep=fabs(s2-s1);
t1=t2; s1=s2; n=n+n; h=h/2.0;
}
return(s2);
}
void main()
{
double a,b,eps,t;
a=0.0; b=3.141592653589793238; eps=0.0000001;
a definite integral by Simpson Method.
t=fsimp(a,b,eps);
printf("%e\n",t);
printf("\n Press any key to quit...");
getch();
}
另外,站长团上有产品团购,便宜有保证

‘贰’ c语言求解二重积分,急求

你不如用matlab。
c语言可以参见数值计算方法的书,用二重积分定义求,表示∑∑f(x,y)的形式,构造循环。新浪共享上有这个算法,可以下载

‘叁’ c语言 编程二重积分能不能现将其中一个看做常数积分

(手打原创)

用数值积分

一、定积分且f(x)易求

就是比如a->b,积f(x) 可以表示成1/n*sum x: 1->n (f(x/n),在精读允许的范围内取一个合适大小的n,循环加实现
二重的就再来一次循环

二、f(x)容易展开成泰勒级数的
也容易积的,也好办

三、f(x)可以表示成十几个常见积分的和差形式,或者分式可以展开
也好办

‘肆’ 高等数学中体积分可以转化为面积分计算,请问用c语言怎么编写它的程序

看积分表达式: dS 是第一类曲面积分(对面积的~~) dydz, dzdx, dxdy 是第二类曲面积分(对坐标的~~)第二类曲面积分,会指定在那一侧积分。计算都是化为 二重积分。1. 第一类: 积分曲面在某一坐标平面投影, 计算 dS2. 第二类: ∫∫ P(x,y,z) dydz, 积分曲面在yOz坐标平面投影, 化为二重积分时,考虑±, 其中 前侧取正,后侧取负; ∫∫Q(x,y,z) dzdx, 积分曲面在zOx坐标平面投影, 化为二重积分时,考虑±, 其中 右侧取正,左侧取负; ∫∫ R(x,y,z) dxdy, 积分曲面在xOy坐标平面投影, 化为二重积分时,考虑±, 其中 上侧取正,下侧取负;注意: 如果是闭合曲面,可以考虑利用 Gauss 公式,化为 三重积分。

‘伍’ 二重积分不加C可以吗


这个没有一定的过程,要看具体问题的时候再求的,因为不同的区域代表的上下限不一样呀。

你可以把极坐标下的ρ,θ范围先写好,再把ρ,θ看成直角坐标系中横坐标与纵坐标画出对应的区域,再用普通的直角坐标系中的积分去求就可以了。

你只要用换无法就可得到了,令x=rcosθ,y=rsinθ,此时dxdy由Jacobi行列式求得的,具体见图片。

‘陆’ 如何用C语言编辑二重积分程序别说废话,谢谢~

这是清华出的C语言程序集中的程序,你只要把其中的bjpqfs换成是上下限的表达公式,把bjpqf换为被积函数就可以了

bjpg.h

#ifndef _bjpq_h_
#define _bjpq_h_
#include <math.h>

extern void bjpqfs(double x,double y[2]);//上下限
extern double bjpqf(double x,double y);//f(x,y)
double bjpq(double a,//x积分上限
double b,//x积分下限
double eps);//精度
#endif

bjpq.c
#include "bjpq.h "

static double pqgl(double x,double eps)
{
int m=1,n=1,k,l,j;
double b[10],h[10],y[2],hh,t1,t2,s0,yy,g,ep,s;

bjpqfs(x,y);
hh=y[1]-y[0];h[0]=hh;
t1=0.5*hh*(bjpqf(x,y[0])+bjpqf(x,y[1]));
s0=t1;b[0]=t1;ep=1.0+eps;
while((ep> =eps) && (m <=9))
{
t2=0.5*t1;
for(k=0;k <n;k++)
{
yy=y[0]+(k+0.5)*hh;
t2+=0.5*hh*bjpqf(x,yy);
}
m++;
h[m-1]=h[m-2]/2.0;
g=t2;l=0;
for(j=2;j <=m;j++)
{
s=g-b[j-2];
if(!l)
if(fabs(s)+1.0==1.0)
l=1;
else g=(h[m-1]-h[j-2])/s;
}
b[m-1]=g;
if(l) b[m-1]=1.0e+35;
s=b[m-1];
for(j=m;j> =2;j--) s=b[j-2]-h[j-2]/s;
ep=fabs(s-s0)/(1.0+fabs(s));
n*=2;t1=t2;s0=s;hh=0.5*hh;
}
return s;

}

double bjpq(double a,double b,double eps)
{
int m=1,n=1,k,l,j;
double bb[10],h[10],hh,s1,s2,t1,t2,x,g,s0,ep,s;

hh=b-a;h[0]=hh;
s1=pqgl(a,eps);
s2=pqgl(b,eps);

t1=hh*(s1+s2)/2.0;
s0=t1;bb[0]=t1;ep=1.0+eps;
while((ep> =eps)&&(m <=9))
{
t2=0.5*t1;
for(k=0;k <n;k++)
{
x=a+(k+0.5)*hh;
s1=pqgl(x,eps);
t2+=0.5*s1*hh;
}
m++;
h[m-1]=h[m-2]/2.0;
g=t2;l=0;
for(j=2;j <=m;j++)
{
s=g-bb[j-2];
if(!l)
if(fabs(s)+1.0==1.0) l=1;
else g=(h[m-1]-h[j-2])/s;
}
bb[m-1]=g;
if(l) bb[m-1]=1.0e+35;
s=bb[m-1];
for(j=m;j> =2;j--) s=bb[j-2]-h[j-2]/s;
ep=fabs(s-s0)/(1.0+fabs(s));
n*=2;t1=t2;s0=s;hh/=2.0;
}
return s;
} main.c

#include "bjpq.h "

void bjpqfs(double x,double y[2])
{
y[1]=sqrt(1.0-x*x);
y[0]=-y[1];
return;
}

double bjpqf(double x,double y)
{
return exp(x*x+y*y);
}

main()
{
double xstart,xend,eps,s;
xstart=0.0;xend=1.0;eps=0.00005;
s=bjpq(xstart,xend,eps);
printf( "s=%e\n ",s);
}

‘柒’ 求C语言或者MATLAB对下面这个二重积分编程。

如果是2011b或更早的版本(至少2007b,否则无法处理为积分限为无穷的情况),可以借助于匿名函数和arrayfun进行计算(dblquad不能接受quadgk方法,否则可以用dblquad):

>>m=0.7;n=0.8;
>>N=50;
>>f=@(x,p)sqrt(N/(2*pi*p*(1-p)))*exp(-N*(x-p).^2/(2*p*(1-p)));
>>quadl(@(P)arrayfun(@(p)quadgk(@(x)f(x,p),-inf,m),P),m,n)
ans=
0.0229

对于2012a之后的版本,可以用integral2计算:

>>m=0.7;n=0.8;
>>N=50;
>>f1=@(x,p)sqrt(N./(2*pi*p.*(1-p))).*exp(-N*(x-p).^2./(2*p.*(1-p)));
>>integral2(f1,-inf,m,m,n)
ans=
0.0229

‘捌’ 用c语言求二重积分~~

这个你用手工积分就行了,当然常数的代入计算还是可以用计算器的。给你的提示是分0<y<a/2和a/2<y<a两次脱绝对值符号,最后都会演变为对sqrt(x^2+u^2)/(x^2+u^2+v^2)^2的积分形式,或者,你只关心数值结果的话,直接采用矩形法或者辛普森积分法,划分的细一点就不会有太大误差了

‘玖’ 求C语言求多重定积分的代码

变步长梯形求定积分代码如下:
#include
#include
#include
#define e 2.7182818
double f(double x)
{
return pow(e,x)*x*x; // 函数x^2 * e^x
}
double Calc(double a,double b,double esp)//变步长梯形求[a,b]定积分,esp是精度
{
int done(0);
int n=1;
double h,Tn,T2n,k,temp,x;
h=b-a;
Tn=h*(f(a)+f(b))/2.0;
while(!done)
{
temp = 0;
for(k=0;k

‘拾’ 如何用C语言求二重定积分

按二重积分的定义做。

我的这个出错,一起讨论下吧:

#include<stdio.h>

#include<math.h>

#defineN100

voidmain(){

doubleresult,(*p)(double,double);

doublef(double,double);

doubleintegral(double,double,double,double,double(*p)());

p=f;

// printf("请输入abcd的值: ");

// scanf("%lf%lf%lf%lf",&a,&b,&c,&d);

result=integral(2.0,8.0,0,6.0,p);

printf("该二重积分的值为: ");

printf("%f",result);

printf(" ");

}

//求二重积分的函数

doubleintegral(doublea,doubleb,doublec,doubled,double(*p)(double,double)){

inti,j;

doublex,y,h1,h2,volum=0;

h1=(b-a)/N;

h2=(d-c)/N;

x=a;

y=c;

for(i=0;i<N;i++){

for(j=0;j<N;j++){

volum+=(*p)(x,y)*h1*h2;

y+=h2;

}

x+=h1;

}

return(volum);

}

doublef(doublex,doubley){

doubleh;

h=sqrt((2+x*x)*sin(x*y)*sin(x*y))+x*x*y*cos(x)-30*x*y*y;

return(h);

}

运行结果: