|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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();
} |
|