当前位置:文档之家› 计算机仿真排队系统实验报告(附代码)

计算机仿真排队系统实验报告(附代码)

计算机仿真排队系统实验报告(附代码)
计算机仿真排队系统实验报告(附代码)

计算机仿真实验报告

第一题

1.作业内容

应用排队系统流程图,用C语言编制仿真程序,求解以下问题。

修理店只有一个修理工,来修理的顾客到达次数服从泊松分布,平均4人/h;修理时间服从指数分布,平均需6min。试求(随机数发生器采用float lcgrand(int stream) ,种子stream 为自己学号的最后两位。):

①修理店空闲的概率;

②店内有三个顾客的概率;

③店内至少有一个顾客的概率;

④在店内顾客的平均数;

⑤顾客在店内的平均逗留时间;

⑥顾客必须在店内消耗15分钟以上的概率。

统计量实现算法:

①修理店空闲的概率;

p1=1-area_server_status/sim_time

area_server_status:总服务时间(即修理工在这段仿真时间里非空闲时间)

sim_time:总仿真时间

用1减去非空闲概率,即为空闲概率。

②店内有三个顾客的概率;

p2=Three_people_time/sim_time

增加变量Three_people_time,即有三个顾客在店内的时间。

三个顾客在店里,也就是说一个顾客在理发,两个人在排队,此时,无论是来一个新的客人或者离开一个客人,都会破坏这种三个人的状态,所以我们每次要统计的,就是这种三个人的状态持续的时间。因此,用到的是time_since_last_event这个变量,该变量用于统计两种状态(事件,包括离开和到来)之间的事件。因此,在每次计算完time_since_last_even t之后,考察队伍中的人数是否为2,若为2,则把该段time_since_last_event加到Three_pe

ople_time中。仿真结束时,用Three_people_time/总仿真时间,即为店内有三个顾客的概率。

③店内至少有一个顾客的概率;

p3=p3=1-idle_time/sim_time

增加变量idle_time,即店里空闲的概率(没有顾客),用1减去一个顾客都没有的概率,就是至少有一个顾客的概率。

判断店里空闲的方法是,如果当前有一个顾客来了,他不需要排队,就意味着这之前店里是空闲着的。这里仍用到time_since_last_event,在这个客人来之前的这段时间店里空闲,因此把这个时间段加给idle_time,以此累加,最后得到总的空闲时间。

④在店内顾客的平均数;

mean_customer=1.0*num_custs_delayed/sim_time

在这里我计算的是店里平均每分钟的顾客数(包括等待的和正在理发的)。num_cust_delay ed是在这段仿真时间里总共出现的顾客,除以仿真时间,就是店内顾客平均数。

⑤顾客在店内的平均逗留时间;

mean_stay_time=(area_num_in_q+area_server_status)/(1.0*num_custs_delayed)

对于任意一位顾客,他在店里逗留的时间=排队时间+理发时间。area_num_in_q统计的是队列中的顾客等待的总时间,而area_server_status统计的是所有顾客理发的总时间,相加就是所有顾客在店里逗留的时间,除以顾客的人数,就是顾客平均逗留时间。

⑥顾客必须在店内消耗15分钟以上的概率。

p6=1.0*count15/num_custs_delayed

增加变量count15,用于统计在店内消耗15分钟以上的顾客人数,再增加变量single_cust_t ime,用于统计单个顾客在店内消耗的时间。

这里有两种情况。

(1)不用排队。那么该顾客在店里消耗的时间就是理发时间,即single_cust_time=time_n ext_event[2]-sim_time。time_next_event[2]=sim_time+expon(mean_service)。

(2)要排队。那么single_cust_time=delay+time_next_event[2]-

sim_time。delay是当前有一位顾客离开时,得到的下一位将要理发的顾客(即队首顾客)的等待时间。每一位顾客到店里时都会有一个time_arrival[]将其抵达时刻记录下来,因此,轮到他时,用sim_time减去time_arrival[]就得到了他等待的时间。等待时间加上理发时间,就是这位顾客在店里消耗的时间。

以上可计算出单个顾客在店里消耗的时间,与15分钟比较,若超过,加入count15中,count 15除以总人数,就是所求概率。

对原程序的修改点:

去掉了文件操作,用提示输入的方式输入参数,可多次输入。增加变量count15,Three_peop le_time,idle_time,single_cust_time。作用见上面六小题具体算法。

代码:

#include

#include

#include

/*#include "lcgrand.h" Header file for random-number generator. */

#define Q_LIMIT 100 /* Limit on queue length. */

#define BUSY 1 /* Mnemonics for server's being busy */

#define IDLE 0 /* and idle. */

int next_event_type, num_custs_delayed, num_delays_required, num_events,

num_in_q, server_status,count15;

float area_num_in_q, area_server_status, mean_interarrival, mean_service,

sim_time, time_arrival[Q_LIMIT + 1], time_last_event, time_next_event[3],

total_of_delays,Three_people_time,idle_time,single_cust_time,time_since_last_eve nt;

/* The following 3 declarations are for use of the random-number generator

lcgrand and the associated functions lcgrandst and lcgrandgt for seed

management. This file (named lcgrand.h) should be included in any program

using these functions by executing

#include "lcgrand.h"

before referencing the functions. */

float lcgrand(int stream);

void lcgrandst(long zset, int stream);

long lcgrandgt(int stream);

void initialize(void);

void timing(void);

void arrive(void);

void depart(void);

void report(void);

void update_time_avg_stats(void);

float expon(float mean);

int main() /* Main function. */

{

/* Specify the number of events for the timing function. */

char choice;

num_events = 2;

while(1)

{

printf("Start to simulate?(Y/N)");

getchar();

scanf("%c",&choice);

if(choice=='N')

exit(0);

printf("\n\nPlease enter the interarrival time(min):");

scanf("%f",&mean_interarrival);

printf("\nPlease enter the serving time(min):");

scanf("%f",&mean_service);

printf("\nPlease enter the number of customer:");

scanf("%d",&num_delays_required);

/* Initialize the simulation. */

initialize();

/* Run the simulation while more delays are still needed. */ while (num_custs_delayed < num_delays_required) {

/* Determine the next event. */

timing();

/* Update time-average statistical accumulators. */

update_time_avg_stats();

/* Invoke the appropriate event function. */

switch (next_event_type) {

case 1:

arrive();

break;

case 2:

depart();

break;

}

}

/* Invoke the report generator and end the simulation. */

report();

}

return 0;

}

void initialize(void) /* Initialization function. */

{

/* Initialize the simulation clock. */

sim_time = 0.0;

/* Initialize the state variables. */

server_status = IDLE;

num_in_q = 0;

time_last_event = 0.0;

/* Initialize the statistical counters. */

num_custs_delayed = 0;

total_of_delays = 0.0;

area_num_in_q = 0.0;

area_server_status = 0.0;

// Initialize the variables I added

Three_people_time = 0.0;

idle_time = 0.0;

count15 = 0;

/* Initialize event list. Since no customers are present, the departure (service completion) event is eliminated from consideration. */

time_next_event[1] = sim_time + expon(mean_interarrival);

time_next_event[2] = 1.0e+30;

}

void timing(void) /* Timing function. */

