十万火急!关于如何在C中计算微积分,我希望各位高手能指点迷津,在下会永远记住您的名字!

guoke888 2002-10-21 04:59:22
关于如何在C中计算微积分,我希望各位高手能指点迷津,在下会永远记住您的名字,希望能给出思路和例子。
...全文
225 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
x2jack 2003-04-07
  • 打赏
  • 举报
回复
《c常用算法程序集》清华出版
celeil 2003-04-07
  • 打赏
  • 举报
回复
其实,跟算二元一次方程一样。你搞清了算法就OK了。
yaos 2003-04-06
  • 打赏
  • 举报
回复
C语言数值算法程序大全
liu584 2003-04-06
  • 打赏
  • 举报
回复
请问那位可以在运行时输入被积函数啊?就是可以对任何函数不定积分。
yzb1000 2003-04-06
  • 打赏
  • 举报
回复
没学过计算方法?
wenohuang 2003-04-06
  • 打赏
  • 举报
回复
老兄,在浩强老师的《c语言程序设计》不是有一个这样的题目
求一曲线与x轴相交得时候即y=0时,x的值?
他的解法是:取一x1 使得y1>0,然后取x2使得y2<0.
再令x3 = (x1+x2)/2,把x3带入函数求得y3
如果y3<0.则使x2 = x3;
其他x1 = x3;(y3>=0)

反复执行以上步骤,直到|R|=x2-x3的绝对值小于某一值时,停止以上循环。
例如|R|<=0.0000001
此时吧x1带入函数得y1,
在把x2带入函数得y2.
利用公式tan = (y2-y1)/(x2-x1)
即得到该点得微分。
以上只是提示,如果点不在x轴上
相信这已经不是问题了。
不知道这样对不对。
给我消息:
jackalioo@163.net
ywpg 2003-04-06
  • 打赏
  • 举报
回复
up
ccat 2003-04-06
  • 打赏
  • 举报
回复
这个问题在数学上是一大分支,不妨找一本《数值分析》好好读一读,我记得在书店里见过一本影印版,好像是清华出的,各种算法都给出了程序代码。
zhouhu 2003-04-06
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
double f(double x);
void main()
{
int n=1;
double a=0,b=1;
double h,Tn,T2n,In,I2n;
const double eps=1e-8;
h=b-a;
T2n=I2n=h*(f(a)+f(b))/2;
In=0;
while(fabs(I2n-In)>=eps) //求积分
{
Tn=T2n;
In=I2n;
double sigma=0.0;
for(int k=0;k<n;k++)
{
double x=a+(k+0.5)*h;
sigma+=f(x);
}
T2n=(Tn+h*sigma)/2.0; //变步长梯形
I2n=(4*T2n-Tn); //辛普生公式
n*=2; //划分
h/=2;
}
cout<<"the intergral of f(x) from"
<<a<<"to"<<b<<"is\n"
<<setiosflags(ios::fixed)
<<setprecision(8)
<<setw(10)<<I2n<<endl;
}
double f(double x)
{
return exp(x)/(1+x*x);
}


梯形公式计算面积近似值:In=Tn=h/2(f(a)+f(b))
变长梯形面积:T2n=Tn/2+h/2∑f(Xk+h/2)
辛普生面积:I2n=(4T2n-Tn)/3
15962 2002-10-21
  • 打赏
  • 举报
回复
找一本算法的书去看一看(推荐徐士良的《常用c算法》好像书名是这样的,记得不太清楚了)
  • 打赏
  • 举报
回复
看看数值方法就搞定了!应该很简单的!
luwpeng 2002-10-21
  • 打赏
  • 举报
回复
循环结合梯形法求积分:先将积分区间分为n份,计算出分为n份时,梯形的面积,记录下来;再将积分区间分为2n份,计算出此时,梯形有面积,比较和前一次的差值。如果合乎精度要求的话,即可退出。如果不行,继续分。
xzhuang 2002-10-21
  • 打赏
  • 举报
回复
看看计算方法。一般都是用一个迭代式来逼近。比如:牛顿差分方程。牛顿-莱布尼茨差分方程。
lbaby 2002-10-21
  • 打赏
  • 举报
回复
到算法书上去找找看
比如,清华的《c语言常用算法》
就有

dcyu 2002-10-21
  • 打赏
  • 举报
回复
改一下说明:
函数名:integral

功能:类抛物线法求曲线积分

用法:double _integral(double (*f)(double x),double start,double end,int n)

参数:f:函数名,start,end:左右区间,n:等分区间的数目(偶数)

返回:积分值

blue_coco 2002-10-21
  • 打赏
  • 举报
回复
好象有本C的数值算法这本书,很全的。
如果很急,
mail给我,duowu_pan@21cn.com
告诉我具体要求。
我的从书上去抄啊!
dcyu 2002-10-21
  • 打赏
  • 举报
回复
有好几种方法:
这是其中的一种:
http://vip.6to23.com/dcyu/TurboC/advance/7.html
这样也可以的:
double integral(double (*f)(double x),double start,double end,int n)
{
double h,al,be,sum;
int i,m;

if(n<=0||end-start<=0.0)
{ printf("Start is larger than end , or n<=0 in integral!");
exit(1); }
h=(end-start)/n;
al=start+h*0.4226497308;
be=start+h*1.577350269;
sum=(*f)(al)+(*f)(be);
m=n/2-1;
for(i=1;i<=m;i++)
{
al=al+2*h;
be=be+2*h;
sum=sum+(*f)(al)+(*f)(be);

}
sum=sum*sum;
return sum;

}

函数名:integral

功能:梯形法求曲线积分

用法:double _integral2(double (*f)(double x),double start,double end,int div)

参数:f:函数名,start,end:左右区间,div:等分区间的数目

返回:积分值

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