一、semilogy函数 Matlab
Matlab是工程师和科学家的首选计算机数学软件之一,有着众多的数学计算函数,其中semilogy函数是Matlab中比较常用的一个函数。
semilogy函数实现的是在y轴采用对数尺度的情况下对x轴的数据进行绘图。在Matlab中,为了更清晰地表示y轴数据,我们常常选择采用对数轴来表示,semilogy函数就正是帮助我们完成这个任务的。
下面是一个简单例子:
clc;clear; x1=[1,2,3,4,5]; y1=[1,10,50,100,500]; semilogy(x1,y1) xlabel('x') ylabel('y') title('semilogy函数绘图')
运行上述代码之后,我们就可以获得一张用对数尺度表示y轴的图像。
二、sem函数
相比于semilogy函数,sem函数的作用是在某一维度上对数据进行求和并计算平均值和标准误差。这个函数通常被用来对一堆实验数据做统计分析,比如在金融领域中,可以用sem函数来计算一组股票收益率的平均值和标准误差。
下面是一个简单例子:
clc;clear; data=[1,2,3,4,5;4,5,6,7,8;1,2,3,4,5]; res=sem(data,2); res ans = 3x1 matrix 3.0000 6.0000 3.0000
在上述例子中,我们定义了一个3行5列的矩阵data,然后调用了sem函数并指定第2个维度作为计算维度。sem函数会返回计算出来的平均值和标准误差。
三、semctl函数
semctl函数主要用于对IPC机制中的信号量进行控制。这个函数通常被用于多进程间的通信,而这种通信又会常常用于服务端编程中对于客户端请求的处理。
下面是一个简单例子:
#include#include #include #include #include int main() { int semid,ret,cmd; struct sembuf semb={0,-1,0}; if((semid=semget(IPC_PRIVATE,1,0666))==-1) { perror("semget error"); exit(EXIT_FAILURE); } else { fprintf(stdout,"semid=%d\n",semid); } ret=semctl(semid,0,SETVAL,1); if(ret==-1) { perror("semctl error"); exit(EXIT_FAILURE); } ret=semop(semid,&semb,1); if(ret==-1) { perror("semop error"); exit(EXIT_FAILURE); } }
在上述例子中,我们定义了一个信号量并设置初始值为1,然后在semop函数中申请资源。申请成功后,由于信号量值被减1,其他进程就无法再申请资源,直到当前进程释放信号量。
四、semwait函数
semwait函数与semctl函数类似,它也是用于对IPC机制中的信号量进行控制,只不过semwait函数会在当前进程无法获得信号量资源时进入休眠状态。这个函数通常会被用于多线程编程中。
下面是一个简单例子:
#include#include #include #include #include #include int main() { int semid,ret; struct sembuf semb={0,-1,0}; if((semid=semget(IPC_PRIVATE,1,0666))==-1) { perror("semget error"); exit(EXIT_FAILURE); } else { printf("semid=%d\n",semid); } ret=semctl(semid,0,SETVAL,1); if(ret==-1) { perror("semctl error"); exit(EXIT_FAILURE); } printf("before\n"); ret=semop(semid,&semb,1); printf("after\n"); return 0; }
在上述例子中,我们定义了一个信号量并设置初始值为1,然后在semop函数中申请资源。申请成功后,由于信号量值被减1,其他进程就无法再申请资源,当前进程就会进入休眠状态。休眠状态会一直持续到信号量值恢复到可以申请状态,并且当前进程获得了信号量资源。