{

int i;

float min_time_next_event = 1.0e+29;

next_event_type = 0;

/* Determine the event type of the next event to occur. */

for (i = 1; i <= num_events; ++i)

if (time_next_event[i] < min_time_next_event) {

min_time_next_event = time_next_event[i];

next_event_type = i;

}

/* Check to see whether the event list is empty. */

if (next_event_type == 0) {

/* The event list is empty, so stop the simulation. */

printf("\nEvent list empty at time %f", sim_time);

exit(0);

}

/* The event list is not empty, so advance the simulation clock. */

sim_time = min_time_next_event;

}

void arrive(void) /* Arrival event function. */

{

float delay;

/* Schedule next arrival. */

time_next_event[1] = sim_time + expon(mean_interarrival); //compute when the next people arrive

/* Check to see whether server is busy. */

if (server_status == BUSY) {

/* Server is busy, so increment number of customers in queue. */

++num_in_q;

/* Check to see whether an overflow condition exists. */

if (num_in_q > Q_LIMIT) {

/* The queue has overflowed, so stop the simulation. */

printf("\nOverflow of the array time_arrival at");

printf(" time %f", sim_time);

exit(2);

}

/* There is still room in the queue, so store the time of arrival of the arriving customer at the (new) end of time_arrival. */

time_arrival[num_in_q] = sim_time; //record the time when this person arrived

}

else {

/* Server is idle, so arriving customer has a delay of zero. (The

following two statements are for program clarity and do not affect

the results of the simulation.) */

delay = 0.0; //no need to wait

total_of_delays += delay;

idle_time+=time_since_last_event;

/* Increment the number of customers delayed, and make server busy. */

++num_custs_delayed;

server_status = BUSY;

/* Schedule a departure (service completion). */

time_next_event[2] = sim_time + expon(mean_service); //compute the serve time of this person(to know when he will leave)

single_cust_time = time_next_event[2] - sim_time;

if(single_cust_time>=15)

count15++;

}

}

void depart(void) /* Departure event function. */

{

int i;

float delay;

/* Check to see whether the queue is empty. */

if (num_in_q == 0) {

/* The queue is empty so make the server idle and eliminate the

departure (service completion) event from consideration. */

server_status = IDLE;

time_next_event[2] = 1.0e+30;

}

else {

/* The queue is nonempty, so decrement the number of customers in

queue. */

--num_in_q;

/* Compute the delay of the customer who is beginning service and update the total delay accumulator. */

delay = sim_time - time_arrival[1]; //how long does this person wait in the queue

total_of_delays += delay; //the total waiting-time of people in the queue

/* Increment the number of customers delayed, and schedule departure. */

++num_custs_delayed;

time_next_event[2] = sim_time + expon(mean_service); //compute the serve time of this person

single_cust_time = delay + time_next_event[2] - sim_time;

if(single_cust_time>=15)

count15++;

/* Move each customer in queue (if any) up one place. */

for (i = 1; i <= num_in_q; ++i)

time_arrival[i] = time_arrival[i + 1]; //FIFO,after the first

person's departure,the queue moves.

}

}

void report(void) /* Report generator function. */

{

/* Compute and write estimates of desired measures of performance. */ float p1,p2,p3,p6,mean_customer,mean_stay_time;

p1=1-area_server_status/sim_time;

p2=Three_people_time/sim_time;

p3=1-idle_time/sim_time;

mean_customer=1.0*num_custs_delayed/sim_time;

mean_stay_time=(area_num_in_q+area_server_status)/(1.0*num_custs_delayed);

p6=1.0*count15/num_custs_delayed;

printf("\n\nSingle-server queueing system\n\n");

printf("Mean interarrival time%11.3f minutes\n\n",mean_interarrival);

printf("Mean service time%16.3f minutes\n\n", mean_service);

printf("Number of customers%14d\n\n", num_delays_required);

printf("Here is the report:\n");

printf("\n\n修理店空闲的概率为:%11.3f\n\n",p1);

printf("\n\n店内有三个顾客的概率为:%11.3f\n\n",p2);

printf("\n\n店内至少有一个顾客的概率为:%11.3f\n\n",p3);

printf("\n\n在店内顾客的平均数为%11.3f 人每分钟\n\n",mean_customer);

printf("\n\n顾客在店内的平均逗留时间为%11.3f 分钟\n\n",mean_stay_time);

printf("\n\n顾客必须在店内消耗15分钟以上的概率为:%11.3f\n\n",p6);

printf("Time simulation ended%12.3f minutes\n\n",sim_time);

}

void update_time_avg_stats(void) /* Update area accumulators for time-average

statistics. */

{

/* Compute time since last event, and update last-event-time marker. */

time_since_last_event = sim_time - time_last_event;//how much time past from the last event(arrive or departure)

time_last_event = sim_time;//record the moment of last event

if(num_in_q==2)

Three_people_time+=time_since_last_event;

/* Update area under number-in-queue function. */

area_num_in_q += num_in_q * time_since_last_event;//count the total waiting-time of people in the queue

/* Update area under server-busy indicator function. */

area_server_status += server_status * time_since_last_event;//count the total serving-time

}

float expon(float mean) /* Exponential variate generation function. */

{

/* Return an exponential random variate with mean "mean". */

return -mean * log(lcgrand(3));

}

/* Prime modulus multiplicative linear congruential generator

Z[i] = (630360016 * Z[i-1]) (mod(pow(2,31) - 1)), based on Marse and Roberts'

portable FORTRAN random-number generator UNIRAN. Multiple (100) streams are

supported, with seeds spaced 100,000 apart. Throughout, input argument "stream" must be an int giving the desired stream number. The header file

lcgrand.h must be included in the calling program (#include "lcgrand.h")

before using these functions.

Usage: (Three functions)

1. To obtain the next U(0,1) random number from stream "stream," execute

u = lcgrand(stream);

where lcgrand is a float function. The float variable u will contain the

next random number.

2. To set the seed for stream "stream" to a desired value zset, execute

lcgrandst(zset, stream);

where lcgrandst is a void function and zset must be a long set to the

desired seed, a number between 1 and 2147483646 (inclusive). Default

seeds for all 100 streams are given in the code.

3. To get the current (most recently used) integer in the sequence being

generated for stream "stream" into the long variable zget, execute

zget = lcgrandgt(stream);

where lcgrandgt is a long function. */

/* Define the constants. */

#define MODLUS 2147483647

#define MULT1 24112

#define MULT2 26143

/* Set the default seeds for all 100 streams. */

static long zrng[] =

{ 1,

1973272912, 281629770, 20006270,1280689831,2096730329,1933576050, 913566091, 246780520,1363774876, 604901985,1511192140,1259851944, 824064364, 150493284, 242708531, 75253171,1964472944,1202299975, 233217322,1911216000, 726370533, 403498145, 993232223,1103205531, 762430696,1922803170,1385516923, 76271663, 413682397, 726466604, 336157058,1432650381,1120463904, 595778810, 877722890,1046574445, 68911991,2088367019, 748545416, 622401386,2122378830, 640690903, 1774806513,2132545692,2079249579, 78130110, 852776735,1187867272, 1351423507,1645973084,1997049139, 922510944,2045512870, 898585771, 243649545,1004818771, 773686062, 403188473, 372279877,1901633463, 498067494,2087759558, 493157915, 597104727,1530940798,1814496276, 536444882,1663153658, 855503735, 67784357,1432404475, 619691088, 119025595, 880802310, 176192644,1116780070, 277854671,1366580350, 1142483975,2026948561,1053920743, 786262391,1792203830,1494667770, 1923011392,1433700034,1244184613,1147297105, 539712780,1545929719, 190641742,1645390429, 264907697, 620389253,1502074852, 927711160, 364849192,2049576050, 638580085, 547070247 };

