《电机学》课程设计Word格式文档下载.doc
《《电机学》课程设计Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《《电机学》课程设计Word格式文档下载.doc(18页珍藏版)》请在冰点文库上搜索。
假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:
其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为:
拉格朗日基本多项式的特点是在上取值为1,在其它的点上取值为0。
代码如下:
#include<
iostream>
cstdlib>
cmath>
iomanip>
stdlib.h>
usingnamespacestd;
doubledelta1=0.003,delta2=0.002,w=0.125,h=0.15,n1=100,n2=50,l=0.05,d=0.05;
doublepi=3.1415926535898;
doubleu0=4*pi*pow(10,-7);
doublei1,i2,f10,f20;
inti_diedai_root1=0,i_diedai_root2=0,i_ddjs=0;
doublebh[2][150]={{0.4 ,
doubleLagrange(doublexx);
doubleb2h(doubleb);
doublef2(doubleb2,doubleb1);
doubleroot2(doublex1,doublex2,doubleb1);
doublelinearfit2(doublex);
doublelinearfit1(doublex);
intmain()
{
doubleb1,b2,b3,h1,h2,h3,f1,f2;
b1=2.4;
b2=root2(0,2.4,b1);
b3=b1-b2;
i1=(h1*(2*w+h+3*l-delta1)+b1*delta1/u0+h3*(h+l))/n1;
i2=(b2h(b2)*(2*w+h+3*l-delta2)+b2*delta2/u0-b2h(b3)*(h+l))/(-n2);
cout<
<
endl<
"
计算过程信息:
二分法计算B2次数:
i_diedai_root1<
endl;
磁密计算结果:
setprecision(16)<
B1="
b1<
B2="
b2<
B3="
b3<
endl;
磁通计算结果:
Φ1="
b1*l*d<
Φ2="
b2*l*d<
Φ3="
b3*l*d;
I1="
i1;
结果验算:
"
Φ1="
(b2+b3)*l*d<
I2="
i2;
system("
pause"
);
return0;
}
doubleb2h(doubleb)//计算磁场强度H,输入磁感应强度B,输出磁场强度H
{intt;
doubleh_t;
t=abs((int)(100*b))-40;
if(t>
134)
{
if(b>
=0)
returnlinearfit2(b);
elsereturn-linearfit2(-b);
}
if(t<
15)
{
if(b>
returnlinearfit1(b);
elsereturn-linearfit1(-b);
}
=0)returnLagrange(b);
elsereturn-Lagrange(-b);
doubleLagrange(doublexx)//拉格朗日插值,输入自变量,输出插值函数值
inti=0,j=0,n=150,z=0;
doublepai,sum;
double*x,*y;
x=bh[0];
y=bh[1];
z=((int)(100*xx))-45;
if(xx<
=0.45)z=0;
n=10+z;
if(xx>
1.84)n=6+z;
for(j=z,sum=0;
j<
n;
j++)
for(i=z,pai=1;
i<
i++)
if(i==j)continue;
pai=pai*(xx-*(x+i))/(*(x+j)-*(x+i));
sum=sum+*(y+j)*pai;
returnsum;
doublelinearfit2(doublex)
return(56450*x-89188);
doublelinearfit1(doublex)
return(202.21*x+57.015);
doublef2(doubleb2,doubleb1)
doubleb3,h2,h3;
h2=b2h(b2);
h3=b2h(b3);
returnh2*(2*w+h+3*l-delta2)+b2*delta2/u0-h3*(h+l)+n2*i2;
doubleroot2(doublex1,doublex2,doubleb1)
doublex,y,y1;
y1=f2(x1,b1);
do
cout<
'
!
;
i_diedai_root1++;
if(i_diedai_root1>
=1000000)break;
x=(x1+x2)/2;
y=f2(x,b1);
if(y*y1>
0)
x1=x;
y1=y;
else
x2=x;
}while(fabs(y)>
=2*pow(10,-13));
returnx;
计算结果(设定收敛精度10^-13):
计算结果:
B1=2.4T,B2=0.721749T,B3=1.67825T
Φ1=0.006Wb,Φ2=0.0018044Wb,Φ3=0.00419563Wb
I1=57.2958A
改变程序,使收敛精度降低为10^-10,则运算精度降低,但循环次数减小,时间开销减下。
Φ1=0.006Wb,Φ2=0.0018044Wb,Φ3=0.00419563Wb
I1=57.2958A
编程用迭代法实现,计算时先用铁芯磁导率为无穷大情况时近似计算B1,B2,B3的值,将B3的值作为定值计算出H3的值带入方程
(1)
(2),用弦截法计算出B1和B2的值并计算出B3的值,与之前的值比较,若在允许的误差范围以内则计算结束输出计算值,否则将B3的值带入进行下一次循环,直到B3的精度达到要求。
计算步骤如下:
① 近似情况下求得
② 代入方程
(1)
(2),通过弦截法求得,
③ 求得
④ 与比较,若精度达到要求,则,,即为所求
⑤ 若精度达不到要求,则重复2,3,4步骤,求得,直到精度足够即与之差足够小
⑥ 通过得到的求
用近似计算结果充当第零次迭代值,因精确值与近似值偏差不是很大,可加快收敛,减小迭代次数,并可避免因步长太大或太小而不能收敛。
程序执行时可选择是否进行拉格朗日插值法或曲线拟合法,提高磁场强度的精确度。
拉格朗日插值法计算量很大,时间消耗太大,故采用曲线拟合法。
因曲线变化范围较大,对整个曲线进行拟合比较困难,如使用6次多项式进行拟合,系数达到105数量级,R2为0.9995。
因此,对曲线进行分段拟合:
图像如图所示,其中蓝点为磁化曲线上的点,不同颜色的曲线为拟合曲线。
磁化曲线(B-H)
磁化曲线(H-B)
流程图如下:
charlag_in;
doublebh[2][150]={{0.4 , 【磁化曲线表】
doublecidongshi1(double,double);
doublecidongshi2(double,double);
doublediedai_root1(double,double,double);
doublediedai_root2(double,double,double);
doublecszl1(doubleb1,doubleh3);
doublecszl2(doubleb2,doubleh3);
doubletrendfit(doublex);
i1=10;
i2=20;
f10=n1*i1;
f20=-n2*i2;
!
表示弦截法计算B1一次"
@表示弦截法计算B2一次"
*表示迭代计算B3一次"
b1=n1*i1*u0/delta1;
b2=-n2*i2*u0/delta2;
//近似计算
近似结果:
"
b1="
b2="
b3="
//进行迭代计算
b1=diedai_root1(-1.89,1.89,h3);
b2=diedai_root2(-1.89,1.89,h3);
while(fabs(b1-b2-b3)>
pow(10,-16))//迭代计算循环,判断精度是否足够
{cout<
*'
b1="
b2="
b3="
b3;
i_ddjs++;
b3=b1-b2;
h3=b2h(b3);
b1=diedai_root1(-1.89,1.89,h3);
b2=diedai_root2(-1.89,1.89,h3);
b1-b2-b3="
b1-b2-b3<
f1=cidongshi1(b1,h3);
//验算
f2=cidongshi2(b2,h3);
弦截法计算B1次数:
弦截法计算B2次数:
i_diedai_root2<
迭代计算B3次数:
i_ddjs<
收敛误差B1-B2-B3="
endl;
b3*l*d<
收敛误差Φ1-Φ2-Φ3="
f1/n1<
I2="
<
-f2/n2<
结果误差:
ΔI1="
f1/n1-i1<
ΔI2="
-f2/n2-i2<
doublecidongshi1(doubleb1,doubleh3)//计算回路1磁路降落磁动势,输入B2、B3,输出降落磁动势
{doublef1,h1;
h1=b2h(b1);
f1=h1*(2*w+h+3*l-delta1)+b1*delta1/u0+h3*(h+l);
returnf1;
doublecidongshi2(doubleb2,doubleh3)//计算回路2磁路降落磁动势,输入B2、B3,输出降落磁动势
{doublef2,h2;
f2=h2*(2*w+h+3*l-delta2)+b2*delta2/u0-h3*(h+l);
returnf2;
doublecszl1(doubleb1,doubleh3)//计算方程1的一边剩值
{return(cidongshi1(b1,h3)-f10);
doublecszl2(doubleb2,doubleh3)//计算方程2的一边剩值
{return(cidongshi2(b2,h3)-f20);
doublediedai_root1(doublex1,doublex2,doubleh3)//用弦截法计算B1的值,输入区间[x1,x2]和H3,输出B1
{doublex,y,y1;
y1=cszl1(x1,h3);
x=(x1*cszl1(x2,h3)-x2*cszl1(x1,h3))/(cszl1(x2,h3)-cszl1(x1,h3));
y=cszl1(x,h3);
{y1=y;
=pow(10,-12));
doublediedai_root2(doublex1,doublex2,doubleh3)//用弦截法计算B2的值,输入区间[x1,x2]和H3,输出B2
y1=cszl2(x1,h3);
@'
i_diedai_root2++;
if(i_diedai_root2>
x=(x1*cszl2(x2,h3)-x2*cszl2(x1,h3))/(cszl2(x2,h3)-cszl2(x1,h3));
y=cszl2(x,h3);
doubletrendfit(doublex)
if(x<
=0.55)
return(202.21*x+57.015);
=1.2)
return1394.4*x*x*x-2534*x*x+1827.7*x-304.98;
=1.4)
return6220.1*x*x-13217*x+7561;
=1.7)
//return-3584200*pow(x,6)+30547000*pow(x,5)-108050000*x*x*x*x+203090000*x*x*x-214030000*x*x+119920000*x-27918000;
//return67219*pow(x,4)-296310*x*x*x+475470*x*x-32210*x+75104;
return0.2454*exp(6.0327*x);
return56450*x-89188;
doubleb2h(doubleb)//计算磁场强度H,输入磁感应强度B,输出磁场强度H
if(b>
=0)returntrendfit(b);
elsereturn-trendfit(-b);
计算结果(设定收敛精度10^-12):
中间过程略,最后结果为:
Φ1=0.000909140Wb,Φ2=-0.00133393Wb,Φ3=0.00224307Wb
由验算结果,与原给定结果相比,差别较小,小于10^-13,因而计算所得的结果很准确。
三、设计总结
课程设计任务分配:
求解题目1的
(1)、
(2)问:
邱天
画出题目的磁路图:
彭鸿昌
磁化曲线线性拟合:
李彦青
编写程序求解题目2的I1和Φ1:
彭永晶
编写程序求解题目3的Φ1和Φ2:
张丰伟
课设报告总编排:
彭永晶、张丰伟
课设心得:
彭鸿昌:
这次课程设计温习了原来学过的知识,并将它们和编程,画图结合了起来。
课程设计中的磁路图就是我用CAD画的。
一开始并不大会,但是通过琢磨和咨询,慢慢地熟悉了起来。
后来终于将它完整地画了出来。
在后续课设任务中,组员们都很认真地在做这次课设。
总的来说,这次课程设计不仅锻炼了自身的能力,还培养了我们的团队合作精神。
邱天:
通过这次电机课程设计,我不仅巩固了基础知识,还能学以致用,将其用在解决具体问题上。
这次课设从基础计算,资料搜集,程序汇编,无一不凝聚了我组组员的心血,我们不仅锻炼了团队合作,还锻炼了独立思考解决问题的能力,总而言之,这次课设全面地锻炼了我们的能力,令我们受益颇深。
李彦青:
题目是熟悉的磁路计算。
已知Φ求F可通过方程顺利求