求速度和位移? 最好能用C语言贴出来我看看. 我找到很多求定积分的C源程序,但不知道怎样将加速度值代入进去得出速度和位移.被积函数,上限,下限.像下面这段程序:
如果要将加速度2M/s^2代入进去,应该将被积函数改成怎样?,上限和下限对应的是时间吗?
#include "stdio.h"
double f(double x)
{ double y;
y=1+x*x;
return y;
}
double sab(double a,double b,int n)
{
double h,s;
int i;
h=(b-a)/n;
s=0;
for(i=1;i<n;i++)
s+=h*f(a+i*h);
return s;
}
void main()
{
double a,b,q;
int n;
scanf("%lf,%lf,%d",&a,&b,&n);
q=sab(a,b,n);
printf("%lf",q);
}
电路里,我用的是压电式加速度传感器,所以可以通过一次积分得到速度,二次积分得到位移.
我想了解的是 通过什么条件,可以做一次积分得到速度,例如: 如果得到加速度的幅值,频率,周期,怎样建立对应的被积函数,然后做积分
C语言程序做的是“叠加”,不是积分。
要想知道什么时候能积分,就要看高数:定积分存在的条件。
谢谢,可是我现在想知道的不是实用方法,而是某一方法的条件和过程.
追答函数 sab(a, b, n) 定义很奇怪,如果 a b是 时间上下限,那么 f 是求位移吗?整个概念有些混乱,或者带有几个隐含的假设(初速度值、恒加速度值)。
按定义重新改写:dS = vi*dt + 1/2*ai*dt^2, S =S +dS, vi = vi + ai*dt, 其中
dS 微位移,dt 微时间;vi ai 为即时速度、加速度。
如果 ai 不是常数,对 dS 的定积分就不能简化成简单的公式。
建议你再研究一下微分方程及其数值解法(如龙格-库塔法)。
被你这么一说,我似乎有点懂了. 你看看我的理解是否对?
加速度值是已知的常数,时间也是已知的常数,分别对应a[i],t[i]数组.
那么如果是要求速度,公式应该是:
被积函数 f(v=v0+at),v0是初速度,
函数 sab(a,b ,n) ,其中a,b 对应的是时间数组 t[i]中的上下限.
你看改成这样再代入进去求定积分对吗? 这样出来后就是速度的值了.
大体上如此,但为了求得更精确的积分,有好几种改进的积分算法,可搜一下看。
另外,写函数是为了分离某些专用功能,但若不能通用化,势必要在今后不断修改或重复写基本雷同的代码,比如 f 函数(暂不说它是否正确),它只能供加速度为2时使用,就不如把加速度作为参数来得灵活通用。
即使算出来是错的,起码知道怎么算.我现在连怎么算都不知道~你能告诉我,怎样代入进去程序里面计算吗
追答呵呵,不好意思,我对程序不专业
追问没关系,谢谢了. 按你说的,速度是变化的,位移是变化的,这是对的,因为振动加速度是不断变化的.那你知道按以上的假设条,加速度的条件函数应该是怎样吗?
追答振动加速度值为2m/s²,只能理解为最大值。还必须知道振动频率,计算周期。知道了周期和幅值就能建立加速度的正弦函数。