/* Generate the next random number. */

float lcgrand(int stream)

{

long zi, lowprd, hi31;

zi = zrng[stream];

lowprd = (zi & 65535) * MULT1;

hi31 = (zi >> 16) * MULT1 + (lowprd >> 16);

zi = ((lowprd & 65535) - MODLUS) +

((hi31 & 32767) << 16) + (hi31 >> 15);

if (zi < 0) zi += MODLUS;

lowprd = (zi & 65535) * MULT2;

hi31 = (zi >> 16) * MULT2 + (lowprd >> 16);

zi = ((lowprd & 65535) - MODLUS) +

((hi31 & 32767) << 16) + (hi31 >> 15);

if (zi < 0) zi += MODLUS;

zrng[stream] = zi;

return (zi >> 7 | 1) / 16777216.0;

}

void lcgrandst (long zset, int stream) /* Set the current zrng for stream

"stream" to zset. */

{

zrng[stream] = zset;

}

long lcgrandgt (int stream) /* Return the current zrng for stream "stream". */ {

return zrng[stream];

}

计算机仿真与建模实验报告

中南大学 计算机仿真与建模 实验报告 题目:理发店的服务过程仿真 姓名:XXXX 班级:计科XXXX班 学号:0909XXXX 日期:2013XXXX

理发店的服务过程仿真 1 实验案例 (2) 1.1 案例:理发店系统研究 (2) 1.1.1 问题分析 (3) 1.1.2 模型假设 (3) 1.1.3 变量说明 (3) 1.1.4 模型建立 (3) 1.1.5 系统模拟 (4) 1.1.6 计算机模拟算法设计 (5) 1.1.7 计算机模拟程序 (6) 1实验案例 1.1 案例:理发店模拟 一个理发店有两位服务员A和B顾客随机地到达该理发店,每分钟有一个顾客到达和没有顾客到达的概率均是1/2 , 其中60%的顾客理发仅用5分钟,另外40%的顾客用8分钟. 试对前10分钟的情况进行仿真。 (“排队论”,“系统模拟”,“离散系统模拟”,“事件调度法”)

1.1.1 问题分析 理发店系统包含诸多随机因素,为了对其进行评判就是要研究其运行效率, 从理发店自身利益来说,要看服务员工作负荷是否合理,是否需要增加员工等考 虑。从顾客角度讲,还要看顾客的等待时间,顾客的等待队长,如等待时间过长 或者等待的人过多,则顾客会离开。理发店系统是一个典型的排队系统,可以用 排队论有关知识来研究。 1.1.2 模型假设 1. 60%的顾客只需剪发,40%的顾客既要剪发,又要洗发; 2. 每个服务员剪发需要的时间均为5分钟,既剪发又洗发则花8分钟; 3. 顾客的到达间隔时间服从指数分布; 4. 服务中服务员不休息。 1.1.3 变量说明 u :剪发时间(单位:分钟),u=5m ; v: 既剪发又理发花的时间(单位:分钟),v=8m ; T : 顾客到达的间隔时间,是随机变量,服从参数为λ的指数分布,(单位: 分钟) T 0:顾客到达的平均间隔时间(单位:秒),T 0=λ 1; 1.1.4 模型建立 由于该系统包含诸多随机因素,很难给出解析的结果,因此可以借助计算机 模拟对该系统进行模拟。 考虑一般理发店的工作模式,一般是上午9:00开始营业,晚上10:00左 右结束,且一般是连续工作的,因此一般营业时间为13小时左右。 这里以每天运行12小时为例,进行模拟。 这里假定顾客到达的平均间隔时间T 0服从均值3分钟的指数分布, 则有 3小时到达人数约为603 603=?人, 6小时到达人数约为1203 606=?人, 10小时到达人数约为2003 6010=?人, 这里模拟顾客到达数为60人的情况。 (如何选择模拟的总人数或模拟总时间)

计算机仿真试题和答案

控制系统计算机辅助设计 综合实验指导 实验名称:连续与离散系统校正实验,系统可控性与可观性实验,系统的simulink仿真实验 陈茜编 实验人:苏建聪 学号:200830810122 班级:08电气工程及其自动化1班 信息工程系

