当前位置:文档之家› 二元多项式加减运算-课程设计报告

二元多项式加减运算-课程设计报告

二元多项式加减运算-课程设计报告
二元多项式加减运算-课程设计报告

题目:二元多项式加减运算问题

设计程序以实现降幂建立、输出、加、减任意两个二元多项式。要求:(1)所设计的数据结构应尽可能节省存储空间。(2)程序的运行时间应尽可能少。

1、问题分析和任务定义

此程序需要完成以下的要求:按照指数降序排列建立多项式并且输出;能够完成两个多项式的相加、相减运算,并将结果输出。在这个程序中,我采用链表的数据结构来实现二元多项式的建立和表示。然后进行降序的排列,完成二元多项式的两个基本运算:加法和减法。最后同样按照降序,对得到的结果多项式进行排列,测试用例设置为二组,分别为:第一组为系数不同而x 和y 的指数各自相同;第二组为系数和指数各不相同。 举一个例子如下: 第一组数据:3

3

3

7

4

7

2

6587y

y

y

y

x x

x

x

+++

第二组数据:

7

3

2

4

2

2

7

5

254y y y y x x x x +++

降幂排序后的结果: 第一组数据:3

3

7

3

74

2

8576y

y

y

y

x x

x

x

+++

第二组数据:

247

37

5

2

2

542y y y y x x x x +++

两组多项式相加结果:3

2

4

3

7

3

3

77

5

4

2

2

854596y

y y y y y y x x

x

x x x x ++++++ 两组多项式相减结果:

3

2

4

3

7

33

7

7

5

4

2

2

854556y

y

y

y

y

y

y

x x

x

x

x

x

x

--++-+

现在,我要通过程序来实现以上的过程将其在计算机上完成运算最终成功得到这样的结果。

2、数据结构的选择和概要设计

为了解决这个问题,我选择的数据结构为链表,原因是:链表中的结点可以动态生成的,用链表结构可以灵活地添加或删除结点。另外,用链表结构来存储这样的数据可以大大地减少空间复杂度,因此本题在设计算法时使用的就是链表地结构,存放多项式的链表结点结构

