reshape 函数怎样用
reshape 函数就是变换成特定维数的矩阵。语法是 A = reshape(A,m,n); 或者 A = reshape(A,[m,n])。都是将A 的行列排列成m行n列。
用法举例说明如下:
A =【1 4 7 10,2 5 8 11,3 6 9 12】
B = reshape(A,2,6)
B =【1 3 5 7 9 11,2 4 6 8 10 12】
B = reshape(A,2,)
B =【1 3 5 7 9 11,2 4 6 8 10 12】
reshape是一种函数,函数可以重新调整矩阵的行数、列数、维数。在matlab命令窗口中键入doc reshape或help reshape即可获得该函数的帮助信息。
B = reshape(A,size)是指返回一个和A元素相同的n维数组,但是由向量size来决定重构数组维数的大小,prod(size(B))的数量值必须和prod(size(A))的保持一致。
扩展资料:
调用格式
B = reshape(A,m,n)
B = reshape(A,m,n,p,...)
B = reshape(A,[m n p ...])
B = reshape(A,...,[ ],...)
B = reshape(A,size)
调用格式说明
B = reshape(A,m,n)
返回一个m*n的矩阵B, B中元素是按列从A中得到的。如果A中元素个数没有m*n个, 则会引发错误。
B = reshape(A,m,n,p,...)和B = reshape(A,[m n p ...])
返回一个和A具有相同元素的N(不是上面的参数n)维数组。但B的尺寸是m*n*p*...,m*n*p*...必须和prod(size(A))相等。即A和B元素个数相等。
B = reshape(A,...,[ ],...)
计算由占位符[ ]所表示的尺寸的长度,这样维度的乘积等价于prod(size(A))。而prod(size(A))的值必须能被指定维数的乘积所整除。在这里面占位符[ ] 只能使用一次。
相关函数: shiftdim, squeeze, circshift, permute, repmat
参考资料:百度百科——reshape
三角函数值表
三角函数值表:
数关系
tanα ·cotα=1
sinα ·cscα=1
cosα ·secα=1
商的关系
tanα=sinα/cosα cotα=cosα/sinα
正弦二倍角公式
sin2α = 2cosαsinα
推导:
sin2A=sin(A+A)=sinAcosA+cosAsinA=2sinAcosA
拓展公式:
sin2A=2sinAcosA=2tanAcos2A=2tanA/[1+tan2A]
余弦二倍角公式
余弦二倍角公式有三组表示形式,三组形式等价:
1.Cos2a=Cos2a-Sin2a=[1-tan2a]/[1+tan2a]
2.Cos2a=1-2Sin2a
3.Cos2a=2Cos2a-1
推导:
cos2A=cos(A+A)=cosAcosA-sinAsinA=cos^2A-sin^2A=2cos^2A-1=1-2sin^2A
正切二倍角公式
tan2α=2tanα/[1-tan2α]
推导:
tan2A=tan(A+A)=(tanA+tanA)/(1-tanAtanA)=2tanA/[1-tan2A]
扩展资料
以下关系,函数名不变,符号看象限.
sin(2kπ+α)=sinα
cos(2kπ+α)=cosα
tan(2kπ+α)=tanα
cot(2kπ+α)=cotα
sin(π+α)=-sinα
cos(π+α)=-cosα
tan(π+α)=tanα
cot(π+α)=cotα
sin(π-α)=sinα
cos(π-α)=-cosα
tan(π-α)=-tanα
cot(π-α)=-cotα
sin(2π-α)=-sinα
cos(2π-α)=cosα
tan(2π-α)=-tanα
cot(2π-α)=-cotα
以下关系,奇变偶不变,符号看象限
sin(90°-α)=cosα
cos(90°-α)=sinα
tan(90°-α)=cotα
cot(90°-α)=tanα
sin(90°+α)=cosα
cos(90°+α)=-sinα
tan(90°+α)=-cotα
cot(90°+α)=-tanα
sin(270°-α)=-cosα
cos(270°-α)=-sinα
tan(270°-α)=cotα
cot(270°-α)=tanα
sin(270°+α)=-cosα
cos(270°+α)=sinα
tan(270°+α)=-cotα
cot(270°+α)=-tanα
参考资料:百度百科-三角函数值
信号量的使用,求助
信号量:一个整数; 大于或等于0时代表可供并发进程使用的资源实体数; 小于0时代表正在等待使用临界区的进程数; 用于互斥的信号量初始值应大于0; 只能通过P、V原语操作而改变; 信号量元素组成: 1、表示信号量元素的值; 2、最后操作信号量元素的进程ID 3、等待信号量元素值+1的进程数; 4、等待信号量元素值为0的进程数; 二、主要函数 1.1 创建信号量 int semget( key_t key, //标识信号量的关键字,有三种方法:1、使用IPC——PRIVATE让系统产生, // 2、挑选一个随机数,3、使用ftok从文件路径名中产生 int nSemes, //信号量集中元素个数 int flag //IPC_CREAT;IPC_EXCL 只有在信号量集不存在时创建 ) 成功:返回信号量句柄 失败:返回-1 1.2 使用ftok函数根据文件路径名产生一个关键字 key_t ftok(const char *pathname,int proj_id); 路径名称必须有相应权限 1.3 控制信号量 int semctl( int semid, //信号量集的句柄 int semnum, //信号量集的元素数 int cmd, //命令 /*union senum arg */... // ) 成功:返回相应的值 失败:返回-1 命令详细说明: cmd: IPC_RMID 删除一个信号量 IPC_EXCL 只有在信号量集不存在时创建 IPC_SET 设置信号量的许可权 SETVAL 设置指定信号量的元素的值为 agc.val GETVAL 获得一个指定信号量的值 GETPID 获得最后操纵此元素的最后进程ID GETNCNT 获得等待元素变为1的进程数 GETZCNT 获得等待元素变为0的进程数 union senum 定义如下: union senum{ int val; struct semid_ds *buf; unsigned short * array; }agc; 其中 semid_ds 定义如下: struct semid_ds{ struct ipc_pem sem_pem; //operation pemission struct time_t sem_otime; //last semop()time time_t sem_ctime; //last time changed by semctl() struct sem *sembase; //ptr to first semaphore in array struct sem_queue *sem_pending; //pending operations struct sem_queue *sem_pending_last; //last pending operations struct sem_undo *undo; //undo requests on this arrary unsigned short int sem_nsems; //number of semaphores in set }; 1.4 对信号量 +1 或 -1 或测试是否为0 int semop( int semid, struct sembuf *sops, //指向元素操作数组 unsigned short nsops //数组中元素操作的个数 ) 结构 sembuf 定义 sembuf{ short int sem_num; //semaphore number short int sem_op; //semaphore operaion short int sem_flg //operation flag }; 三、例子: 2.1 服务器#include 《sys/sem.h》#include 《sys/ipc.h》#define SEGSIZE 1024#define READTIME 1union semun { int val; struct semid_ds *buf; unsigned short *array;} arg;//生成信号量int sem_creat(key_t key){ union semun sem; int semid; sem.val = 0; semid = semget(key,1,IPC_CREAT|0666); if (-1 == semid){ printf(“create semaphore error\n“); exit(-1); } semctl(semid,0,SETVAL,sem); return semid;}//删除信号量void del_sem(int semid){ union semun sem; sem.val = 0; semctl(semid,0,IPC_RMID,sem);}//pint p(int semid){ struct sembuf sops={0,+1,IPC_NOWAIT}; return (semop(semid,&sops,1));}//vint v(int semid){ struct sembuf sops={0,-1,IPC_NOWAIT}; return (semop(semid,&sops,1));}int main(){ key_t key; int shmid,semid; char *shm; char msg = “-data-“; char i; struct semid_ds buf; key = ftok(“/“,0); shmid = shmget(key,SEGSIZE,IPC_CREAT|0604); if (-1 == shmid){ printf(“ create shared memory error\n“); return -1; } shm = (char *)shmat(shmid,0,0); if (-1 == (int)shm){ printf(“ attach shared memory error\n“); return -1; } semid = sem_creat(key); for (i = 0;i 《= 3;i++){ sleep(1); p(semid); sleep(READTIME); msg = ’0’ + i; memcpy(shm,msg,sizeof(msg)); sleep(58); v(semid); } shmdt(shm); shmctl(shmid,IPC_RMID,&buf); del_sem(semid); return 0;//gcc -o shm shm.c -g} 2.2 客户端 #include 《sys/sem.h》#include 《time.h》#include 《sys/ipc.h》#define SEGSIZE 1024#define READTIME 1union semun { int val; struct semid_ds *buf; unsigned short *array;} arg;// 打印程序执行时间void out_time(void){ static long start = 0; time_t tm; if (0 == start){ tm = time(NULL); start = (long)tm; printf(“ now start ...\n“); } printf(“ second: %ld \n“,(long)(time(NULL)) - start);}//创建信号量int new_sem(key_t key){ union semun sem; int semid; sem.val = 0; semid = semget(key,0,0); if (-1 == semid){ printf(“create semaphore error\n“); exit(-1); } return semid;}//等待信号量变成0void wait_v(int semid){ struct sembuf sops={0,0,0}; semop(semid,&sops,1);}int main(void){ key_t key; int shmid,semid; char *shm; char msg; char i; key = ftok(“/“,0); shmid = shmget(key,SEGSIZE,0); if(-1 == shmid){ printf(“ create shared memory error\n“); return -1; } shm = (char *)shmat(shmid,0,0); if (-1 == (int)shm){ printf(“ attach shared memory error\n“); return -1; } semid = new_sem(key); for (i = 0;i 《 3;i ++){ sleep(2); wait_v(semid); printf(“Message geted is: %s \n“,shm + 1); out_time(); } shmdt(shm); return 0;// gcc -o shmc shmC.c -g}