实验任务书 1. 有一个单位负反馈控制系统,如果控制对象的传递函数为 设计要求: ① 相角裕度≥45°; ② 当系统的输入信号是单位斜坡信号时,稳态误差ess ≤0.04。 ③ 要求绘制出校正后系统和未校正系统的Bode 图及其闭环系统的单位阶跃响应曲线,并进行对比。 2. 有一个单位负反馈控制系统,如果控制对象的传递函数为: 试设计一个串联滞后校正装置。 设计要求: ①相角裕度≥45°; ② 当系统的输入信号是单位斜坡信号时,稳态误差ess ≤0.04。 ③ 要求绘制出校正后系统和未校正系统的Bode 图及其闭环系统的单位阶跃响应曲线,并进行对比。 3. 有一个单位负反馈控制系统,如果控制对象的传递函数为 ()() 4+= s s k s G p 试设计一个串联超前滞后校正装置,设计要求: ①相角裕度≥45°; ② 当系统的输入信号是单位斜坡信号时,稳态误差ess ≤0.04。 ③ 要求绘制出校正后系统和未校正系统的Bode 图及其闭环系统的单位阶跃响应曲线,并进行对比。 4. 系统结构图如图所示,其中,采样周期Ts=0.01s ,被控对象()() 110+= s s s G ,()s G h 为 零阶保持器。用W 变换法设计一超前校正装置D(z),使系统相位裕度γ≥50°,校验设计后系统的性能指标。 5. 系统结构图如图所示,其中,采样周期Ts=0.01s ,被控对象1) s(0.2s k )(+= s G ο, () s G h 为零阶保持器。用对数频率法设计D(z),使系统开环增益k ≥30(1/s),截

通信对抗原理大作业题目

通信对抗原理仿真大作业题目 基本要求:仿真大作业分组完成,每个组3~5人,至少选择4个题目,并且在每一类中至少选择一个题目。利用MATLAB完成计算机仿真,并且撰写仿真实验报告。大作业完成情况将作为评价平时成绩的依据。 第一类:测频方法仿真 1.FFT法数字测频技术仿真。仿真模拟通信信号或者数字通信信号三种以上, 基于FFT法进行载波频率测量。画出信号的时域、频域波形,给出FFT法测量的结果。进一步在0-20dB信噪比条件给出不同信噪比下的测量曲线,分析信噪比与测量误差的关系。 2.互相关法数字测频技术仿真。仿真模拟通信信号或者数字通信信号三种以上, 基于互相关法进行载波频率测量。画出信号的时域、频域波形,给出测量结果。进一步在0-20dB信噪比条件给出不同信噪比下的测量曲线,分析信噪比与测量误差的关系。 3.相位差分法数字测频技术仿真。仿真模拟通信信号或者数字通信信号三种以 上,基于相位差分法法进行载波频率测量。画出信号的时域、频域波形,给出测量结果。进一步在0-20dB信噪比条件给出不同信噪比下的测量曲线,分析信噪比与测量误差的关系。 第二类:测向方法仿真 4.相位干涉仪测向方法仿真。仿真模拟通信信号或者数字通信信号两种以上, 基于相位干涉仪测向方法,对不同方向到达的通信信号进行测向。画出信号的时域、频域波形,给出到达方向测量结果。进一步在0-20dB信噪比条件给出不同信噪比下的测量曲线,分析信噪比、到达角与测量误差的关系。 5.到达时差测向方法仿真。仿真模拟通信信号或者数字通信信号两种以上,基 于到达时差测向方法,对不同方向到达的通信信号进行测向。画出信号的时域、频域波形,观察相关函数,给出测量结果。进一步在0-20dB信噪比条件给出不同信噪比下的测量曲线,分析信噪比、到达角与测量误差的关系。6.多普勒测向方法仿真。仿真模拟通信信号或者数字通信信号两种以上,基于 多普勒测向方法,对不同方向到达的通信信号进行测向。画出信号的时域、频域波形,给出测量结果。进一步在0-20dB信噪比条件给出不同信噪比下的测量曲线,分析信噪比、到达角与测量误差的关系。 7.沃森-瓦特测向方法仿真。仿真模拟通信信号或者数字通信信号两种以上,基 于沃森-瓦特测向方法,对不同方向到达的通信信号进行测向。画出信号的时域、频域波形,给出测量结果。进一步在0-20dB信噪比条件给出不同信噪比下的测量曲线,分析信噪比、到达角与测量误差的关系。 第三类:信号处理技术仿真 8.信号带宽和幅度测量方法仿真。仿真模拟通信信号或者数字通信信号三种以 上,基于FFT法进行信号带宽、信号相对幅度测量。画出信号的时域、频域

系统结构期末考试试题及答案

得分 评分人 填空题: (20分,每题2 分) 单选题:(10分,每题1分) A.任何虚页都可装入主存中任何实页的位置 B. 一个虚页只装进固定的主存实页位置 《计算机系统结构》期末考试试卷(A ) 得分 注:1、共100分,考试时间120分钟。 2、此试卷适用于计算机科学与技术本科专业。 1、."启动I/O"指令是主要的输入输出指令,是属于( A. 目态指令 B.管态指令 C.目态、管态都能用的指令 D.编译程序只能用的指令 2、 输入输出系统硬件的功能对 (B )是透明的 A.操作系统程序员 B.应用程序员 C.系统结构设计人员 D.机器语言程序设计员 3、 全相联地址映象是指(A ) C. 组之间固定,组内任何虚页可装入任何实页位置 D.组间可任意装入,组内是固定装入 4、( C ) 属于MIMD 系统结构 A.各处理单元同时受一个控制单元的管理 B.各处理单元同时受同个控制单元送来的指令 C.松耦合多处理机和多计算机系统 D. 阵列处理机 5、多处理机上两个程序段之间若有先写后读的数据相关,则( B ) A.可以并行执行 B.不可能并行 C.任何情况均可交换串行 D.必须并行执行 6、 计算机使用的语言是(B ) A.专属软件范畴,与计算机体系结构无关 B.分属于计算机系统各个层次 C.属于用以建立一个用户的应用环境 D. 属于符号化的机器指令 7、 指令执行结果出现异常引起的中断是( C ) A.输入/输出中断 B.机器校验中断 C.程序性中断 D.外部中断 &块冲突概率最高的 Cache 地址映象方式是(A ) A.直接 B .组相联 C .段相联 D .全相联 9、 组相联映象、LRU 替换的Cache 存储器,不影响 Cache 命中率的是(B ) A.增大块的大小 B .增大主存容量 C .增大组的大小 D .增加Cache 中的块数 10、 流水处理机对全局性相关的处理不 包括(C ) A.猜测法 B.提前形成条件码 C.加快短循环程序的执行 D.设置相关专用通路

计算机仿真实验-基于Simulink的简单电力系统仿真

实验七 基于Simulink 的简单电力系统仿真实验 一. 实验目的 1) 熟悉Simulink 的工作环境及SimPowerSystems 功能模块库; 2) 掌握Simulink 的的powergui 模块的应用; 3) 掌握发电机的工作原理及稳态电力系统的计算方法; 4)掌握开关电源的工作原理及其工作特点; 5)掌握PID 控制对系统输出特性的影响。 二.实验内容与要求 单机无穷大电力系统如图7-1所示。平衡节点电压0 44030 V V =∠? 。负荷功率10L P kW =。线路参数:电阻1l R =Ω;电感0.01l L H =。发电机额定参数:额定功率100n P kW =;额定电压440 3 n V V =;额定励磁电流 70 fn i A =;额定频率50n f Hz =。发电机定子侧参数:0.26s R =Ω, 1 1.14 L mH =,13.7 md L mH =,11 mq L mH =。发电机转子侧参数:0.13f R =Ω,1 2.1 fd L mH =。发电机阻尼绕组参数:0.0224kd R =Ω, 1 1.4 kd L mH =,10.02kq R =Ω,11 1 kq L mH =。发电机转动惯量和极对数分别 为224.9 J kgm =和2p =。发电机输出功率050 e P kW =时,系统运行达到稳态状态。在发电机输出电磁功率分别为170 e P kW =和2100 e P kW =时,分析发电机、平衡节点电源和负载的电流、电磁功率变化曲线,以及发电机转速和功率角的变化曲线。

G 发电机节点 V 负 荷 l R l L L P 图 7.1 单机无穷大系统结构图 输电线路 三.实验步骤 1. 建立系统仿真模型 同步电机模块有2个输入端子、1个输出端子和3个电气连接端子。模块的第1个输入端子(Pm)为电机的机械功率。当机械功率为正时,表示同步电机运行方式为发电机模式;当机械功率为负时,表示同步电机运行方式为电动机模式。在发电机模式下,输入可以是一个正的常数,也可以是一个函数或者是原动机模块的输出;在电动机模式下,输入通常是一个负的常数或者是函数。模块的第2个输入端子(Vf)是励磁电压,在发电机模式下可以由励磁模块提供,在电动机模式下为一个常数。 在Simulink仿真环境中打开Simulink库,找出相应的单元部件模型,构造仿真模型,三相电压源幅值为4403,频率为50Hz。按图连接好线路,设置参数,建立其仿真模型,仿真时间为5s,仿真方法为ode23tb,并对各个单元部件模型的参数进行修改,如图所示。

江南大学数媒0902基于虚拟现实技术大作业报告

课程:虚拟现实题目:沸腾的水壶 班级:数媒0902 学号:0305090206 姓名:沈玉婷 日期:2012.12