struct LinkList{

int coef; //系数 int xexp; //x 指数 int yexp; //y 指数 LinkList *next; //指针 }; //定义结点 这是链表的最基本的构成单元——结点。

在输入多项式时,考虑到输入多项式的形式,本程序是分别输入各个多项式中每一个项的系数,x 指数,y 指数,然后在输出时再把多项式的各个关键字组合在一起。 建立链表的时候,通过定义MAX 的值就可以一次性地告诉计算机,本次运行程序需要开辟空间的大小。同时可以改变相应的MAX 大小,来改变其空间的大小。由于是2个多项式相加相减的运算,所以设定MAX1和MAX2分别来定义。然而,二元多项式的加减在运算中难免

会遇到两种极端情况,即:没有一个是同类项或者全是同类项。如果遇到“没有一个是同类项”的情况,那么,运算后的这个链表的长度就是原来的2个多项式之和,所以直接将运算后得到的链表长度开辟的空间定义为MAX1+MAX2,已免出现溢出错误。在这一点上,链表的插入结点的操作简单的优势就体现出来了,然而对于减法的情况,同理,合并同类项的工作对于多项式来说也就是结点的删除工作。

本程序的几个重要的问题按顺序是:

1、建立链表

2、多项式的输入形式、显示以及显示的形式

3、如何按降序排序

4、多项式加法函数

5、多项式减法函数

6、选择菜单。

以上这六个问题需要最终分别用几个函数来分别实现。另外加上一个主函数。这几个函数分别为:

void CreateList(LinkList *&L,int a[],int b[],int c[], int n) //创建链表

void sort(LinkList *&L) //降序排序

void ListAdd(LinkList *&L1,LinkList *&L2,LinkList *&L3) //两个多项式相加

void ListSubtract(LinkList *&L1,LinkList *&L2,LinkList *&L3)

void DisplayList(LinkList *&L) //显示多项式

int menu_select()//菜单

这些函数连同主函数在一起构成整个程序,其中,主函数依次调用建表函数、排序函数、显示函数、菜单函数,菜单函数提示用户选择来调用加法函数和减法函数,加法函数和减法函数中都分别依次调用建表函数、排序函数和显示函数,另外菜单函数还自己调用自己,即递归的调用。

3、详细设计和编码

本程序的有6个模块,分别为1、建表 2、排序 3、加法 4、减法 5、显示 6、选择。

各模块的详细分析设计如下:

1、建表

对于输入的2个多项式,都采用链表的存储方式,运算后的多项式也一样地采用这种方式来存储。在建立链表结构时,根据题目的情况,我选择了头插法来建立链表,算法为:首先建立一个只含有头结点的空单链表,然后读入数据,生成新结点,并将新结点总是插入到头结点之后,直到读满之前设置的链表的长度。系数,x指数,y指数分别用a[],x[],y[]三个数组的形式进行读入。

头插法建单链表的算法时间复杂度为O(n)。

创建链表函数为:

void CreateList(LinkList *&L,int a[],int x[],int y[], int n)//定义三个数组用于存储系数、x指数、y指数

{LinkList *s;

int i;

L=(LinkList *)malloc(sizeof(LinkList));//开辟空间存放链表

L->next=NULL;

for(i=0;i

{

s=(LinkList *)malloc(sizeof(LinkList));

s->coef=a[i];

s->xexp=x[i];

s->yexp=y[i];

s->next=L->next;//头插法建链表的时间复杂度是O(n)

L->next=s;

}

}

2、排序

降序排序函数的主要算法思想:先检查p 结点是不是最后一个结点,如果不是,就向后继续查找,直到找到最后一个结点,把这个结点中的指数和前一个结点中的指数进行比较,如果这个指数比前一个结点的指数大,说明这两个结点按升序排列,需要改变位置,于是执行指针的变换操作,使得两个结点改成降序排列,以此达到排序的目的。

以下是排序函数:

//降序排序

void sort(LinkList *&L)

{

LinkList *p=L->next,*q,*r;

if(p!=NULL)

{

r=p->next;

p->next=NULL;

p=r;

while(p!=NULL)

{

r=p->next;

q=L;

while(q->next!=NULL&&((q->next->xexp>p->xexp)||(q->next->xexp==p->xexp&&q->next ->yexp>p->yexp)))

q=q->next;

p->next=q->next;

q->next=p;

p=r;

}

}

3、加法

两个多项式相加的算法是:两个多项式中,具有相同指数项的,也就是同类项的对应系数相加,若相加和不为零,则合并成加和多项式中的一项,所有指数不相同的项均直接移动至加和多项式中的后面,至于排列,则依据排序函数进行降序排序。

对于两个多项式链表A和B,实现多项式相加时,加和多项式中的结点无需另外生成,可以看成是将多项式B加到多项式A中,最后的加和多项式即是新的多项式A,设p、q分别指向多项式A、B的首元素结点,则比较结点*p、*q的指数项,可以进行以下操作来完成多项式的加法运算:

①若p->expexp,则*p结点应是加和多项式的一项,并将指针p后移。

②若p->exp>q->exp,则*q结点应是加和多项式的一项,将*q结点插入到多项式链表A的*p结点之前,并令指针q在多项式链表B上后移。

③若p->exp=q->exp,则将两个结点的系数相加,若和不为零,则修改*p结点的系数域,释放指针q所指向的结点空间;若和为零,则指针p、q分别在各自的链表上后移,同时释放原先两个指针所指向的结点空间。

④重复上述步骤,若q=NULL,则链表A即为加和多项式链表;若p=NULL,则将链表B中指针q所指向的余下的链表全部插入到链表A的表尾,形成加和多项式链表A.

⑤由于这个题目是二元多项式,要考虑x和y两个元,故而以上四个步骤在实际写程序的时候是按照xexp和yexp两个变量而不是只有一个exp,写成exp是为了说明的时候看得清楚一点。加法算法的时间复杂度取决于链表A和B的项数,若A有n项,B有m项,那么上述算法的时间复杂度为O(n+m).

以下是两个多项式相加函数:

//两个多项式相加

void ListAdd(LinkList *&L1,LinkList *&L2,LinkList *&L3)

{

int coef[MAX1+MAX2],xexp[MAX1+MAX2],yexp[MAX1+MAX2],i=0; //MAX1+MAX2的原因是防止两个多项式中没有任何一个相同

LinkList *p=L1->next,*q=L2->next;

while(p!=NULL&&q!=NULL)

{

if(p->xexpxexp)

{ coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

else if(p->xexp>q->xexp)

{ coef[i]=q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

else if(p->xexp==q->xexp&&p->yexpyexp)

{ coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

else if(p->xexp==q->xexp&&p->yexp>q->yexp)

{ coef[i]=q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

else if(p->xexp==q->xexp&&p->yexp==q->yexp)

{

coef[i]=p->coef+q->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

q=q->next;

}

}

while(p!=NULL&&q==NULL)

{

coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

while(q!=NULL&&p==NULL)

{

coef[i]=q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

CreateList(L3,coef,xexp,yexp,i);

sort(L3);

}

4、减法

两个多项式的相减算法和加法函数很类似,主要思想是先将链表B取负,然后执行和加法算法一样的步骤,最后交给排序函数做一次降序排序。

5、显示

显示的格式是:a1*x^b1y^c1+a2*x^b2y^c2+a3*x^b3y^c3+a4*x^b4y^c4

根据依次读入的数据进行显示

6、选择菜单

主要提供用户选择(包含退出功能),两个多项式的和以及两个多项式的差的运算。

4、上机调试过程

1、语法错误及修改

由于本算法使用了链表的方式建立二元多项式,所以程序的空间是动态的生成的,而且链表可以灵活地添加或删除结点,所以使得程序得到简化。出现的语法问题主要在于子函数和变量的定义,降序排序,关键字和函数名称的书写,以及一些库函数的规范使用,这些问题均可以根据编译器的警告提示,对应的将其解决。

2、逻辑问题及其调整

编写程序的过程中遇到许多问题,首先在选择数据结构的时候选择了链表,但是链表的排序比较困难,特别是在多关键字的情况下,在一种关键字确定了顺序以后,在第一关键字相同的时候,按某种顺序对第二关键字进行排序。在此程序中共涉及到3个量数,即:系数,x的指数和y的指数,而关键字排是按x的指数和y的指数来看,由于要求是降幂排序且含有2个关键字,所以我先选择x的指数作为第一关键字,先按x的降序来排序,当x的指数相同时,再以y为关键字,按照y的指数大小来进行降序排列。

在加法函数的编写过程中也遇到了大量的问题,由于要同时比较多关键字,而且设计中涉及了数组和链表的综合运用,导致反复修改了很长的时间才完成一个加法的设计,现在仍然有一个问题存在,若以0为系数的项是首项则显示含有此项,但是运算后则自动消除此项,这样是正确的。但是当其不是首项的时候,加法函数在显示的时候有0为系数的项时,0前边不显示符号,当然,这样也可以理解成当系数为0时,忽略这一项。

3、时间,空间性能分析

链表的建立使用的是头插法建表,时间复杂度为O(n),本程序采用链表存储。单链表的每个结点都有一个指针空间,相当于总共增加了n个整型变量,在空间复杂度上为O(n)。加法函数的时间复杂度取决于多项式A和B的项数,若A有n项而B有m项,那么本算法的时间复杂度为O(n+m),空间复杂度为O(n+m),减法函数由于与加法函数结构相同,只是符号改换,故而时间空间复杂度同加法函数,分别为时间O(n+m),空间O(n+m)。

在设计减法函数的时候由于考虑不够充分就直接编写程序,走了很多弯路,不得不停下来仔细研究算法,后来发现由于前边的加法函数完全适用于减法,只不过是将二元多项式B 的所有项取负再用加法函数即可,可见算法的重要性不低于程序本身。

4、经验和体会

在调试过程中,发生了许多小细节上的问题,提醒了我在以后编程的时候要注意细节,即使是一个括号的遗漏或者一个字符的误写都会造成大量的错误,浪费许多时间去寻找与修改,总结的教训就是写程序的时候要仔细。

还有一个体会就是格式和注释,由于平时不注意格式和注释,导致有的时候检查和调试的时候很不方便,有的时候甚至刚刚完成一部分的编辑,结果一不注意,忘记了这一部分程序的功能,修改的时候也有不小心误删的情况出现。如果注意格式风格和养成随手加注释的习惯,就能减少这些不必要的反复和波折。还有就是在修改的时候,要注意修改前后的不同点在哪里,改后调试结果要在原有的基础上更加精确。

5、测试结果及其分析。

按照前述提供的测试用例输入程序进行结果测试。测试结果如下:

这一组数据设置为系数不同而x和y的指数各自相同,结果是程序合并同类项,两个多项式的x和y的指数相同的项的系数相加成为新的多项式,均与试验结果中的数据相同(注:程序的运行结果截图在下一页)

由此,第一组指数相同的2个多项式成功完成运算。

下面,我来用第二组数据来进行测试。这一组数据设置为系数相同而x和y的指数各自不相同,结果是程序找不到同类项,按两个多项式的x和y的指数排列相加成为新的多项式。由于没有同类项,所以只好依次相加所有的项。

(注:程序的运行结果截图在下一页)

由此,第二组指数不同的2个多项式成功完成运算。

6、用户使用说明

用户使用之前需要设置MAX的值,如果不需要改变原始的设置,直接打开“二元多项式计算.exe”,界面欢迎使用二元多项式加减计算器,一次性输入第一个多项式所有的系数,按enter输入,再一次性输入x的指数和y的指数,接着是重复前一系列步骤输入第二个多项式的所有信息,按enter输入。

程序自动降幂排列第一个和第二个多项式,并分别为用户表示出来,然后程序提示菜单为:

1、两个多项式的和

2、两个多项式的差 0、退出用户根据需要键入选项,程序将为用户分别显示这两个多项式的1、两个多项式的和或2、两个多项式的差。用户如有需要记录,可以自行记录结果。最后提醒:本程序不提供文件保存的功能。

7、参考文献

[1] 王昆仑李红《数据结构与算法》中国铁道出版社,2007年6月第1版

[2] 潭浩强《C程序设计》清华大学出版社,2005年7月第3版

[3] 潭浩强《C程序设计题解与上机指导》清华大学出版社,2005年7月第3版

[4] 郑莉董渊张瑞丰《C++语言程序设计》清华大学出版社,2003年12月第3版

[5] 严蔚敏吴伟民《数据结构》清华大学出版社,1997年4月第1版

[6] 严蔚敏吴伟民米宁《数据结构题集》清华大学出版社,1987年4月第1版

[7] 徐孝凯《数据结构实用教程》清华大学出版社2001年10月第1版

8、附录(源程序带注释)

#include

#include

#define MAX1 4

#define MAX2 4

//定义结点

struct LinkList{

int coef; //系数

int xexp; //x指数

int yexp; //y指数

LinkList *next;//指针

};

//创建链表

void CreateList(LinkList *&L,int a[],int x[],int y[], int n)

//定义三个数组用于存储系数、x指数、y指数

{

LinkList *s;

int i;

L=(LinkList *)malloc(sizeof(LinkList));//开辟空间存放链表

L->next=NULL;

for(i=0;i

{

s=(LinkList *)malloc(sizeof(LinkList));

s->coef=a[i];

s->xexp=x[i];

s->yexp=y[i];

s->next=L->next;

L->next=s;

}

}

//降序排序

void sort(LinkList *&L)

{

LinkList *p=L->next,*q,*r;

if(p!=NULL)

{

r=p->next;

p->next=NULL;

p=r;

while(p!=NULL)

{

r=p->next;

q=L;

while(q->next!=NULL&&((q->next->xexp>p->xexp)||(q->next->xexp==p->xexp&&q->next ->yexp>p->yexp)))

q=q->next;

p->next=q->next;

q->next=p;

p=r;

}

}

}

//两个多项式相加

void ListAdd(LinkList *&L1,LinkList *&L2,LinkList *&L3)

{

int coef[MAX1+MAX2],xexp[MAX1+MAX2],yexp[MAX1+MAX2],i=0;

LinkList *p=L1->next,*q=L2->next;

while(p!=NULL&&q!=NULL)

{

if(p->xexpxexp)

{

coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

else if(p->xexp>q->xexp)

{

coef[i]=q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

else if(p->xexp==q->xexp&&p->yexpyexp)

{

coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

else if(p->xexp==q->xexp&&p->yexp>q->yexp)

{

coef[i]=q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

else if(p->xexp==q->xexp&&p->yexp==q->yexp) {

coef[i]=p->coef+q->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

q=q->next;

}

}

while(p!=NULL&&q==NULL)

{

coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

while(q!=NULL&&p==NULL)

{

coef[i]=q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

CreateList(L3,coef,xexp,yexp,i);

sort(L3);

}

//两个多项式相减

void ListSubtract(LinkList *&L1,LinkList *&L2,LinkList *&L3) {

int coef[MAX1+MAX2],xexp[MAX1+MAX2],yexp[MAX1+MAX2],i=0;

LinkList *p=L1->next,*q=L2->next;

while(p!=NULL&&q!=NULL)

{

if(p->xexpxexp)

{

coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

else if(p->xexp>q->xexp)

{

coef[i]=-q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

else if(p->xexp==q->xexp&&p->yexpyexp)

{

coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

else if(p->xexp==q->xexp&&p->yexp>q->yexp)

{

coef[i]=-q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

else if(p->xexp==q->xexp&&p->yexp==q->yexp)

{

coef[i]=p->coef-q->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

q=q->next;

}

}

while(p!=NULL&&q==NULL)

{

coef[i]=p->coef;

xexp[i]=p->xexp;

yexp[i]=p->yexp;

i++;

p=p->next;

}

while(q!=NULL&&p==NULL)

{

coef[i]=-q->coef;

xexp[i]=q->xexp;

yexp[i]=q->yexp;

i++;

q=q->next;

}

CreateList(L3,coef,xexp,yexp,i);

sort(L3);

}

//显示多项式

void DisplayList(LinkList *&L)

{

LinkList *p=L->next;

printf("%dx^%dy^%d",p->coef,p->xexp,p->yexp); p=p->next;

while(p!=NULL)

{

{

if(p->coef>0)

printf("+%dx^%dy^%d",p->coef,p->xexp,p->yexp); else

printf("%dx^%dy^%d",p->coef,p->xexp,p->yexp); }

p=p->next;

}

}

//菜单

int menu_select()

{

int choose;

printf("\n\t\t*******************************\n");

printf("\t\t\t1、两个多项式的和\n");

printf("\t\t\t2、两个多项式的差\n");

printf("\t\t\t0、退出\n");

printf("\t\t\t请选择(1或2或0)\n");

printf("\t\t******************************\n");

for( ; ; )

{

scanf("%d",&choose);

if(choose<0||choose>2)

printf("\t\t\t输入有误,重新选择\n");

else

break;

}

return choose;

}

//主函数

void main()

{

int coef[MAX1],xexp[MAX1],yexp[MAX1],i=0;

LinkList *L1,*L2,*LSum;

printf("输入第一个多项式的所有系数(%d个):\n",MAX1); //输入第一个多项式的系数for(i=0;i

scanf("%d",&coef[i]);

printf("输入第一个多项式所有的x幂(%d个):\n",MAX1); //输入第一个多项式的x幂for(i=0;i

scanf("%d",&xexp[i]);

printf("输入第一个多项式所有的y幂(%d个):\n",MAX1); //输入第一个多项式的y幂for(i=0;i

scanf("%d",&yexp[i]);

CreateList(L1,coef,xexp,yexp,MAX1);

printf("\n输入第二个多项式的所有系数(%d个):\n",MAX2); //输入第二个多项式的系数for(i=0;i

scanf("%d",&coef[i]);

printf("输入第二个多项式所有的x幂(%d个):\n",MAX2); //输入第二个多项式的x幂for(i=0;i

scanf("%d",&xexp[i]);

printf("输入第二个多项式所有的y幂(%d个):\n",MAX2); //输入第二个多项式的y幂for(i=0;i

scanf("%d",&yexp[i]);

CreateList(L2,coef,xexp,yexp,MAX2);

printf("\n\n降幂显示第一个多项式:\n"); //降幂显示第一个多项式

sort(L1);

DisplayList(L1);

printf("\n\n降幂显示第二个多项式:\n"); //降幂显示第二个多项式

sort(L2);

DisplayList(L2);

printf("\n");

for(; ;)

{

switch(menu_select())

{

case 1:

printf("\n求两个多项式的和并显示:\n"); //求两个多项式的和并显示 ListAdd(L1,L2,LSum);

DisplayList(LSum);

printf("\n");

break;

case 2:

printf("\n求两个多项式的差并显示:\n"); //求两个多项式的差并显示ListSubtract(L1,L2,LSum);

DisplayList(LSum);

printf("\n"); break;

case 0:

default :printf("退出!\n");

break;

}

}

}

计算器课程设计报告

课设报告 福建工程学院软件学院 题目:汇编计算器 班级: 1301 姓名 学号: 指导老师: 日期:

目录 1、设计目的 (3) 2、概要设计 (3) 2.1 系统总体分析 (3) 2.2 主模块框图及说明 (3) 3、详细设计 (4) 3.1 主模块及子模块概述 (4) 3.2各模块详运算 (4) 4、程序调试 (7) 4.1 运行界面分析 (7) 算法分析 (7) 4.2 调试过程与分析 (9) 5、心得体会 (11) 5.1 设计体会 (11) 5.2 系统改进 (11) 附录: (11)

1、设计目的 本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。 2、概要设计 用8086汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“=”后输出十进制表示的运算结果。 2.1 系统总体分析 在8086的操作环境下,该计算器分成输入,数据存储,运算功能,输出几个大模块,实现了使用者使用该计算器时输入一个算式,能让系统进行计算。此计算器的实现功能是基本的数学的四则运算,结果范围在0~65535。 2.2 主模块框图及说明 此流程图简要的表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的一个总体的框架。 程序流程图说明:通过流程图,可以看出程序运行时,首先输出提示语气,当用户输入后,程序根据所输入内容进行判断,通过判断的结果来决定调用哪个功能模块,首要先要要判断的是否为0-9,“+”“-”“*”“/”这些字符,若不是就会报错,实则根据运算符号调用其功能模块完成运算。最后将运算的结果显示在主频幕上,返回主程序,使用户可以重新输入。

电力系统潮流计算课程设计报告

课程设计报告 学生姓名:学号: 学院:电气工程学院 班级: 题目: 电力系统潮流计算 职称: 副教授 指导教师:李翠萍职称: 副教授 2014年 01月10日

1 潮流计算的目的与意义 潮流计算的目的:已知电网的接线方式与参数及运行条件,计算电力系统稳态运行各母线电压、个支路电流与功率及网损。对于正在运行的电力系统,通过潮流计算可以判断电网母线电压、支路电流和功率是否越限,如果有越限,就应采取措施,调整运行方式。对于正在规划的电力系统,通过潮流计算,可以为选择电网供电方案和电气设备提供依据。潮流计算还可以为继电保护和自动装置定整计算、电力系统故障计算和稳定计算等提供原始数据。 潮流计算的意义: (1)在电网规划阶段,通过潮流计算,合理规划电源容量及接入点,合理规划网架,选择无功补偿方案,满足规划水平的大、小方式下潮流交换控制、调峰、调相、调压的要求。 (2)在编制年运行方式时,在预计负荷增长及新设备投运基础上,选择典型方式进行潮流计算,发现电网中薄弱环节,供调度员日常调度控制参考,并对规划、基建部门提出改进网架结构,加快基建进度的建议。 (3)正常检修及特殊运行方式下的潮流计算,用于日运行方式的编制,指导发电厂开机方式,有功、无功调整方案及负荷调整方案,满足线路、变压器热稳定要求及电压质量要求。 (4)预想事故、设备退出运行对静态安全的影响分析及作出预想的运行方式调整方案。 2 潮流计算数学模型 1.变压器的数学模型: 变压器忽略对地支路等值电路:

2.输电线的数学模型: π型等值电路: 3 数值方法与计算流程 利用牛顿拉夫逊法进行求解,用MATLAB 软件编程,可以求解系统潮流分 布根据题目的不同要求对参数进行调整,通过调节变压器变比和发电厂的电压,求解出合理的潮流分布,最后用matpower 进行潮流分析,将两者进行比较。 牛顿—拉夫逊法 1、牛顿—拉夫逊法概要 首先对一般的牛顿—拉夫逊法作一简单的说明。已知一个变量X 函数为: 0)(=X f 到此方程时,由适当的近似值) 0(X 出发,根据: ,......)2,1() ()() ()() () 1(='-=+n X f X f X X n n n n 反复进行计算,当) (n X 满足适当的收敛条件就是上面方程的根。这样的方 法就是所谓的牛顿—拉夫逊法。 这一方法还可以做下面的解释,设第n 次迭代得到的解语真值之差,即) (n X 的误差为ε时,则: 0)()(=+εn X f 把)() (ε+n X f 在) (n X 附近对ε用泰勒级数展开 0......)(! 2)()()()(2 )() () (=+''+ '+=+n n n n X f X f X f X f εεε 上式省略去2ε以后部分 0)()()()(≈'+n n X f X f ε

数值计算方法课程设计(C语言)

数值计算方法课程设计 姓名 学号 成绩

课程实际报告 实验一:秦九韶算法 题目 用选列主元高斯消去法解线性方程组 ???????=+- =-+-=-+-=--02 02 0 21 34343232121x x x x x x x x x x 算法语言: 利用c 语言的知识编写该算法程序 算法步骤叙述: 秦九昭算法的基思路是v[0]=a[0]*x+a[1] v[i]=v[i-1]*x+a[i+1];利用秦九昭算法计算多项式函数。 程序清单: #include void main() { float a[5],x,sum; int i; printf("presase input the value of x="); scanf("%f",&x); for (i =5;i >=0;i --) { printf("please input the value of a%d=",i); scanf("%f",&a[i]); } sum =a[5];

for(i=5;i>=1;i--) {sum=sum*x+a[i-1]; } printf("f(x)=%f/n",sum); } 输出结果计算:

实验总结: 通过运用C 语言,解决了秦九韶算法手写的复杂。为以后的雪地打下基础。 实验二:用选列主元高斯消去法解线性方程组 题目 用选列主元高斯消去法解线性方程组 ???????=+- =-+-=-+-=--02 0 2 0 21 34343232121x x x x x x x x x x 算法步骤叙述 第一步消元——在增广矩阵(A,b )第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b )做初等行变换使原方程组的第一列元素除了第一行的全变为0; 第二步消元——在增广矩阵(A,b )中第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b )做初等行变换使原方程组的第二列元素除了第一和第二行的全变为0; 第三步消元——在增广矩阵(A,b )中第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第三行交换,再对(A,b )做初等行变换使原方程组的第三列第四行元素为0; 第四,按x4-x3-x2-x1的顺序回代求解出方程组的解,x[n]=b[n]/a[n][n],x[i]=(b[i]-Σa[i][j]x[j])/a[i][i],i=n-1,…,2,1 程序清单: #include #include #define N 4 static double A[N][N] = {-3,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2}; static double B[N]={1,0,0,0};

简单计算器c++课程设计

简单计算器 1 基本功能描述 简单计算器包括双目运算符和单目运算符。双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦、阶乘、对数、开方、倒数等运算。可对输入任意操作数包含小数和整数及正数和负数进行以上的所有运算并能连续运算。出现错误会给出提示,同时包含清除、退格、退出功能以及有与所有按钮相对应的菜单项。 2 设计思路 如图1,是输入数据子函数的流程图。打开计算器程序,输入数据,判断此次输入之前是否有数字输入,如果有,则在之前输入的数字字符后加上现有的数字字符;如果没有,则直接使编辑框显示所输入的数字字符。判断是否继续键入数字,如果是,则继续进行前面的判断,如果否,则用UpdateData(FALSE)刷新显示。 如图2,是整个计算器的流程图。对于输入的算式,判断运算符是双目运算符还是单目运算符。如果是双目运算符,则把操作数存入数组a[z+2]中,把运算符存入b[z+1]中;如果是单目运算符,则把字符串转化为可计算的数字,再进行计算。下面判断运算符是否合法,如果合法,则将结果存入a[0],不合法,则弹出对话框,提示错误。结束程序。

输入一个数字 在之前输入的数字字符后面加上现在的数字字符。 Eg :m_str+=”9”。 直接使编辑框显示所输入的数字字符。 Eg :m_str=”9”。 pass3=1表示已有数字输入 开始 之前是否有数字输入? pass3==1? 继续键入数字? 用UpdateData(FALSE)刷新显示 图1 输入数据子函数流程图 Y N Y N

输入开始 双目运算符 是否每一个操作数都存入a[]数组? 把操作数存入a[z+2],把运算符存入b[z+1]。 单目运算符 将字符串转换 为可计算的数进行运算 运算是否合法? 将结果存入a[0] 弹出对话框提示错误 结束Y Y N N 图2 简单计算器总流程图

电力系统潮流计算课程设计报告

课程设计报告 学生:学号: 学院: 班级: 题目: 电力系统潮流计算课程设计

课设题目及要求 一 .题目原始资料 1、系统图:两个发电厂分别通过变压器和输电线路与四个变电所相连。 2、发电厂资料: 母线1和2为发电厂高压母线,发电厂一总装机容量为( 300MW ),母线3为机压母线,机压母线上装机容量为( 100MW ),最大负荷和最小负荷分别为50MW 和20MW ;发电厂二总装机容量为( 200MW )。 3、变电所资料: (一) 变电所1、2、3、4低压母线的电压等级分别为:35KV 10KV 35KV 10KV (二) 变电所的负荷分别为: 60MW 40MW 40MW 50MW (三) 每个变电所的功率因数均为cos φ=0.85; 变电所1 变电所母线 电厂一 电厂二

(四) 变电所1和变电所3分别配有两台容量为75MVA 的变压器,短路损 耗414KW ,短路电压(%)=16.7;变电所2和变电所4分别配有两台容 量为63MVA 的变压器,短路损耗为245KW ,短路电压(%)=10.5; 4、输电线路资料: 发电厂和变电所之间的输电线路的电压等级及长度标于图中,单位长度的电阻为Ω17.0,单位长度的电抗为Ω0.402,单位长度的电纳为S -610*2.78。 二、 课程设计基本容: 1. 对给定的网络查找潮流计算所需的各元件等值参数,画出等值电路图。 2. 输入各支路数据,各节点数据利用给定的程序进行在变电所在某一负荷 情况下的潮流计算,并对计算结果进行分析。 3. 跟随变电所负荷按一定比例发生变化,进行潮流计算分析。 1) 4个变电所的负荷同时以2%的比例增大; 2) 4个变电所的负荷同时以2%的比例下降 3) 1和4号变电所的负荷同时以2%的比例下降,而2和3号变电所的 负荷同时以2%的比例上升; 4. 在不同的负荷情况下,分析潮流计算的结果,如果各母线电压不满足要 求,进行电压的调整。(变电所低压母线电压10KV 要求调整围在9.5-10.5 之间;电压35KV 要求调整围在35-36之间) 5. 轮流断开支路双回线中的一条,分析潮流的分布。(几条支路断几次) 6. 利用DDRTS 软件,进行绘制系统图进行上述各种情况潮流的分析,并进 行结果的比较。 7. 最终形成课程设计成品说明书。 三、课程设计成品基本要求: 1. 在读懂程序的基础上画出潮流计算基本流程图 2. 通过输入数据,进行潮流计算输出结果 3. 对不同的负荷变化,分析潮流分布,写出分析说明。 4. 对不同的负荷变化,进行潮流的调节控制,并说明调节控制的方法,并 列表表示调节控制的参数变化。 5. 打印利用DDRTS 进行潮流分析绘制的系统图,以及潮流分布图。

数值计算方法课程设计

重庆邮电大学 数学与应用数学 专业 《数值计算方法》课程设计 姓名: 李金徽 王莹 刘姝楠 班级: 1131001 1131002 1131002 学号: 2010213542 2010213570 2010213571 设计时间: 2012-6-4 指导教师: 朱伟

一、课程设计目的 在科学计算与工程设计中,我们常会遇到求解线性方程组的问题,对于系数矩阵为低阶稠密矩阵的线性方程组,可以用直接法进行消元,而对于系数矩阵为大型稀疏矩阵的情况,直接法就显得比较繁琐,而迭代法比较适用。比较常用的迭代法有Jacobi 迭代与Gauss - seidel 迭代。本文基于两种方法设计算法,并比较他们的优劣。 二、课程设计内容 给出Jacobi 迭代法和Gauss-Seidel 迭代法求解线性方程组的算法思想和MATLAB 程序实现,并对比分析这两种算法的优劣。 三、问题的分析(含涉及的理论知识、算法等) Jacobi 迭代法 方程组迭代法的基本思想和求根的迭代法思想类似,即对于线性 方程组Ax = b( 其中n n n R b R R A ∈?∈,),即方程组 )1(2211222221211 1212111?? ???? ?=+?++??=+?++=+?++n n nn n n n n n n b x a x a x a b x a x a x a b x a x a x a 将系数矩阵A 写为 )2(000000 21122 12122 11U L D a a a a a a a a a A n n n n nn --≡??? ?? ? ? ??---- ??????? ??----??????? ??= 若选取D M =,则U L A M N +=-=,方程组)1(转化为等价方程组 b x U L Dx ++=)(

单片机计算器的课程设计报告

目录 一、设计任务和性能指标 (1) 1.1设计任务 (2) 1.2性能指标 (2) 二、设计方案 (2) 3 3 4 5 5 6 6 7 7 20 20 20 20 21 参考文献 (21) 附录1、系统硬件电路图 (22) 附录2、硬件实物图 (23) 附录3、器件清单 (24)

一、设计任务和性能指标 1.1设计任务 自制一个单片机最小系统,包括复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。 要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要 显 位 监测模块采用二极管和扬声器(实验室用二极管代替)组成电路。 键盘电路采用4*4矩阵键盘电路。 显示模块采用4枚共阳极数码管和74ls273锁存芯片构成等器件构成。 整个单片机的接口电路: P0用于显示输出; P1用于键扫描输入; P2用于数码管位选控制; P3用于键盘扩展(部分运算符输入);

三.系统硬件设计 3.1单片机最小系统 单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。 主控芯片选取STC89C52RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。 扩展键:“log”,“ln”,“x^2”“小数点”,“开方” 共计25个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0~P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P1口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。 以下为键盘接口电路的硬件电路图

基于matlab--psat软件的电力系统潮流计算课程设计

东北电力大学课程设计改革试用任务书: 电力系统潮流计算课程设计任务书 设计名称:电力系统潮流计算课程设计 设计性质:理论计算,计算机仿真与验证 计划学时:两周 一、设计目的 1.培养学生独立分析问题、解决问题的能力; 2.培养学生的工程意识,灵活运用所学知识分析工程问题的能力 3.编制程序或利用电力系统分析计算软件进行电力系统潮流分析。 二、原始资料 1、系统图:IEEE14节点。 2、原始资料:见IEEE14节点标准数据库 三、课程设计基本内容: 1.采用PSAT仿真工具中的潮流计算软件计算系统潮流; 1)熟悉PSAT仿真工具的功能; 2)掌握IEEE标准数据格式内容; 3)将IEEE标准数据转化为PSAT计算数据; 2.分别采用NR法和PQ分解法计算潮流,观察NR法计算潮流中雅可比矩阵的变化情况, 分析两种方法计算潮流的优缺点; 3.分析系统潮流情况,包括电压幅值、相角,线路过载情况以及全网有功损耗情况。

4.选择以下内容之一进行分析: 1)找出系统中有功损耗最大的一条线路,给出减小该线路损耗的措施,比较各种措施 的特点,并仿真验证; 2)找出系统中电压最低的节点,给出调压措施,比较各种措施的特点,并仿真验证; 3)找出系统中流过有功功率最大的一条线路,给出减小该线路有功功率的措施,比较 各种措施的特点,并仿真验证; 5.任选以下内容之一作为深入研究:(不做要求) 1)找出系统中有功功率损耗最大的一条线路,改变发电机有功出力,分析对该线路有 功功率损耗灵敏度最大的发电机有功功率,并进行有效调整,减小该线路的损耗; 2)找出系统中有功功率损耗最大的一条线路,进行无功功率补偿,分析对该线路有功 功率损耗灵敏度最大的负荷无功功率,并进行有效调整,减小该线路的损耗; 3)找出系统中电压最低的节点,分析对该节点电压幅值灵敏度最大的发电机端电压, 并有效调整发电机端电压,提高该节点电压水平; 四、课程设计成品基本要求: 1.绘制系统潮流图,潮流图应包括: 1)系统网络参数 2)节点电压幅值及相角 3)线路和变压器的首末端有功功率和无功功率 2.撰写设计报告,报告内容应包括以下几点: 1)本次设计的目的和设计的任务; 2)电力系统潮流计算的计算机方法原理,分析NR法和PQ分解法计算潮流的特点; 3)对潮流计算结果进行分析,评价该潮流断面的运行方式安全性和经济性; 4)找出系统中运行的薄弱环节,如电压较低点或负载较大线路,给出调整措施; 5)分析各种调整措施的特点并比较它们之间的差异; 6)结论部分以及设计心得; 五、考核形式 1.纪律考核:学生组织出勤情况和工作态度等; 2.书面考核:设计成品的完成质量、撰写水平等; 3.答辩考核:参照设计成品,对计算机方法进行电力系统潮流计算的相关问题等进行答辩; 4.采用五级评分制:优、良、中、及格、不及格五个等级。

