一、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,其他進程就無法再申請資源,當前進程就會進入休眠狀態。休眠狀態會一直持續到信號量值恢復到可以申請狀態,並且當前進程獲得了信號量資源。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/198347.html