1、绪论 1.1 虚拟现实动画简介 虚拟现实动画就是用虚拟现实的技术以动画的形式表现出来(这是建立在虚拟现实及动画技术的基础上出现的)。我们以了解什么是虚拟现实及动画的意思后就能全面理解虚拟现实动画的概念。 1.2 关于虚拟现实技术 虚拟现实(Virtual Reality,简称VR;又译作灵境、幻真)是近年来出现的高新技术,也称灵境技术或人工环境。虚拟现实是利用电脑模拟产生一个三维空间的虚拟世界,提供使用者关于视觉、听觉、触觉等感官的模拟,让使用者如同身历其境一般,可以及时、没有限制地观察三度空间内的事物。 VR是一项综合集成技术,涉及计算机图形学、人机交互技术、传感技术、人工智能等领域,它用计算机生成逼真的三维视、听、嗅觉等感觉,使人作为参与者通过适当装置,自然地对虚拟世界进行体验和交互作用。使用者进行位置移动时,电脑可以立即进行复杂的运算,将精确的3D世界影像传回产生临场感。该技术集成了计算机图形(CG)技术、计算机仿真技术、人工智能、传感技术、显示技术、网络并行处理等技术的最新发展成果,是一种由计算机技术辅助生成的高技术模拟系统。概括地说,虚拟现实是人们通过计算机对复杂数据进行可视化操作与交互的一种全新方式,与传统的人机界面以及流行的视窗操作相比,虚拟现实在技术思想上有了质的飞跃。 2、需求分析 随着CAD技术的发展,人们就开始研究立体声与三维立体显示相结合的计算机系统。目的在于建立一种新的用户界面,使用户可以置身于计算机所表示的三维空间资料库环境中,并可以通过眼、手、耳或特殊的空间三维装置在这个环境中"环游",创造出一种"亲临其境"的感觉。 虚拟现实是人们通过计算机对复杂数据进行可视化、操作以及实时交互的环境。与传统的计算机人――机界面(如键盘、鼠标器、图形用户界面以及流行的Windows等)相比,虚拟现实无论在技术上还是思想上都有质的飞跃。传统的人――机界面将用户和计算机视为两个独立的实体,而将界面视为信息交换的媒介,由用户把要求或指令输入计算机,计算机对信息或受控对象作出动作反馈。虚拟现实则将用户和计算机视为一个整体,通过各种直观的工具将信息进行可视化,形成一个逼真的环境,用户直接置身于这种三维信息空间中自由地使用各种信息,并由此控制计算机。目前,虚拟现实技术已经遍布我们生活中的每一个行业,城市规划中的应用、旅游景观的应用、医学中应用、娱艺教中的应用、军事与航天中的应用、室内设计中的应用、房产开发中的应用、工业仿真中的应用、应急推演中的应用。由此可知,虚拟

计算机系统结构期末考试试题及其答案

计算机系统结构期末考试试题及其答案

《计算机系统结构》期末考试试卷A 卷第 2 页 共 24 页 计算机科学系《计算机系统结构》期末考试试卷(A 卷) 2、此试卷适用于计算机科学与技术本科专业。 一 单选题:(10分,每题1分) 1、 ."启动I/O"指令是主要的输入输出指 令,是属于( B ) A.目态指令 B.管态指令 C.目态、管态都能用的指令 D.编译程序只能用的指令 2、 输入输出系统硬件的功能对(B )是透 明的 A.操作系统程序员 B.应用程序员 C.系统结构设计人员 D.机器语言程序设计员 3、 全相联地址映象是指(A ) A.任何虚页都可装入主存中任何实页的位置 B.一个虚页只装进固定的主存实页位置 C.组之间固定,组内任何虚页可装入任何实页位

置 D.组间可任意装入,组内是固定装入 4、( C ) 属于MIMD系统结构 A.各处理单元同时受一个控制单元的管理 B.各处理单元同时受同个控制单元送来的指令 C.松耦合多处理机和多计算机系统 D.阵列处理机 5、多处理机上两个程序段之间若有先写 后读的数据相关,则(B ) A.可以并行执行 B.不可能并行 C.任何情况均可交换串行 D.必须并行执行 6、计算机使用的语言是(B) A.专属软件范畴,与计算机体系结构无关 B.分属于计算机系统各个层次 C.属于用以建立一个用户的应用环境 D.属于符号化的机器指令 7、指令执行结果出现异常引起的中断是 (C ) A.输入/输出中断 B.机器校验中断 C.程序性中断 D.外部中断 《计算机系统结构》期末考试试卷A卷第 3 页共 24 页

计算机仿真实验

计算机仿真实验报告 专业:电气工程及其自动化班级:09电牵一班学号:22 姓名:饶坚指导老师:叶满园实验日期:2012年4月30日 一、实验名称 三相桥式SPWM逆变电路仿真 二、目的及要求 1.了解并掌握三相逆变电路的工作原理; 2.进一步熟悉MA TLAB中对Simulink的使用及构建模块; 3.掌握SPWM原理及构建调制电路模块; 4.复习在Figure中显示图形的程序编写和对图形的修改。 三、实验原理与步骤、电路图 1、实验原理图

2、电路原理(采用双极性控制方式) U、V和W三相的PWM控制通常公用一个三角波载波Uc,三相的调制信号Uru、Urv和Urw依次相差120°。 电路工作过程(U相为例):当Uru>Uc时,上桥臂V1导通,下桥臂V4关断,则U相相对于直流电源假想中点N’的输出电压Uun’=Ud/2。当Uru

对电路模型进行封装如下图示:

其中Subsystem1为主电路,Subsystem2为负载,Subsystem3为检测电路,Subsystem4为输入信号,Subsystem5为调制电路,Scope 为示波器,Repeating Sequence为三角载波。 各子系统电路分别如下所示: Subsystem1 Subsystem2 Subsystem3

武汉理工大学-计算机仿真实验作业答案

