在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 1486|回复: 0

大家帮我看看这个小程序

[复制链接]
发表于 2008-11-30 14:52:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
一个简单的数学计算的程序,但是运行后输入完数据 点回车 窗口就自动关闭了
#include <stdio.h>
#include <math.h>
#define N 2
#define M 3
float x[M],ya[M];
float out_num[N][2*M];
float ave[2*M],ave_a[M],ave_b[M],ave_ab[M];
float del[M],var[M];
float err1_a[M],err1_b[M],err1_ab[M],err2_ab[M];
float x[M],ya[M];
void aver(void)                    /*求每个输入对应的输出的平均值 */
{int i,j;
  float s;
  s=0;
  for(j=0;j<2*M;j++)
    for(i=0;i<N;i++)
     s=s+out_num[j];
   ave[j]=s/(float)N;
}
void line_a(void)                  /*求拟合直线 */
{float k,b;
  int i;
  float x1=x[0],x2=x[M-1];
  float y1=ave_ab[0],y2=ave_ab[M-1];
  float x[M],ya[M];
  k=(float)(y1-y2)/(x1-x2);
  b=(float)(y1+y2-k*(x1+x2))/2;
  for(i=0;i<M;i++)
   ya=k*x+b;
  }
void s_var(void)                    /*求每个输入对应的各输出的方差 */
{int i,j;
  float s,t;
  s=0;
  for(j=0;j<2*M;j++)
    for(i=0;i<N;i++)
     s+=out_num[j]*out_num[j];
     t=s/(float)N-ave[j]*ave[j];
     var[j]=sqrt(t);   
  }
float highest_del()                 /*求迟滞的最大值 */
{float high_del;
  int i;
  high_del=del[0];
  for(i=1;i<M;i++)
    {if(high_del>del) high_del=del;}
  return(high_del);
  }
float highest_erra()                 /*求正行程误差的最大值 */
{float high_erra;
  int i;
  high_erra=err1_a[0];
  for(i=1;i<M;i++)
    {if(high_erra>err1_a) high_erra=err1_a;}
  return(high_erra);
  }
float highest_errb()                 /*求反行程误差的最大值 */
{float high_errb;
  int i;
  high_errb=err1_b[0];
  for(i=1;i<M;i++)
    {if(high_errb>err1_b) high_errb=err1_b;}
  return(high_errb);
  }
void main( )
{float Yh,Yr,Yl,Ylh,Yfs,A;
float a,b,c,d,e,s,t;
int i,j;
s=0,t=0;
printf("Please input  x_numbers:\n");        /*输入传感器输入值 */
for(i=0;i<M;i++)
   scanf("%f",&x);
printf("Please input  out_numbers:\n");      /*输入传感器输出值 */
for(i=0;i<N;i++)
   for(j=0;j<2*M;j++)
     scanf("%f",&out_num[j]);
aver( );                                     /*调用求平均值函数*/
for(i=0;i<M;i++)                             /*求各输入对应的正行程平均值*/
    ave_a=ave;
for(i=M,j=0;i<2*M;i++)                       /*求各输入对应的反行程平均值*/
    ave_b[j++]=ave;
for(i=0,s=0;i<M;i++)                         /*求各输入对应的正反行程平均值*/
   {s=ave_a+ave_b;
    ave_ab=s/2;
    }
for(i=0;i<M;i++)                             /*求迟滞*/
    del=ave_b-ave_a;
line_a( );                                   /*调用求拟合直线函数*/
for(i=0;i<M;i++)
   {err1_a=ya-ave_a;
    err1_b=ave_b-ya;
    err1_ab=ave_ab-ya;
   }
s_var( );                                    /*调用求各输入对应方差的函数*/
for(i=0;i<2*M;i++)                           /*求所有输入对应方差的总方差*/
  {s+=var*var;
   t+=var;
  }
e=sqrt(s/N-(t/N)* (t/N));
a=highest_erra();                           /*调用求误差正行程最大值函数*/
b=highest_errb();                           /*调用求误差反行程最大值函数*/
c=(float)((a-b)/2);                         /*求直线平移距离*/
for(i=0;i<M;i++)                            /*求平移后的正反行程误差*/
  {err2_ab=err1_ab+c;}
d=highest_del( );                           /*调用求迟滞最大值函数*/
Yfs=ave_ab[M-1]-ave_ab[0];
Yh=d/Yfs;
Yr=3*e/Yfs ;
Yl=c/Yfs;
Ylh=(a+b)/(2*Yfs);
A=Ylh+Yr;
printf("Nh=: %8.5f\n",Yh);
printf("Yr=: %8.5f\n",Yr);
printf("Yl=: %8.5f\n",Yl);
printf("Ylh=: %8.5f\n",Ylh);
printf("A=: %8.5f\n",A);
getchar();
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-29 14:53 , Processed in 0.048986 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表