发表于:2009/12/19 23:58:11
#0楼
新人请教一道题,这是我们老师给我们的作业,主要是用到求积分的部分,我已经写了差不多了,但是最后有错,所以希望有高手给我指点一下,万分感谢!
首先题目如下:
一个铁芯线圈,线圈n=440,长度l=480mm,横断面积S=0.000156 平方米,磁场强度标为H,磁通量密度标为B。所有B和H的数据都包括在一个名为“BH”的txt文档里,第一列的数据为H,第二列为B。周期T=20ms
1) 求铁芯线圈消耗的功率。
对这一问,老师给的方法是先求瞬时功率,P(t) = V(t)I(t),然后用瞬时功率再求消耗的功率,
其中
2) 已知B(H)的图像下图所示,请求出曲线包围出的图像的面积。
对于这一问,因为图像是对称的,所以只要求出H从0开始到最大值的面颊然后乘以2就可以了,首先就要求出Hmax,但是就是这里我不会,然后用求积分的方法求出两条线与横轴所组成的图形面积,用上面的面积减去下面的面积即可。
下面放上我的写的程序,高手帮忙改改吧!!万分感谢!!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef float vect[500];
#define MAX=9.82490000e+02;
#define ns 440
#define S 0.00156
#define l 0.48
void lecture(vect x, vect y, int *n);
void lecture(vect x, vect y, int *n)
{
FILE *f;
f=fopen("CM.txt","r");
*n=0;
while(!feof(f))
{
fscanf(f,"%f %f",&x[*n],&y[*n]);// x=>H et y=>B
*n=*n+1;
printf("\n %d valeurs de B et H \n",*n);
}
*n=*n-1;
}
void hmax(vect x, vect y, int *n);
void hmax(vect x, vect y, int *n)
{
float Hmax;
vect H;
int i;
FILE *f;
f=fopen("CM.txt","r");
*n=0;
while(!feof(f))
{
fscanf(f,"%f ",&x[*n]);
}
fclose(f);
printf("\n %d valeurs de H \n",*n);
if
H[i]>MAX
{
Hmax=H[i];
}
else
{
Hmax=MAX;
}
printf("\n %d valeurs de H maximale est %d \n",Hmax)
}
float integraleB1 (vect u, float h, int n);
float integraleB1 (vect u, float h, int n)
{
float b1=u[0]+u[n];
int i;
for(i=1;i<=n-1;i++)
{b1 +=2*u[i];
return h*b1/2;}
}
float integraleB2 (vect v, float h, int n);
float integraleB2 (vect v, float h, int n)
{
float b2=v[0]+v[n];
int i;
for(i=1;i<=n-1;i++)
{b2+=2*v[i];
return h*b2/2; }
}
int main (void)
{
int i,n;
float h,Hmax;
float h1,h2;
float x0=0,xn=0.02;
float b10=0,b1n=MAX;
float b20=0,b2n=MAX;
vect pmoy,x,y;
float s,s1,s2;
h=(xn-x0)/n;
for(i=1;i<=n;i++)
{
pmoy[i]=(l*S/0.02)*(x0+i*h);
printf("\n\n La puissance moyenne est %f\n\n", pmoy[i]);
}
printf("\n\nLa puissance moyenne est %f\n\n", pmoy[i]);
hmax(x,y,n);
printf("\n\nLa valeur de H maximale est %f\n\n", Hmax);
h1=(b1n-b10)/n;
h2=(b2n-b20)/n;
for(i=1;i<=n;i++)
{
s1=b10*(i*h1);
s2=b20*(i*h2);
s=s1-s2;
}
printf("\nLa surface est %f\n",s);
return 0;
}
首先题目如下:
一个铁芯线圈,线圈n=440,长度l=480mm,横断面积S=0.000156 平方米,磁场强度标为H,磁通量密度标为B。所有B和H的数据都包括在一个名为“BH”的txt文档里,第一列的数据为H,第二列为B。周期T=20ms
1) 求铁芯线圈消耗的功率。
对这一问,老师给的方法是先求瞬时功率,P(t) = V(t)I(t),然后用瞬时功率再求消耗的功率,
其中
2) 已知B(H)的图像下图所示,请求出曲线包围出的图像的面积。
对于这一问,因为图像是对称的,所以只要求出H从0开始到最大值的面颊然后乘以2就可以了,首先就要求出Hmax,但是就是这里我不会,然后用求积分的方法求出两条线与横轴所组成的图形面积,用上面的面积减去下面的面积即可。
下面放上我的写的程序,高手帮忙改改吧!!万分感谢!!
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef float vect[500];
#define MAX=9.82490000e+02;
#define ns 440
#define S 0.00156
#define l 0.48
void lecture(vect x, vect y, int *n);
void lecture(vect x, vect y, int *n)
{
FILE *f;
f=fopen("CM.txt","r");
*n=0;
while(!feof(f))
{
fscanf(f,"%f %f",&x[*n],&y[*n]);// x=>H et y=>B
*n=*n+1;
printf("\n %d valeurs de B et H \n",*n);
}
*n=*n-1;
}
void hmax(vect x, vect y, int *n);
void hmax(vect x, vect y, int *n)
{
float Hmax;
vect H;
int i;
FILE *f;
f=fopen("CM.txt","r");
*n=0;
while(!feof(f))
{
fscanf(f,"%f ",&x[*n]);
}
fclose(f);
printf("\n %d valeurs de H \n",*n);
if
H[i]>MAX
{
Hmax=H[i];
}
else
{
Hmax=MAX;
}
printf("\n %d valeurs de H maximale est %d \n",Hmax)
}
float integraleB1 (vect u, float h, int n);
float integraleB1 (vect u, float h, int n)
{
float b1=u[0]+u[n];
int i;
for(i=1;i<=n-1;i++)
{b1 +=2*u[i];
return h*b1/2;}
}
float integraleB2 (vect v, float h, int n);
float integraleB2 (vect v, float h, int n)
{
float b2=v[0]+v[n];
int i;
for(i=1;i<=n-1;i++)
{b2+=2*v[i];
return h*b2/2; }
}
int main (void)
{
int i,n;
float h,Hmax;
float h1,h2;
float x0=0,xn=0.02;
float b10=0,b1n=MAX;
float b20=0,b2n=MAX;
vect pmoy,x,y;
float s,s1,s2;
h=(xn-x0)/n;
for(i=1;i<=n;i++)
{
pmoy[i]=(l*S/0.02)*(x0+i*h);
printf("\n\n La puissance moyenne est %f\n\n", pmoy[i]);
}
printf("\n\nLa puissance moyenne est %f\n\n", pmoy[i]);
hmax(x,y,n);
printf("\n\nLa valeur de H maximale est %f\n\n", Hmax);
h1=(b1n-b10)/n;
h2=(b2n-b20)/n;
for(i=1;i<=n;i++)
{
s1=b10*(i*h1);
s2=b20*(i*h2);
s=s1-s2;
}
printf("\nLa surface est %f\n",s);
return 0;
}
[此贴子已经被作者于2009-12-19 23:59:01编辑过]