JAVA实现计算器课程设计

JAVA实现计算器课程设计 计算机科学系 计应0701班 指导老师:刘其昌 设计人员:陈秀桃 设计日期:2009年11月10日——2009年12月20日 计算器的设计 目录 第一章绪 论 ..................................................................... .. (2)

1.1 开发环 境 ..................................................................... . (2) 1.2 基本功能介 绍 ..................................................................... ......... 2 第二章系统设 计 ..................................................................... (3) 2.1 系统流程 图 ..................................................................... . (3) 2.2 系统功能框 图 ..................................................................... (3) 2.3 需求分 析 ..................................................................... ................ 4 第三章软件设 计 ..................................................................... (5) 3.1 界面设 计 ..................................................................... . (5) 3.2 代码设 计 .....................................................................

android简单计算器课程设计.

摘要 Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。并且具有很强的使用性。 关键字:Android Java基础计算器

目录 第1章开发工具与环境 (1) 1.1 Android平台 (1) 1.2 Java开发环境 (1) 1.3 Eclipse (1) 1.4 Android程序基础—Android应用程序的构成 (2) 第2章系统分析与设计 (4) 2.1系统的可行性分析 (4) 2.2 系统的需求分析 (4) 2.3 系统的优势 (4) 2.4 系统的流程图 (5) 第3章系统详细设计 (6) 3.1 动作Activity (6) 3.2 布局文件XML (6) 3.3 Activity的详细设计 (7) 3.2 布局文件XML的详细设计 (21) 3.2 系统的运行结果 (24) 结论 (25) 参考文献 (26)

