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的冪次方。