
正文
pcajava代码 jawa代码
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C#中如何编写PCA算法代码?
PCA的处理步骤:
1,均值化
2,求协方差矩阵(我知道的有两种方法,这是第一种,按部就班的求,第二种是:(A*A‘/(N-1)))
3,求协方差的特征值和特征向量
4,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵
5,将样本点投影到选取的特征向量上
matlab实现源代码
%PCA算法,matlab实现
function F=pcad(A,n)%A是M*N
%测试实例A=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1;2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]
%结果F=[0.8280,-1.7776,0.9922,0.2742,1.6758,0.9129,-0.0991,-1.1446,-0.4380,-1.2238]
%PCA第一步:均值化
X=A-repmat(mean(A,2),1,size(A,2))%去均值
%PCA第二步:求特征协方差矩阵
B=COV(X')%求协方差
%PCA第三步:求特征协方差矩阵的特征值和特征向量
[v,d]=eig(B)%求特征值和特征向量
%PCA第四步:将特征值按照从大到小的顺序排序
d1=diag(d);%取出对角矩阵,也就是把特征值提出来组成一个新的M*1的d1矩阵
[d2 index]=sort(d1); %特征值以升序排序 d2是排序后的结果 index是数排序以前的排名位置
cols=size(v,2);% 特征向量矩阵的列数
for i=1:cols %对特征向量做相反位置的调整 是个降序排列。这个过程把特征值和特征向量同时做相应的降序排列
vsort(:,i) = v(:,index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量
%vsort保存的是协方差矩阵降序后的特征向量,为M*M阶
dsort(i) = d1(index(cols-i+1)); % dsort 保存的是按降序排列的特征值,是一维行向量,1*M
end %完成降序排列
M=vsort(:,1:n)%提取主成分量
%PCA第五步:将样本点投影到选取的特征向量上
F=(X'*M)'%最终的投影
相关问答
Q1: 求助。求助。输入两个字符串存入数组a和数组b中,若b串是a串的子串则输出yes,否则输出no
Scanner scanner = new Scanner(System.in);
System.out.print("请输入字符串a:");
String a = scanner.nextLine().toUpperCase();
System.out.print("请输入字符串b:");
String b = scanner.nextLine().toUpperCase();
if (a.indexOf(b) = 0) {
System.out.println("Yes");
} else {
System.out.println("NO");
}
Q2: 用STC单片机的PCA做定时器,输出PWM
既然你选择的STC单片机带PCApcajava代码,为什么不直接利用PCA模块配置成PWM功能,说一下具体型号,给你段利用PWM产生固定频率方波的代码参考。
//****************pwm.h********************************
#define Start_PWM() CR = 1 //PCA计时器开始工作
#define Stop_PWM() CR = 0 //PCA计时器停止工作
extern void InitPWM();
extern void ChangePWM(uint16 f);
//****************pwm.C********************************
#include "pwm.h"
#include "stc15F2k60s2.h"
#define CCP_S0 0x10 //P_SW1.4
#define CCP_S1 0x20 //P_SW1.5
static uint16 data frequency;
static uint16 data value;
void PCAisr() interrupt 7
{
CCF1 = 0; //清中断标志
CCAP1L = value;
CCAP1H = value 8; //更新比较值
value += frequency; //累加
}
void SetPWMFrenquency(uint16 frq)
{
frequency=frq;
value = frequency;
CCAP1L = value; //将值得低8位赋给CCAP1L
CCAP1H = value 8; //高8位赋给CCAP1H
value += frequency; //累加,为下一次赋值做好准备。产生同固定频率的方波就靠它pcajava代码了。
}
//p2.6/CCP1_3
void InitPWM()
{
ACC = P_SW1;
ACC = ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=1
ACC |= CCP_S1; //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
P_SW1 = ACC;
CCON = 0; //初始化PCA控制寄存器
//PCA定时器停止
//清除CF标志
//清除模块中断标志
CL = CH = 0; //复位PCA计数寄存器
CMOD = 0x08; //设置PCA时钟源为sysclock,禁止PCA计数器溢出中断
CCAPM1 = 0x4d; //0100 1101 //PCA模块1为16位定时器模式,同时反转(P2.6)口
PPCA = 1; //中断优先级
SetPWMFrenquency(12000); //frq=24000000/2/1000=12000,每秒钟1000hz
}
void ChangePWM(uint16 frq)
{
Stop_PWM(); //停止PCA计时器
CL=CH=0; //PCA计数器清零
CCF1=0; //PCA1的中断标记清零
SetPWMFrenquency(frq);
Start_PWM();
}
pcajava代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于jawa代码、pcajava代码的信息别忘了在本站进行查找喔。