第1章开发工具与环境 1.1 Android平台 1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。 2.Android是一个真正意义上的开放性移动设备综合平台。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 3.所有的Android应用之间是完全平等的。 4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。 5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。 1.2 Java开发环境 Java技术包含了一个编程语言及一个平台。Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。1996年1月发布了JDK1.1版本,一门新语言自此走向世界。之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。 1.3 Eclipse

科学计算器课程设计报告C课程设计修订稿

科学计算器课程设计报告C课程设计 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

计算机科学与技术学部 C++课程设计 题目科学计算器 学部计算机科学与技术 班级计科1103 指导教师李军 姓名刘明 学号 2012年6月27日

摘要 计算器的产生和发展是建立在电子计算机基础之上的。硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。 在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁美观,使人们能快捷简单的操作。能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。此系统在Windows 7环境下,使用VC++ 进行编写。 简单计算器包括双目运算和单目运算功能,双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数,进制转换等运算。可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。并且包含清除,退格功能等。我们所做的计算器其功能较Windows 7下的计算器还是很不够多,没有其菜单的实现功能项,没有其小巧的标准计算器。 关键词:计算器;运算;VC++等

东北电力大学电力系统潮流计算课程设计报告书

目录 一、设计任务 (1) 1.1 课程设计要求 (1) 1.2 课程设计题目 (1) 1.3 课程设计基本容 (2) 二、问题分析 (3) 2.1 节点设置及分类 (3) 2.2 参数求取 (3) 2.3 计算方法 (4) 三、问题求解 (7) 3.1 等值电路的计算 (7) 3.2画出系统等值电路图: (7) 3.3 潮流计算 (8) 四、误差分析 (29) 五、心得体会及总结 (38) 附录: (39) 参考文献 (39) 程序 (39)

