当前位置:首页 » 编程语言 » 微分c语言

微分c语言

发布时间: 2023-09-14 14:24:35

⑴ 用c语言计算微积分

我给一楼加的注释以及修改:
#include<stdio.h>
#include<math.h>
#define ARRAYBOUND 10001

void main()
{
int i = 0; //辅助变量,最常见那种
int n = 0; //将所求定积分函数曲线在x轴方向,平均分成n等分;n越大,结果越精确;不过限于此算法限制n<ARRAYBOUND,否则溢出.
float x[ARRAYBOUND];//ARRAYBOUND维浮点数组,存放离散的x坐标值
float y[ARRAYBOUND];//ARRAYBOUND维浮点数组,存放每个x坐标对应的函数值;x[i],y[i]满足y[i]=f(x[i]),f是你要求定积分的函数
float x0 = 0.0; //定积分下限
float xn = 0.0; //定积分上限
float h = 0.0; //面积微元宽度
float J = 0.0; //辅助变量

/*f=x^3*/ //这里说明要求定积分的是函数f(x)=x*x*x;(y等于x的立方,x^3是vb的写法)
// printf("input x0,xn,n:");
printf("请分别输入下限(x0),上限(xn),精度(n):");
scanf("%f",&x0);
scanf("%f",&xn);
scanf("%d",&n);

h=(xn-x0)/n;//将函数图形在x方向平分成n份,h是每个面积微元的宽度
x[0]=x0; //将积分下限赋值给x[0]

for(i=0;i<=n && n<ARRAYBOUND;i++)
{
x[i]=x[0]+i*h; //计算n个离散的横坐标值,存入x[]数组
y[i]=(float)pow(x[i],3);//计算n个横坐标对应的函数值,存入y[]数组。在此可以改变要求积分的函数
}

// J=0.0;
for(i=0;i<n;i++)
{
//J=J+y[i]+y[i+1];
J+=y[i];//将所有纵坐标值代数相加,存入J
}
//J=J*h/2.0;
J=J*h;//所有微元面积一次求解,因为∑h*y[i]=h*∑y[i];
printf("\nn=%d \n所求定积分值是: %f\n",n,J);
}

我将//J=J+y[i]+y[i+1]改为J+=y[i];将//J=J*h/2.0;改为J=J*h只是帮助lz理解
其实,这两种表达在理论上是等价的,不过我发现修改后,在n同样大小的情况下,结果的精度有一点点下降,还真不知为什么???

这样的话lz应该能理解了吧,其实一楼的算法还有不少值得改进的地方,希望lz能有所突破!!

⑵ c语言编程- 微积分程序

辛普森法

#include <stdio.h>
#include <math.h>
#define F(X) (4.0/(1+X*X))
static float EPS = 1.0E-14;
static int COUNT=1;
static double a=0.0, b=1.0;
static double M[32],T[32],S[32],C[32],R[32],E[32];

double GETM(int K)
{ unsigned long j,n=1;
double x=0,y=0,step=0;
for(j=0;j<K;j++) n*=2;
step = (b-a)/n;
x = a+step/2;
for(j=0;j<n;j++){y+=F(x);x+=step;}
return (y*step);
}

Simpson(float EPS)
{ int k=0;
T[0]= (b-a)*(F(a)+F(b))/2.0;
S[0]=T[0];
E[0]=1.0E10;
for(k=0;k<20;k++)
{ M[k] = GETM(k);
T[k+1]=(M[k]+T[k])/2.0;
S[k+1]=(4.0*T[k+1]-T[k])/3.0;
COUNT++;
E[k+1]=fabs(S[k+1]-S[k]);
if(k<3)continue;
if(E[k+1]<EPS)break;
}
return;
}

ShawResult()
{ int k;
system("cls");
printf("\n K M[K] T[K] S[K]");
printf(" E[K]");
printf("\n-------------------------------------------");
printf("-----------------------------------");
for(k=0;k<COUNT;k++)
printf("\n%2d %20.15lf%20.15lf%20.15lf%12.4e",k,M[k],T[k],S[k],E[k]);
printf("\n--------------------------------------------");
printf("-----------------------------------");
getch();
system("cls");
return;
}

SaveResult()
{ int k;
FILE * fp;
fp=fopen("Simpson.htm","w");
if(!fp) return;
fprintf(fp,"<html><head></head>");
fprintf(fp,"<body bgcolor = #006699 text = #FFff00>");
fprintf(fp,"<pre><font size=\"6\">");
fprintf(fp,"\n K M[K] T[K] S[K]");
fprintf(fp," E[K]");
fprintf(fp,"\n----------------------------------------------");
fprintf(fp,"----------------------------------");
for(k=0;k<COUNT;k++)
fprintf(fp,"\n%2d %20.15f%20.15f%20.15f%12.4le",k,M[k],T[k],S[k],E[k]);
fprintf(fp,"\n----------------------------------------------");
fprintf(fp,"----------------------------------");
fprintf(fp,"</pre></font></body>");
fclose(fp);
return;
}

main()
{ Simpson(EPS);
ShawResult();
SaveResult();
}

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:432
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:537
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:146
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:232
java驼峰 发布:2025-02-02 09:13:26 浏览:651
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:532
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726