五、(10分)已知系统的传递函数为6 168682)(232+++++=s s s s s s G 。 语言建立系统传递函数模型,并求: ⑴ 该系统的单位阶跃响应;(2分) ⑵ 输入函数为u(t)时的响应;(3分) (u(t)正弦信号,周期2秒,仿真时间8秒,采样周期0.1); (3) 输入函数为u(t)时的响应;(3分) (u(t)方波输入信号,周期10秒,仿真时间20秒,采样周期0.05) (4) 绘出系统的波德图(Bode )。(2分) 解答: num=[2 8 6]; den=[1 8 16 6]; sys=tf(num,den); t=0:0.1:8; y1=step(sys,t); u=sin(t*pi); y2=lsim(sys,u,t); subplot(2,2,1);plot(t,y1); grid; title('阶跃响应曲线'); xlabel('响应时间'); ylabel('响应值'); hold on; subplot(2,2,2);plot(t,y2); grid on ; title('对sin(t)的响应曲线'); xlabel('响应时间'); ylabel('响应值'); t=0:0.05:20 u=square(pi/5*t) y3=lsim(sys,u,t); subplot(2,2,3);plot(t,y3) grid on ; title('对方波信号的响应曲线'); xlabel('响应时间'); ylabel('响应值'); subplot(2,2,4);bode(sys);

grid ;title('bode 图'); 运行结果: 六、(10分)设二阶动力学系统的传递函数如下,假设将无阻尼固有频 率固定为ωn =1 rad/s ,将阻尼比的值分别设置成ζ=0,0.1,0.2,0.3,…, MATLAB 语言编程,分析在这些阻尼比ζ的取值下该系统的阶跃响应。 2222)(n n n s s s G ω?ωω++= 解答:wn=1; kesi=[0:0.1:1,2,3,4,5]; figure('color',[1 1 1]); hold on for i=kesi num=wn.^2 den=[1,2*i*wn,wn.^2]; step(num,den);

计算机仿真技术与CAD习题答案

第0章绪论 0-1 什么是仿真?它所遵循的基本原则是什么? 答: 仿真是建立在控制理论、相似理论、信息处理技术和计算机技术等理论基础之上的,以计算机和其他专用物理效应设备为工具,利用系统模型对真实或假想的系统进行试验,并借助专家经验知识、统计数据和信息资料对试验结果进行分析和研究,进而做出决策的一门综合性的试验性科学。 它所遵循的基本原则是相似原理。 0-2 仿真的分类有几种?为什么? 答: 依据相似原理来分:物理仿真、数学仿真和混合仿真。 物理仿真:就是应用几何相似原理,制作一个与实际系统相似但几何尺寸较小或较大的物理模型(例如飞机模型放在气流场相似的风洞中)进行实验研究。 数学仿真:就是应用数学相似原理,构成数学模型在计算机上进行研究。它由软硬件仿真环境、动画、图形显示、输出打印设备等组成。 混合仿真又称数学物理仿真,它是为了提高仿真的可信度或者针对一些难以建模的实体,在系统研究中往往把数学仿真、物理仿真和实体结合起来组成一个复杂的仿真系统,这种在仿真环节中有部分实物介入的混合仿真也称为半实物仿真或者半物理仿真。 0-3 比较物理仿真和数学仿真的优缺点。 答: 在仿真研究中,数学仿真只要有一台数学仿真设备(如计算机等),就可以对不同的控制系统进行仿真实验和研究,而且,进行一次仿真实验研究的准备工作也比较简单,主要是受控系统的建模、控制方式的确立和计算机编程。数学仿真实验所需的时间比物理仿真大大缩短,实验数据的处理也比物理仿真简单的多。 与数学仿真相比,物理仿真总是有实物介入,效果直观逼真,精度高,可信度高,具有实时性与在线性的特点;但其需要进行大量的设备制造、安装、接线及调试工作,结构复杂,造价较高,耗时过长,灵活性差,改变参数困难,模型难以重用,通用性不强。 0-4 简述计算机仿真的过程。 答: 第一步:根据仿真目的确定仿真方案 根据仿真目的确定相应的仿真结构和方法,规定仿真的边界条件与约束条件。 第二步:建立系统的数学模型 对于简单的系统,可以通过某些基本定律来建立数学模型。而对于复杂的系统,则必须利用实验方法通过系统辩识技术来建立数学模型。数学模型是系统仿真的依据,所以,数学模型的准确性是十分重要。

计算机仿真实验报告7

山东工商学院计算机仿真及应用实验报告 实验七 MATLAB的基本应用(二)及Simulink仿真 (验证性实验) 学院: 专业班级: 实验时间: 学号: 姓名:

一、实验目的 1、掌握连续信号的仿真和傅里叶分析方法 2、掌握连续系统的分析方法(时域分析法,拉氏变换法和傅里叶分析法); 3、掌握离散信号的仿真和分析运算方法 4、掌握离散系统的分析方法(时域分析法); 5、掌握符号运算方法; 6、掌握Simulink仿真工具; 二、实验原理 1、连续信号的仿真和分析法,参考教材第6.1节,重点: 单位冲激信号的仿真方法;单位阶跃信号的仿真方法;复指数信号的仿真方法 2、连续系统的分析方法,参考教材第6.1节,重点: 例6.2,LTI系统的零输入响应的求解方法; 例6.3,LTI系统的冲激响应的求解方法 例6.5,LTI系统的零状态响应的求解方法 例6.6,系统中有重极点时的计算 3、系统的频域分析方法,参考教材第6.2节,重点: 例6.7,方波分解为多次正弦波之和 例6.8:全波整流电压的频谱 例6.10:调幅信号通过带通滤波器 例6.12:用傅里叶变换计算滤波器的响应和输出 4、离散信号的仿真和分析法,参考教材第6.3节,7.1节,重点: 单位脉冲序列impseq,单位阶跃序列stepseq 例7.1:序列的相加和相乘 例7.2:序列的合成与截取 例7.3:序列的移位和周期延拓运算 三、实验内容(包括内容,程序,结果) 以自我编程练习实验为主,熟悉各种方法和设计,结合课堂讲授,实验练习程序代码。 1、根据教材第6.1节的内容,练习连续信号和系统的时域分析和拉氏变换方法。 q602 clear,clc a=input('输入分母系数向量a=[a1,a2,...]= '); n=length(a)-1; Y0=input('输入初始条件向量Y0=[y0,Dy0,D2y0,...]= '); p=roots(a);V=rot90(vander(p));c=V\Y0'; dt=input('dt= ');tf=input('tf= '); t=0:dt:tf;y=zeros(1,length(t));

电路计算机仿真实验报告

电路计算机仿真分析 实验报告

实验一直流电路工作点分析和直流扫描分析 一、实验目的 1、学习使用Pspice软件,熟悉它的工作流程,即绘制电路图、元件类别的选择及其参数的赋值、分析类型的建立及其参数的设置、Probe窗口的设置和分析的运行过程等。 2、学习使用Pspice进行直流工作点分析和直流扫描分析的操作步骤。 二、原理与说明 对于电阻电路,可以用直观法(支路电流法、节点电压法、回路电流法)列写电路方程,求解电路中各个电压和电流。PSPICE软件是采用节点电压法对电路进行分析的。 使用PSPICE软件进行电路的计算机辅助分析时,首先在capture环境下编辑电路,用PSPICE 的元件符号库绘制电路图并进行编辑、存盘。然后调用分析模块、选择分析类型,就可以“自 动”进行电路分析了。需要强调的是,PSPICE软件是采用节点电压法“自动”列写节点电 压方程的,因此,在绘制电路图时,一定要有参考节点(即接地点)。此外,一个元件为一 条“支路”(branch),要注意支路(也就是元件)的参考方向。对于二端元件的参考方向定 义为正端子指向负端子。 三、示例实验 应用PSPICE求解图1-1所示电路个节点电压和各支路电流。 图1-1 直流电路分析电路图

4.000V R2 1 2.000A 0V Idc2 4Adc 4.000A 6.000V R1 1 4.000A Idc1 2Adc 2.000A R3 3 2.000A 图1-2 仿真结果 四、选做实验 1、实验电路图 (1)直流工作点分析,即求各节点电压和各元件电压和电流。 (2)直流扫描分析,即当电压源Us1的电压在0-12V之间变化时,求负载电阻R L中电流I RL随电压源Us1的变化曲线。 R4 3 Is3 2Adc 0Vs2 10Vdc RL 1 Is1 1Adc Is2 1Adc R1 4 I Is5 3Adc R2 2 12Vdc IPRINT Vs3 5Vdc Vs4 7Vdc 图1-3 选做实验电路图 2、仿真结果

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)汇编

C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hello world!\n"); system("pause"); } 实验1-2: 完成3个数据的输入、求和并输出计算结果的程序: 源代码: #include main() { int i,j,k,sum; scanf("%d%d%d",&i,&j,&k); sum=i+j+k; printf("sum=%d",sum); system("pause"); 实验1-3: 在屏幕上输出如下图形: A BBB CCCCC 源代码: #include main() { printf(" A\n"); printf(" BBB\n"); printf(" CCCCC\n"); system("pause"); } 实验2-1: 计算由键盘输入的任何两个双精度数据的平均值 源代码: #include