电力系统潮流计算课程设计 一、设计任务 1.1 课程设计要求 1、在读懂程序的基础上画出潮流计算基本流程图 2、通过输入数据,进行潮流计算输出结果 3、对不同的负荷变化,分析潮流分布,写出分析说明。 4、对不同的负荷变化,进行潮流的调节控制,并说明调节控制的方法,并 列表表示调节控制的参数变化。 5、打印利用DDRTS进行潮流分析绘制的系统图,以及潮流分布图。 1.2 课程设计题目 系统图:两个发电厂分别通过变压器和输电线路与四个变电所相连。 变电所1 变电所2 母线电厂一电厂二

发电厂资料: 母线1和2为发电厂高压母线,发电厂一总装机容量为( 300MW ),母线3为机压母线,机压母线上装机容量为( 100MW ),最大负荷和最小负荷分别为50MW 和20MW ;发电厂 二总装机容量为( 200MW )。 变电所资料: (一)变电所1、2、3、4低压母线的电压等级分别为:35KV 10KV 35KV 10KV (二)变电所的负荷分别为:60MW 40MW 70MW 50MW (三)每个变电所的功率因数均为cos φ=0.85; (四)变电所1和变电所3分别配有两台容量为75MVA 的变压器,短路损耗414KW ,短路 电压(%)=16.7;变电所2和变电所4分别配有两台容量为63MVA 的变压器,短路损耗为245KW ,短路电压(%)=10.5; 输电线路资料: 发电厂和变电所之间的输电线路的电压等级及长度标于图中,单位长度的电阻为 Ω17.0,单位长度的电抗为Ω0.402,单位长度的电纳为S -610*2.78。 1.3 课程设计基本容 1. 对给定的网络查找潮流计算所需的各元件等值参数,画出等值电路图。 2. 输入各支路数据,各节点数据利用给定的程序进行在变电所在某一负荷情况下的潮 流计算,并对计算结果进行分析。 3. 跟随变电所负荷按一定比例发生变化,进行潮流计算分析。 1) 4个变电所的负荷同时以2%的比例增大; 2) 4个变电所的负荷同时以2%的比例下降 3) 1和4号变电所的负荷同时以2%的比例下降,而2和3号变电所的负荷同时以 2%的比例上升; 4. 在不同的负荷情况下,分析潮流计算的结果,如果各母线电压不满足要求,进行电 压的调整。(变电所低压母线电压10KV 要求调整围在9.5-10.5之间;电压35KV 要求调整围在35-36之间) 5. 轮流断开支路双回线中的一条,分析潮流的分布。(几条支路断几次) 6. 利用DDRTS 软件,进行绘制系统图进行上述各种情况潮流的分析,并进行结果的比 较。 7. 最终形成课程设计成品说明书。

