打印

离散加速度二次积分为相对位移的C语言问题

[复制链接]
4437|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刹那涅磐|  楼主 | 2011-3-20 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位朋友好,最近编程时需要对加速度传感器采集到的加速度数据进行积分来得到相应时间内的位移。
先贴出自己做的连续函数二次积分与自我尝试的离散一次积分请大家挑刺,顺便求如何对离散加速度进行二次积分,我感觉自己对二重积分的理解还不够到位,一次积分后不知道如何再去积分。网上查的都是比较复杂的Matlab的傅里叶变换。有没有稍微简单的误差不很大的算法。
需求:加速度积分相对位移
条件:初始速度为0,初试位移为0,时间间隔约为0.01s且均匀(即各点之间时间间隔相等),应该能够进行近似。
连续函数二次积分:
#include <stdio.h>

#define min 0
#define max 3.0

double f(double x)
{
return x;
}

double Ladder(int n)//用梯形法求积分
{
double width=(max-min)/n;
double sum=0;
double d;

for (d=min;d<max-width/2;d+=width)
{
sum+=(f(f(d))+f(f(d+width)))*width/2;
}
return sum;
}
void main()
{
int n;
printf("利用梯形法求 xdx 在(0,3)上的二次定积分\n");
printf("请输入划分小图形个数n(n越大,积分越准确):");
while (1)
{
scanf("%d",&n);
if (n>0)
break;
printf("输入错误,请重新输入:");
}

printf("梯形法积分为:%lf\n", Ladder(n));
}
离散数据的一次积分
#include <stdio.h>

double Ladder(int i_first,int i_second) //积分程序
{
double width=0.01;
double integral=0;
integral=(i_first+i_second)*width/2; //梯形面积
return integral;
}
void main()
{

FILE *fx=fopen("x1.txt","r"); //打开文本x
unsigned int i_first,i_second;
double final=0;
fscanf(fx,"%d",&i_first);  
while(!feof(fx)) //是否读取完毕
{
fscanf(fx,"%d\t",&i_second); //读取赋值
  final+=Ladder(i_first,i_second); //积分累加
i_first=i_second;
}
  fclose(fx); //关闭文本x
  printf("积分为:%lf\n",final );
}

在此先感谢各位大大了。

相关帖子

沙发
airwill| | 2011-3-20 11:44 | 只看该作者
根据定积分的概念. 的确,加速度进行2次积分, 能够得到位移量.
离散数据的两次积分, 要得到比较准确的结果, 除了数据采集精度外, 还要更精确的时间间隔精度和更小的时间间隔.
简单些的算法, 我想是不是可以用加法来代替积分的乘法. 原理一样的, 把时间作为定系数放到外面来...

使用特权

评论回复
板凳
刹那涅磐|  楼主 | 2011-3-20 18:47 | 只看该作者
2# airwill

非常感谢您的建议,我再去试一下

使用特权

评论回复
地板
qqatscau| | 2012-8-15 15:37 | 只看该作者
mark!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