A. 如何用matlab验证k-means算法效果
function [ labels ] = kmeans_clustering( data, k ) [num,~]=size(data); ind = randperm(num); ind = ind(1:k); centers = data(ind,:); d=inf; labels = nan(num,1); while d>0 labels0 = labels; dist = pdist2(data, centers); [~,labels]
B. 请问如何用MATLAB验证
我的答案是随机给n和p取一个值,验证左边的累加和是否为1。
python">clc;clear;closeall;
n=100;
p=0.3;
sum=0;
warningoff;
fork=0:n
sum=sum+nchoosek(n,k)*p^k*(1-p)^(n-k);
end
sum
warningon;
输出结果 sum=1
C. 用MATLAB做算法的是不是很难换工作
是这样的 一般来说 只要你单位把你的资料交到人社局之后 你换工作对你的工程师证件是没有影响的 但是关键是证书下来之后 并不是直接通知你本人领取的 而是你原单位领取的 那么大部分情况下 你原单位都是会卡你的证件的 你有可能拿不到
D. 怎么评价matlab算法的准确性,代码怎么写
给出一组测试数据,看看能分类正确多少。这组测试数据的选取是有技巧的,你可以选择和其他相似文献同样的测试数据以比较你的算法和其他研究者的算法。
E. 怎么用MATLAB验证帕斯瓦尔方程
首先,fftshift的问题,以前上数字信号处理时,老师专门给提出了这个函数,但是我发现论坛里好多不太明白这个函数意义的,O(∩_∩)O~,一般,fft得到的是频谱范围在【0-2*pi】范围内的频谱,以高频pi为中心,但是一般使用过程中,使用的频谱习惯以低频0为中心,fftshift的功能就是将频谱进行移位,使之在【-pi,pi】之间;
另外,纵坐标的问题,版主edifier2008提示说用/N的方法归一化,我试了一下,每次采样长度变大时,纵坐标的整体值都会变大,/N之后,值变为1之内了,但是并不是理论算法中得到的1.
图形如下:
登录/注册后可看大图
程序中可以看出,也要使用fftshift对fft得到的频谱进行移位以得到以低频0为中心的频谱,另外,得到的功率谱纵轴值特别大,是不是也需要除以采样长度,我试了一下,仍然是很大,个人认为,在MATLAB中计算自相关函数以及计算FFT时,都没有对加和进行归一,将/N这一个系数可能都给省略掉了。
此外,我在很多教材里面看了不少里面的例题,都没有注意纵轴值的问题,我觉得在进行频谱分析,重点在于频率点,以及相近频率点的谱图是不是能够分辨出来,而对于各谱的大小,有个相对的比较即可。
不当之处,还望大家给与指正,:) :victory:
F. 关于matlab算法
假设输入矩阵为A;
结果为:B = (A+A') - diag(diag(A));
G. 已知算法 怎么用Matlab进行仿真
按运行快捷键F5即可实现仿真图。 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是matrix&laboratory两个词的组合.
H. 利用matlab分别对三边测量定位算法和改进算法进行仿真和验证 急求源程序
%%清空环境变量
clc
clear
loaddata
%%数据累加作为网络输入
[n,m]=size(X);
fori=1:n
y(i,1)=sum(X(1:i,1));
y(i,2)=sum(X(1:i,2));
y(i,3)=sum(X(1:i,3));
y(i,4)=sum(X(1:i,4));
y(i,5)=sum(X(1:i,5));
y(i,6)=sum(X(1:i,6));
end
%%网络参数初始化
a=0.3+rand(1)/4;
b1=0.3+rand(1)/4;
b2=0.3+rand(1)/4;
b3=0.3+rand(1)/4;
b4=0.3+rand(1)/4;
b5=0.3+rand(1)/4;
%%学习速率初始化
u1=0.0015;
u2=0.0015;
u3=0.0015;
u4=0.0015;
u5=0.0015;
%%权值阀值初始化
t=1;
w11=a;
w21=-y(1,1);
w22=2*b1/a;
w23=2*b2/a;
w24=2*b3/a;
w25=2*b4/a;
w26=2*b5/a;
w31=1+exp(-a*t);
w32=1+exp(-a*t);
w33=1+exp(-a*t);
w34=1+exp(-a*t);
w35=1+exp(-a*t);
w36=1+exp(-a*t);
theta=(1+exp(-a*t))*(b1*y(1,2)/a+b2*y(1,3)/a+b3*y(1,4)/a+b4*y(1,5)/a+b5*y(1,6)/a-y(1,1));
kk=1;
%%循环迭代
forj=1:10
%循环迭代
E(j)=0;
fori=1:30
%%网络输出计算
t=i;
LB_b=1/(1+exp(-w11*t));%LB层输出
LC_c1=LB_b*w21;%LC层输出
LC_c2=y(i,2)*LB_b*w22;%LC层输出
LC_c3=y(i,3)*LB_b*w23;%LC层输出
LC_c4=y(i,4)*LB_b*w24;%LC层输出
LC_c5=y(i,5)*LB_b*w25;%LC层输出
LC_c6=y(i,6)*LB_b*w26;%LC层输出
LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6;%LD层输出
theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1));%阀值
ym=LD_d-theta;%网络输出值
yc(i)=ym;
%%权值修正
error=ym-y(i,1);%计算误差
E(j)=E(j)+abs(error);%误差求和
error1=error*(1+exp(-w11*t));%计算误差
error2=error*(1+exp(-w11*t));%计算误差
error3=error*(1+exp(-w11*t));
error4=error*(1+exp(-w11*t));
error5=error*(1+exp(-w11*t));
error6=error*(1+exp(-w11*t));
error7=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*(w21*error1+w22*error2+w23*error3+w24*error4+w25*error5+w26*error6);
%修改权值
w22=w22-u1*error2*LB_b;
w23=w23-u2*error3*LB_b;
w24=w24-u3*error4*LB_b;
w25=w25-u4*error5*LB_b;
w26=w26-u5*error6*LB_b;
w11=w11+a*t*error7;
end
end
%画误差随进化次数变化趋势
figure(1)
plot(E)
title('训练误差','fontsize',12);
xlabel('进化次数','fontsize',12);
ylabel('误差','fontsize',12);
%print-dtiff-r60028-3
%根据训出的灰色神经网络进行预测
fori=31:36
t=i;
LB_b=1/(1+exp(-w11*t));%LB层输出
LC_c1=LB_b*w21;%LC层输出
LC_c2=y(i,2)*LB_b*w22;%LC层输出
LC_c3=y(i,3)*LB_b*w23;%LC层输出
LC_c4=y(i,4)*LB_b*w24;%LC层输出
LC_c5=y(i,5)*LB_b*w25;
LC_c6=y(i,6)*LB_b*w26;
LD_d=w31*LC_c1+w32*LC_c2+w33*LC_c3+w34*LC_c4+w35*LC_c5+w36*LC_c6;%LD层输出
theta=(1+exp(-w11*t))*(w22*y(i,2)/2+w23*y(i,3)/2+w24*y(i,4)/2+w25*y(i,5)/2+w26*y(i,6)/2-y(1,1));%阀值
ym=LD_d-theta;%网络输出值
yc(i)=ym;
end
yc=yc*100000;
y(:,1)=y(:,1)*10000;
%计算预测的每月需求量
forj=36:-1:2
ys(j)=(yc(j)-yc(j-1))/10;
end
figure(2)
plot(ys(31:36),'-*');
holdon
plot(X(31:36,1)*10000,'r:o');
I. 怎样用MATLAB验证熵函数的上凸性
首先,对每个变量用syms定义,并将这些变量用一个符号向量表示,
然后给出含这些变量的熵函数表达式。
采用matlab自带的函数hessian求熵函数的黑塞矩阵,
H=hessian(f,P),f为符号函数表达式,P为变量符号向量。
运行时间通常很长,判断矩阵是否正定即可。
如果维度过高,符号解(解析解)很难求出,可以给出初值。
还不行可以试着解这个方程,得到一个诸如迭代解。
具体的可以把待求解的函数放上来,先用简单的智能算法,比如GA遗传算法求解,看看算法是否在足够多次迭代次数(比如100000次)内收敛。
J. 请用MATLAB、C语言或者其他语言编程实现8点序列的基2-DIT-FFT算法,并对结果进行分析验证。
typedef struct
{
float real;
float img;
}COMPLEX;
void reverse(COMPLEX *X,COMPLEX *x,int N) /*输入数组名称和元素个数,实现倒序 */
{
int LH = N/2;
int j = LH;
int N1 = N-2;
int i;
for(i = 1; i <= N1; i++)
{
int k = LH;
X[i] = (i<j ? x[j] : x[i]);
/*
if(i < j)
{
comp T = a[j];
a[j] = a[i];
a[i] = T;
*/
}
while(j >= k)
{
j = j-k;
k = k/2;
}
j = j+k;
}
}
/*
函数功能:对指定长度的采样数据进行快速傅立叶变换,并返回变换值, X = FFT(x)
入口参数:目标采样数据,保存变换值的指针,采样数据长度
出口参数:指向变换值的指针
注意事项:保存结果的空间是在函数外部申请,本函数不处理此内容
/*/
COMPLEX *FFT(COMPLEX *X,COMPLEX *x, unsigned N)
{
unsigned temp=N,L=0,M=0,LE=1,LE1=0,J=0,I=0,IP=0;
COMPLEX U={0,0},W={0,0},T={0,0};
while((temp>>=1)>0) /*获得阶码M*/
{
M++;
}
reverse(X,x,N);
for(L=0;L<M;L++)
{
LE=1<<L; /*LE=2^L,分组间隔*/
LE1 = LE>>1; /*LE1=LE/2,对偶跨距,实际也是一个分组中对偶点的对数*/
U.real = 1.0;
U.img = 1.0;
W.real = cos(PI / LE1);
W.img = sin(PI / LE1);
J = 0;
while(J<LE1)
{
I = J;
while(I < N)
{
IP = I + LE1;
ComMul(X + IP,&U,&T);
ComSub(X + I,&T,X + IP);
ComAdd(X + I,&T,X + I);
I += LE;
}
ComMul(&U,&W,&U);
J++;
}
}
return X;
}
FFT中有几个复数运算,自己实现,不想发给你,年轻人还是要自己动手做点东西。N为任意数,正常应该为2的幂次方。