简易计算器课程设计

评阅教师评语:课程设计成绩 考勤成绩 实做成绩 报告成绩 总评成绩指导教师签名: 课程设计报告 论文题目基于ARM的简易计算器设计 学院(系):电子信息与自动化学院 班级:测控技术与仪器 学生姓名:同组同学: 学号:学号: 指导教师:杨泽林王先全杨继森鲁进时间:从2013年 6 月10 日到2013年 6 月28 日 1

目录 1、封面—————————————————————P1 2、目录—————————————————————P2 3、前言—————————————————————P3 4、关键字————————————————————P3 5、原理与总体方案————————————————P3 6、硬件设计———————————————————P6 7、调试—————————————————————P10 8、测试与分析——————————————————P11 9、总结—————————————————————P13

10、附件—————————————————————P14 前言 近几年,随着大规模集成电路的发展,各种便携式嵌入式设备,具有十分广阔的市场前景。嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。在嵌入式系统中,数据和命令通过网络接口或串行口经过ARM程序处理后,或显示在LCD上,或传输到远端PC上。 本文通过周立功的LPC2106芯片完成的简易计算器,正是对嵌入式应用的学习和探索。 一、摘要: 计算器一般是指“电子计算器”,是能进行数学运算的手持机器,拥有集成电路芯片。对于嵌入式系统,以其占用资源少、专用性强,在汽车电子、航空和工控领域得到了广泛地应用。本设计就是先通过C语言进行相应程序的编写然后在ADS中进行运行最后导入PROTUES进行仿真。最后利用ARM中的LPC2106芯片来控制液晶显示器和4X4矩阵式键盘,从而实现简单的加、减、乘、除等四则运算功能。 关键字:中断,扫描,仿真,计算 二、原理与总体方案: 主程序在初始化后调用键盘程序,再判断返回的值。若为数字0—9,则根据按键的次数进行保存和显示处理。若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零。程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。最后将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。 电路设计与原理:通过LPC2106芯片进行相应的设置来控制LCD显示器。 而通过对键盘上的值进行扫描,把相应的键值通过MM74C922芯片进行运算从而