main() { double a,b; scanf("%lf%lf",&a,&b); printf("%.1lf\n",(a+b)/2); system("pause"); } 实验2-2: 写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码: #include main() { float a,b,c,d,e,f,g,x; scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g); x=a + b * (c - d ) / e * f - g; printf("x=%f",x); system("pause"); } 实验2-3: 编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j 源代码: #include main() { int i=1,j=1; printf("%d %d\n",i+1,j+1); printf("%d %d\n",i++,j++); printf("%d %d\n",++i,++j); printf("%d\n",(i++)+(++j)); system("pause"); } 实验2-4: 输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest (税前),输出时保留2位小数。 interest = money(1+rate)year - money

计算机仿真实训实验报告实验1-4

实验一 熟悉MATLAB 工作环境 16电气5班 周树楠 20160500529 一、实验目的 1.熟悉启动和退出MATLAB 软件的方法。 2.熟悉MATLAB 软件的运行环境。 3.熟悉MATLAB 的基本操作。 二、实验设备及条件 计算机一台(带有MATLAB6.0以上的软件境)。 三、实验内容 1.练习下面指令: cd,clear,dir,path,help,who,whos,save,load 。 2.建立自己的工作目录MYBIN 和MYDATA ,并将它们分别加到搜索路径的前面或者后面。 3.求23)]47(*212[÷-+的算术运算结果。 4.M 文件的建立,建立M 文件,求出下列表达式的值: ?? ????-+=++=+= 545.0212),1ln(21 185sin 2222 1i x x x z e z o 其中

5.利用MATLAB的帮助功能分别查询inv、plot、max、round函数的功能和用法。 四、运行环境介绍及注意事项 1.运行环境介绍 打开Matlab软件运行环境有图1-1所示的界面

图1-1 MATLAB的用户界面 操作界面主要的介绍如下: 指令窗( Command Window ),在该窗可键入各种送给 MATLAB 运作的指令、函数、表达式,并显示除图形外的所以运算结果。 历史指令窗( Command History ),该窗记录已经运行过的指令、函数、表达式;允许用户对它们进行选择复制、重运行,以及产生 M 文件。 工作空间浏览器( Workspace Browser ),该窗口罗列出 MATLAB 工作空间中所有的变量名、大小、字节数;并且在该窗中,可对变量进行观察、编辑、提取和保存。 其它还有当前目录浏览器( Current Directory Browser )、 M 文件编辑 / 调试器(Editor/Debugger )以及帮助导航/ 浏览器(Help Navigator/Browser )等,但通常不随操作界面的出现而启动。 利用 File 菜单可方便对文件或窗口进行管理。其中 File | New 的各子菜单, M-file ( M 文件)、 Figure (图形窗口)、或 Model ( Simulink 编辑界面)分别可创建对应文件或模块。 Edit 菜单允许用户和 Windows 的剪切板交互信息。 2.在指令窗操作时应特别注意以下几点 1)所有输入的指令、公式或数值必须按下回车键以后才能执行。例如: >>(10*19+2/4-34)/2*3 (回车) ans= 234.7500 2)所有的指令、变量名称都要区分字母的大小写。 3)%作为MATLAB注释的开始标志,以后的文字不影响计算的过程。 4)应该指定输出变量名称,否则MATLAB会将运算结果直接存入默认的输出变量名ans。 5)MATLAB可以将计算结果以不同的精确度的数字格式显示,可以直接在指令视窗键入不同的数字显示格式指令。例如:>>format short (这是默认的) 6)MATLAB利用了↑↓二个游标键可以将所输过的指令叫回来重复使用。按下↑则前一次输入的指令重新出现,之后再按Enter键,即再执行前一次的指令。

《计算机仿真技术》试题(含完整答案)