计算器课程设计报告

高级语言程序(JAVA)课程设计报告 系部名称:商学系专业班级:营销*** 学生姓名:墨璇 墨兰学号: ********** ********** 指导教师:王芬教师职称:讲师 2014年06月26日

目录 一、课程设计目的及意义 .................................... 错误!未定义书签。 二、课程设计任务 .......................................... 错误!未定义书签。 2.1程序设计要求....................................... 错误!未定义书签。 三、课程设计时间 .......................................... 错误!未定义书签。 四、课程设计地点 .......................................... 错误!未定义书签。 五、课程设计内容 .......................................... 错误!未定义书签。 5.1开发工具与平台..................................... 错误!未定义书签。 (1).开发工具 ...................................... 错误!未定义书签。 (2).开发平台 ...................................... 错误!未定义书签。 5.2设计思路........................................... 错误!未定义书签。 5.3 程序测试 .......................................... 错误!未定义书签。 5.4实验总结........................................... 错误!未定义书签。 六、课程设计感想 .......................................... 错误!未定义书签。 七、附录(程序代码) ...................................... 错误!未定义书签。

电力系统潮流计算课程设计(终极版)

目录 摘要................................................. - 1 - 1.设计意义与要求..................................... - 2 - 1.1设计意义 ...................................... - 2 - 1.2设计要求(具体题目)........................... - 2 - 2.题目解析........................................... - 3 - 2.1设计思路 ...................................... - 3 - 2.2详细设计 ...................................... - 4 - 2.2.1节点类型.................................. - 4 - 2.2.2待求量 ................................... - 4 - 2.2.3导纳矩阵.................................. - 4 - 2.2.4潮流方程.................................. - 5 - 2.2.5牛顿—拉夫逊算法.......................... - 6 - 2.2.5.1牛顿算法数学原理:................... - 6 - 2.2.5.2修正方程............................. - 7 - 2.2.5.3收敛条件............................. - 9 - 3.结果分析.......................................... - 10 - 4.小结.............................................. - 11 - 参考文献............................................ - 12 -

计算方法课程设计

数理学院2014级信息与计算科学 课程设计 姓名:刘金玉 学号: 3141301240 班级: 1402 成绩:

实验要求 1.应用自己熟悉的算法语言编写程序,使之尽可能具有通用性。2.上机前充分准备,复习有关算法,写出计算步骤,反复检查,调试程序。(注:在练习本上写,不上交) 3.完成计算后写出实验报告,内容包括:算法步骤叙述,变量说明,程序清单,输出计算结果,结构分析和小结等。(注:具体题目 具体分析,并不是所有的题目的实验报告都包含上述内容!)4.独立完成,如有雷同,一律判为零分! 5.上机期间不允许做其他任何与课程设计无关的事情,否则被发现一次扣10分,被发现三次判为不及格!非特殊情况,不能请 假。旷课3个半天及以上者,直接判为不及格。

目录 一、基本技能训练 (4) 1、误差分析 (4) 2、求解非线性方程 (6) 3、插值 (12) 4、数值积分 (12) 二、提高技能训练 (16) 1、 (16) 2、 (18) 三、本课程设计的心得体会(500字左右) (21)

一、基本技能训练 1、误差分析 实验1.3 求一元二次方程的根 实验目的: 研究误差传播的原因与解决对策。 问题提出:求解一元二次方程20ax bx c ++= 实验内容: 一元二次方程的求根公式为 1,22b x a -+= 用求根公式求解下面两个方程: 2210(1)320(2)1010 x x x x +-=-+= 实验要求: (1) 考察单精度计算结果(与真解对比); (2) 若计算结果与真解相差很大,分析其原因,提出新的算法(如先求1x 再 根据根与系数关系求2x )以改进计算结果。 实验步骤: 方程(1): 根据求根公式,写出程序: format long a=1;b=3;c=-2; x1=((-1)*b+sqrt(b^2-4*a*c))/2*a x2=((-1)*b-sqrt(b^2-4*a*c))/2*a

最新单片机简易计算器课程设计

单片机简易计算器课 程设计

引言 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强。在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS –51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、 NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列。80C51单片机已成为单片机发展的主流。专家认为,虽然世界上的MCU品种繁多,功能各异,开发装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片。 事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台

计算机技术综合课程设计报告

计算机技术综合课程设计 设计题目锅炉液位控制系统学生姓名史婷艳 专业班级自动化1302班学号20134460203 指导老师洪镇南 2017年1 月3日

目录 前言 (2) 1 锅炉汽包水位控制对象与控制指标 (4) 1.1锅炉汽包水位的特征 (4) 1.2汽包水位动态特性 (4) 1.2.1汽包水位在给水流量W作用下的动态特性 (4) 1.2.2汽包水位在蒸汽流量D扰动下的动态特性 (5) 1.2.3燃料量B扰动下汽包水位的动态特性 (6) 2. 汽包水位控制方案 (7) 2.1单冲量控制方式 (7) 2.2 双冲量控制方式 (8) 2.3 三冲量控制方式 (9) 3. 三冲量串级PID控制 (11) 3.1 串级PID控制 (11) 3.2 智能整定PID控制 (12) 4 汽包水位模糊控制器设计及仿真 (12) 4.1 输入输出变量 (12) 4.2 隶属度函数 (15) 4.3基于MATLAB/Simulink 环境建立的系统仿真分析 (16) 4.3.1 基于MATLAB/Simulink 的系统模型 (16)

4.3.2 仿真结果分析 (18) 总结与体会 (18) 参考文献 (20) 前言 锅炉是典型的复杂热工系统,目前,中国各种类型的锅炉有几十万台,由于设备分散、管理不善或技术原因,使大多数锅炉难以处于良好工况,增加了锅炉的燃料消耗,降低了效率。同时,锅炉工作过程中各项指标的调节难以建立数学模型,具有非线性、不稳定性、时滞等特点,所以如何改善对锅炉的控制,保证其正常工作,提高效率一直是人们关注的焦点。而汽包液位是锅炉安全、稳定运行的重要指标,保证液位在给定范围内,对于高蒸汽品质、减少设备损耗和运行损耗、确保整个网络安全运行具有要意义。 现代锅炉的特点之一就是蒸发量显著提高,汽包容积相对变小,水位变化速度很快,稍不注意就容易造成汽包满水或者烧成干锅,这都对汽包液位控制系统提出了更高的要求。汽包液位过高,会影响汽包内汽液分离效果,使汽包出口的饱和蒸汽带水增多,蒸汽带水会使汽轮机产生水冲击,引起轴封破损、叶片断裂等事故。同时会使饱和蒸汽中含盐量增高,降低过热蒸汽品质,增加在过热器管壁和汽轮机叶片上的结垢。水位过低,则可能破坏自然循环锅炉汽水循环系统中某些薄弱环节,以致局部水冷管壁被烧坏,严重时会造成爆炸事故。 目前,对汽包液位位控制大多采用常规PID控制方式,从控制方式来看,它们要么系统结构简单成本低,不能有效的控制锅炉汽包“虚假水位”现象,要么能够在一定程度上控制“虚假现象”,系统却过于复杂,成本投入过大。常用的蒸汽锅炉液位调节系统有三种基本结构:单冲量调节系统结构、双冲量调节系统结构、串级三冲量调节系统结

相关主题
文本预览
相关文档 最新文档