、数值计算,编程完成以下各题(共20分,每小题5 分) 1、脉冲宽度为d,周期为T的矩形脉冲的傅里叶级数如下式描述: d[i.^= sin(^d/T)cos(^:n.) T n」n rd /T 当n =150,d..「T =1;4,- 1/2 :::.::: 1/2,绘制出函数f(.)的图形。 解: syms n t; f=((si n(n *pi/4))/( n*pi/4))*cos(2*pi* n*t); s=symsum(f, n,1,150); y=(1+2*s)/4; x=-0.5:0.01:0.5; Y=subs(y,'t',x); plot(x,Y) 2 0 05x2 5 ■ 5 2、画出函数f (x)二(sin 5x) e .- 5x cos1.5x 1.5x 5.5 x 在区间[3, 5]的图形,求出该函数在区间[3, 5]中的最小值点X min和函数的最小值f min . 解:程序如下 x=3:0.05:5; y=(si n(5*x).A2).*exp(0.05*x.A2)-5*(x.A5).*cos(1.5*x)+1.5*abs(x+5.5)+x.A2.5; mix_where=fi nd(y==mi n(y)); xmin=x(mix_where); hold on; plot(x,y); plot(xmi n,min (y),'go','li newidth',5); str=strcat('(' ,nu m2str(xmi n),',' ,nu m2str(mi n(y)),')'); text(xmi n,min (y),str);

Ylabel('f(x)') 经过运行后得到的图像截图如下: 运行后的最小值点X min =4.6 , f m in = -8337.8625 3、画出函数f (x) = cos2x「e^'x — 2.5 X在口,3]区间的图形, 解该非线 并用编程求性方程 f (x) = 0的一个根,设初始点为X o = 2 . 解: x=1:0.02:3; x0=2; y=@(x)(cos(x).A2).*exp(-0.3*x)-2.5*abs(x); fplot(y,[1,3]); Xlabel('x') Ylabel('f(x)') X仁fzero('(cos(x).A2).*exp(-0.3*x)-2.5*abs(x)',x0) 运行后求得该方程的一个根为z=0.3256 。 4、已知非线性方程组如下,编程求方程组的解,设初始点为[1 0.5 -1].

周信东主编版C语言程序设计基础实验一实验报告

周信东主编版C语言程序设计基础实验一实验报告 The latest revision on November 22, 2020

实验1 C程序的运行环境和最简单的C程序设计 学号:姓名:莫新锋实验日期: 一、实验目的和要求 (1)熟悉C语言程序开发环境(Visual C++),了解开发环境中的编辑、编译、链接和运行命令。 (2)掌握在C语言开发环境中如何编辑、编译、链接和运行一个标准C语言程序。(3)掌握简单C语言程序的查错方法,理解编译错误信息的含义。 (4)掌握C语言数据类型的概念,熟悉如何定义一个整型、字符型、实型变量,以及如何对它们进行赋值。 (5)了解下列命令及函数:#include <>、main、printf、scanf。 (6)通过运行简单的程序,熟悉C语言的基本格式规范,并初步了解它的结构特点。 二、实验内容 实验指导书中的实验一的“基础部分”题目。 三、实验步骤及结果 (一)VC 实验平台的使用 1.简要描述在VC环境下开发一个C程序的主要步骤,并粘贴主要操作窗口的截图。【请填空。截图的操作方法:先点击欲截取的窗口使之置于屏幕最前方,并作适当的缩放,再按快捷键+将窗口截取到内存中,然后打开word将光标移到欲插入图片的位置上进行粘贴即可。也可对图片进行适当剪切,裁剪掉多余部分。注意:截图上必须有你自己的学号或姓名等信息,否则视为抄袭。】 主要步骤: 1: 创建一个工作文件夹。 2:启动 Visual C++。 3:新建一个 C 语言源程序。 4:编辑源程序 5:保存源程序 2.编译、链接、运行程序 (1)输入源程序后,如何编译该程序 【请填空】 输入好后在编译器中有一个编译按钮按一下就能编译 (2)如何链接程序生成可执行文件 【请填空】 得到后缀为obj的目标程序后选择build菜单下的build选项,表示要求连接并建立一个可执行文件 (3)如何运行程序查看结果 【请填空】

控制系统数字仿真大作业.

《控制系统数字仿真》课程 大作业 姓名: 学号: 班级: 日期: 同组人员:

目录 一、引言 (2) 二、设计方法 (2) 1、系统数学模型 (2) 2、系统性能指标 (4) 2.1 绘制系统阶跃响应曲线、根轨迹图、频率特性 (4) 2.2 稳定性分析 (6) 2.3 性能指标分析 (6) 3、控制器设计 (6) 三、深入探讨 (9) 1、比例-微分控制器(PD) (9) 2、比例-积分控制(PI) (12) 3、比例-微分-积分控制器(PID) (14) 四、设计总结 (17) 五、心得体会 (18) 六、参考文献 (18)

一、引言 MATLAB语言是当今国际控制界最为流行的控制系统计算机辅助设计语言,它的出现为控制系统的计算机辅助分析和设计带来了全新的手段。其中图形交互式的模型输入计算机仿真环境SIMULINK,为MATLAB应用的进一步推广起到了积极的推动作用。现在,MATLAB语言已经风靡全世界,成为控制系统CAD领域最普及、也是最受欢迎的软件环境。 随着计算机技术的发展和应用,自动控制理论和技术在宇航、机器人控制、导弹制导及核动力等高新技术领域中的应用也愈来愈深入广泛。不仅如此,自动控制技术的应用范围现在已发展到生物、医学、环境、经济管理和其它许多社会领域中,成为现代社会生活中不可或缺的一部分。随着时代进步和人们生活水平的提高,在人类探知未来,认识和改造自然,建设高度文明和发达社会的活动中,控制理论和技术必将进一步发挥更加重要的作用。作为一个自动化专业的学生,了解和掌握自动控制的有关知识是十分必要的。 利用MATLAB软件及其SIMULINK仿真工具来实现对自动控制系统建模、分析与设计、仿真,能够直观、快速地分析系统的动态性能和稳态性能,并且能够灵活的改变系统的结构和参数,通过快速、直观的仿真达到系统的优化设计,以满足特定的设计指标。 二、设计方法 1、系统数学模型 美国卡耐尔基-梅隆大学机器人研究所开发研制了一套用于星际探索的系统,其目标机器人是一个六足步行机器人,如图(a)所示。该机器人单足控制系统结构图如图(b)所示。 要求: (1)建立系统数学模型; (2)绘制系统阶跃响应曲线、根轨迹图、频率特性; (3)分析系统的稳定性,及性能指标; (4)设计控制器Gc(s),使系统指标满足:ts<10s,ess=0,,超调量小于5%。

《计算机仿真技术》试题(含完整答案).docx

精品文档 一、数值计算,编程完成以下各题(共20 分,每小题 5 分) 1、脉冲宽度为 d ,周期为 T 的矩形脉冲的傅里叶级数如下式描述: f ( )d 2 sin( n d / T ) cos( 2 n ) [1 n d / T T n 1 当 n 150, d T 1 4, 1 / 2 1 / 2 ,绘制出函数 f ( ) 的图形。 解: syms n t; f=((sin(n*pi/4))/(n*pi/4))*cos(2*pi*n*t); s=symsum(f,n,1,150); y=(1+2*s)/4; x=-0.5:0.01:0.5; Y=subs(y,'t',x); plot(x,Y) 2、画出函数 f ( x) (sin 5x) 2 e0.05x25x5 cos1.5x 1.5 x 5.5x5在区间[3, 5] 的图形,求出该函数在区间[3, 5]中的最小值点x m in和函数的最小值 f m in. 解:程序如下 x=3:0.05:5; y=(sin(5*x).^2).*exp(0.05*x.^2)-5*(x.^5).*cos(1.5*x)+1.5*abs(x+5.5)+x.^2.5; mix_where=find(y==min(y)); xmin=x(mix_where); hold on; plot(x,y); plot(xmin,min(y),'go','linewidth',5); str=strcat('(',num2str(xmin),',',num2str(min(y)),')'); text(xmin,min(y),str);

Ylabel('f(x)') 经过运行后得到的图像截图如下: 运行后的最小值点x m in =4.6, f m in= -8337.8625 3、画出函数 f ( x)cos 2 x e 0 .3 x 2.5 x 在[1,3]区间的图形,并用编程求解该非线性方程 f ( x )0 的一个根,设初始点为x02. 解: x=1:0.02:3; x0=2; y=@(x)(cos(x).^2).*exp(-0.3*x)-2.5*abs(x); fplot(y,[1,3]); Xlabel('x') Ylabel('f(x)') X1=fzero('(cos(x).^2).*exp(-0.3*x)-2.5*abs(x)',x0) 运行后求得该方程的一个根为z=0.3256 。 4、已知非线性方程组如下,编程求方程组的解,设初始点为[1 0.5 -1]. x 2x 72 x 5 z 23 yz30

控制系统计算机仿真实验报告

计算机仿真试验报告 自动化1201 ** 3120502007 [实验目的] (1).掌握采样控制系统数字仿真的特点。 (2).了解数字控制器对系统动态性能的影响。 (3).学会编制双重循环法的仿真程序。 (1). 复习采样控制系统的仿真原理及特点。 (2).根据理论分析,初步估计系统在给定条件下可能出现的动态过程。

(1).按实验目的、要求和已知条件,建立系统的Simulink模型,并且编制双重循环法的仿真程序。 1) Simulink模型建立: 根据题目给出的条件,数字控制系统的结构图如下图所示: 其中的其中数字控制器为: 根据上面结构图,所建立 2) 编制双重循环法的仿真程序 根据数字控制系统的结构图与条件(1)式,我们可以得到得到被控对象的状态空间模型:

[]112212()()0010()() ()110()()01()x t x t u t x t x t x t y t x t ?????????=+?????????-? ????????? ?? ?=??? ??? (2) 按连续系统离散相似算法将(2)式离散化。为了保证精度,其离散化时的步长h (虚 拟采样周期)应比数字控制器的实际采样周期T (=1s)小得多。为简化起见,取h=T/N=T/100=0.01T=0.01s 。 利用MATLAB 控制系统工具箱提供的将连续系统转换成离散系统的函数c2d ,把连续状态空间模型(2)变换为离散状态空间模型。 离散程序如下(程序1): clear; h=0.01; A=[0 0;1 -1]; B=[10;0]; [G,H]=c2d(A,B,h) 运行后的结果为: 即: 1 0(())0.010.99T ??==???? G Φ (3) 0.1(())0.0005T ?? ==? ? ?? H Γ (4) 故连续系统被控对象(2)的等价离散化状态方程为: []112212(1)()100.1()(1)()0.010.990.0005()()01()x k x k u k x k x k x k y k x k ?+???????? =+????????? +???? ?????? ?? ?=??? ??? (5)

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