當前位置:首頁 » 操作系統 » matlab演算法代碼

matlab演算法代碼

發布時間: 2023-04-30 18:46:51

A. 求用MP演算法分解重建圖像的matlab代碼

這里是一維信號的重建:
%基於MP演算法
clc;clear
%觀測向量y的長度M=80,即采樣率M/N=0.3
N=256;
K=15; %信號稀疏度為15
M=80; %
x = zeros(N,1);
q = randperm(N);
x(q(1:K)) =randn(K,1); %原始信號

%構造高斯測量矩陣,用以隨機采樣
Phi = randn(M,N)*sqrt(1/M);
for i = 1:N
Phi(:,i) = Phi(:,i)/norm(Phi(:,i));
end
y=Phi*x ; %獲得線性測量

%用MP演算法開始迭代重構
m=2*K; %總的迭代次數
r_n=y; % 殘差值初始值
x_find=zeros(N,1); %x_find為MP演算法恢復的信號

for times=1:m
for col=1:N
neiji(col)=Phi(:,col)'*r_n; %計算當前殘差和感知矩陣每一列的內積
end
[val,pos]=max(abs(neiji)); %找出內積中絕對值最大的元素和它的對應的感知矩陣的列pos
x_find(pos)=x_find(pos)+neiji(pos); %計算新的近似x_find
r_n=r_n-neiji(pos)*Phi(:,pos); %更新殘差
end

subplot(3,1,1);plot(x);title('target');
subplot(3,1,2);plot(x_find);title('reconstruct');
subplot(3,1,3);plot(r_n);title('殘差');

B. 下圖用matlab怎麼編bp演算法代碼

%讀取訓練數據
[f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150);
%特徵值歸一化
[input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]') ;
%構造輸出矩陣
s = length( class) ;
output = zeros( s , 3 ) ;
for i = 1 : s
output( i , class( i ) ) = 1 ;
end
%創建神經網路
net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ;
%設置訓練參數
net.trainparam.show = 50 ;
net.trainparam.epochs = 500 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
%開始訓練
net = train( net, input , output' ) ;
%讀取測試數據
[t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);
%測試數據歸一化
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;
%模擬
Y = sim( net , testInput )
%統計識別正確率
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
[m , Index] = max( Y( : , i ) ) ;
if( Index == c(i) )
hitNum = hitNum + 1 ;
end
end
sprintf('識別率是 %3.3f%%',100 * hitNum / s2 )

看了你的數據,你至少要有的類標號吧,不知道你哪裡是輸入向量,哪裡是輸出向量

C. 求粒子群演算法MATLAB完整代碼

%% 清空環境
clear
clc
tic
%% 參數初始化
% 粒子群演算法中的兩個參數
c1 = 1.49445;
c2 = 1.49445;

maxgen = 200; % 進化次數
sizepop = 20; % 種群規模

Vmax = 1;
Vmin = -1;
popmax = 5;
popmin = -5;

%% 產生初始粒子和速度
for i = 1:sizepop
% 隨機產生一個種群
pop(i,:) = 5 * rands(1,2); % 初始種群
V(i,:) = rands(1,2); % 初始化速度
% 計算適應度
fitness(i) = fun(pop(i,:)); % 染色體的適應度
end

% 找最好的染色體
[bestfitness bestindex] = min(fitness);
zbest = pop(bestindex,:); % 全局最佳
gbest = pop; % 個體最佳
fitnessgbest = fitness; % 個體最佳適應度值
fitnesszbest = bestfitness; % 全局最佳適應度值

%% 迭代尋優
for i = 1:maxgen
for j = 1:sizepop

% 速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
V(j,find(V(j,:)>Vmax)) = Vmax;
V(j,find(V(j,:)<Vmin)) = Vmin;

%種群更新
pop(j,:) = pop(j,:) + 0.5*V(j,:);
pop(j,find(pop(j,:)>popmax)) = popmax;
pop(j,find(pop(j,:)<popmin)) = popmin;

% 自適應變異
if rand > 0.8
k = ceil(2*rand);
pop(j,k) = rand;
end

% 適應度值
fitness(j) = fun(pop(j,:));
end

% 個體最優更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end

% 群體最優更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end

yy(i) = fitnesszbest;

end
toc
%% 結果分析
plot(yy);
title(['適應度曲線 ' '終止代數=' num2str(maxgen)]);
xlabel('進化代數');
ylabel('適應度');

fun函數如下
function y = fun(x)
y = -20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2)) - exp((cos(2*pi*x(1))+ cos(2*pi*x(2)))/2) + 20 + 2.71289;

D. 關於Niblack二值化演算法matlab代碼

for
i=1:r:Height
for
j=1:r:Width
block
=
imag(i:i+r-1,j:j+r-1);
%提取方塊
m
=
mean2(block);
v
=
var(var(double(block)));
t
=
m
+
k
*
v;
block
=
double(block
>盯孫州
t);
%計算二值
imag(i:i+r-1,j:j+r-1)
=
block;
%放回方凱蔽凱歲塊
end
end

E. 急求一份多目標遺傳演算法matlab代碼!

我給你一個標准遺傳演算法程序供你參考:
該程序是遺傳演算法優化BP神經網路函數極值尋優:
%% 該代碼為基於神經網路遺傳演算法的系統極值尋優
%% 清空環境變數
clc
clear

%% 初始化遺傳演算法參數
%初始化參數
maxgen=100; %進化代數,即迭代次數
sizepop=20; %種群規模
pcross=[0.4]; %交叉概率選擇,0和1之間
pmutation=[0.2]; %變異概率選擇,0和1之間

lenchrom=[1 1]; %每個變數的字串長度,如果是浮點變數,則長度都為1
bound=[-5 5;-5 5]; %數據范圍

indivials=struct('fitness',zeros(1,sizepop), 'chrom',[]); %將種群信息定義為一個結構體
avgfitness=[]; %每一代種群的平均適應度
bestfitness=[]; %每一代種群的最佳適應度
bestchrom=[]; %適應度最好的染色體

%% 初始化種群計算適應度值
% 初始化種群
for i=1:sizepop
%隨機產生一個種群
indivials.chrom(i,:)=Code(lenchrom,bound);
x=indivials.chrom(i,:);
%計算適應度
indivials.fitness(i)=fun(x); %染色體的適應度
end
%找最好的染色體
[bestfitness bestindex]=min(indivials.fitness);
bestchrom=indivials.chrom(bestindex,:); %最好的染色體
avgfitness=sum(indivials.fitness)/sizepop; %染色體的平均適應度
% 記錄每一代進化中最好的適應度和平均適應度
trace=[avgfitness bestfitness];

%% 迭代尋優
% 進化開始
for i=1:maxgen
i
% 選擇
indivials=Select(indivials,sizepop);
avgfitness=sum(indivials.fitness)/sizepop;
%交叉
indivials.chrom=Cross(pcross,lenchrom,indivials.chrom,sizepop,bound);
% 變異
indivials.chrom=Mutation(pmutation,lenchrom,indivials.chrom,sizepop,[i maxgen],bound);

% 計算適應度
for j=1:sizepop
x=indivials.chrom(j,:); %解碼
indivials.fitness(j)=fun(x);
end

%找到最小和最大適應度的染色體及它們在種群中的位置
[newbestfitness,newbestindex]=min(indivials.fitness);
[worestfitness,worestindex]=max(indivials.fitness);
% 代替上一次進化中最好的染色體
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=indivials.chrom(newbestindex,:);
end
indivials.chrom(worestindex,:)=bestchrom;
indivials.fitness(worestindex)=bestfitness;

avgfitness=sum(indivials.fitness)/sizepop;

trace=[trace;avgfitness bestfitness]; %記錄每一代進化中最好的適應度和平均適應度
end
%進化結束

%% 結果分析
[r c]=size(trace);
plot([1:r]',trace(:,2),'r-');
title('適應度曲線','fontsize',12);
xlabel('進化代數','fontsize',12);ylabel('適應度','fontsize',12);
axis([0,100,0,1])
disp('適應度 變數');
x=bestchrom;
% 窗口顯示
disp([bestfitness x]);
提問者評價
謝謝!

F. matlab中Boosting演算法的代碼是什麼

先看這個結構裡面的這些函數都是干什麼用的,prob,概率。[1:keep],這里應該能大概看出來keep是整數,1:keep等價於1:1:keep,比如1:10,就是1,2,3,4,5,6,7,8,9,10。步長為1,從1到keep.右上角的',這個符號,表示轉置,比如1:10,是一個1行10列的矩陣,通過轉置變成10行一列。其中,sum([1:keep]),表示對這個矩陣(從1到keep求和),但是這個語句prob=flipud([1:keep]'/sum([1:keep]));裡面總覺得缺少了一個.。prob=flipud([1:keep]'./sum([1:keep]));這樣看來應該才能運行,我沒嘗試,在commandwindow裡面直接做是可以的,但是在腳本文件裡面做,可能會報錯。這個和矩陣運算有關,暫且放在這里。然後到外部,這樣我們知道了在第一行flipud()函數體裡面,實際上是在用1到keep的每一個數,除以1到keep的和值,得到一個長度為keep的矩陣。值得注意的是,這個矩陣的和值為1,在下面會用到這一點。然後flipud()函數的作用,是把矩陣倒置,比如[1,3,4,5],使用flipud()之後變成[5,4,3,1]。注意,這個操作和sort()函數不同,這個只是把以前的順序倒置,並不排序。從這里大概可以看出來,其實這個keep的值,等於chromosomes,染色體數量。這樣,對於不同的染色體,配對概率就不一樣了。從這里可以看出來,染色體配對概率應該是第一條最高,然後依次遞減。然後計算或然率,cumsum(),進行累加求和,比如matlab中給出的例子,我們用[1,2,3]也可以寫作1:3,來說,cumsum之後的結果是[1,3,6],也就是從第一個開始加和,一直加到這一項。這一點,非常類似高斯函數積分的感覺。用來計算概率cumulativedistribution。然後odd變數,把0加在了cumsum結果的前面,比如剛剛的例子[0cumsum([1,2,3])],就變成了[0,1,3,6]。注意這個地方他又轉置了一次,因為在第一行計算prob的時候,他把一個行向量,轉換成了列向量,然後現在要把0加在頭上,所以在進行cumsun()運算的時候,又把結果從列向量轉換成了行向量。僅從這兩行代碼裡面,就大概只能看出這個意思了。不過簡單一說,現在看不出來這個遺傳演算法的核心是什麼樣的,一般的神經網路裡面只有連鎖交換定律的應用,一般沒有基因分離定律的應用。看這個樣子,這是分離出來然後自由配對的做法,應該是比較高端的東西吧。

G. matlab遺傳演算法代碼檢查錯誤

發現的幾處錯誤:

1、適應蠢碰度函數裡面if a[i]=4改為if a(i)==4,類似的還有if b[i]=4。不需要多解釋了吧?一個是數組注意和C語言風格區別,另一個是判斷相等的符號問題。

2、適應度函數應返回列向量,在fit函數最後加一句:fitness=fitness(:);

3、選擇的結果是種群規模減小,不能使用固定的出示規模20,應把適應度函數裡面兩處循環for i=1:20改為for i=1:size(x,1)

4、主函數裡面rein應為reins

代碼寫到一個M文件中:

functionzd
%%初始化遺傳演算法參數
%初始化參數
NIND=20;
MAXGEN=100;
NVAR=8;
PRECI=1;
GGAP=0.9;%進化代數,即迭代次數
%種群規模
%%初始化種群計算適應度值
%初始化種群
FieldD=[rep(PRECI,[1,NVAR]);rep([0;1],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);
ObjV=fit(bs2rv(Chrom,FieldD));
gen=0;
whilegen<MAXGEN
FitnV=ranking(ObjV);
衡弊SelCh=select('sus',Chrom,FitnV,GGAP);
SelCh=recombin('xovsp',SelCh,0.7);
SelCh=mut(SelCh,0.07);
ObjVSel=fit(bs2rv(SelCh,FieldD));
[ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
咐檔族gen=gen+1

%找最好的染色體
trace(gen,1)=min(ObjV);
trace(gen,2)=sum(ObjV)/length(ObjV);
end
plot(trace(:,1));holdon;
plot(trace(:,2));grid;
legend('average','bestfitness');
function[fitness]=fit(x)
fori=1:size(x,1)
i
%隨機產生一個種群
if(x(i,6)*x(i,7)-x(i,8)*x(i,6))*(x(i,3)*x(i,2)-x(i,4)*x(i,1))==0
x(i,:)=unidrnd(2,1,8)-1;
end%染色體的適應度
end
a=x(:,1)+x(:,2)+x(:,3)+x(:,4);
b=x(:,5)+x(:,6)+x(:,7)+x(:,8);
fori=1:size(x,1)
i
ifa(i)==4
c=1;
else
c=0;
end
ifb(i)==4
d=1;
else
d=0;
end
fitness(i)=c+d;
end
fitness=fitness(:);

H. matlab遺傳演算法代碼

我發一些他們的源程序你,都是我在文獻中搜索總結出來的:
% 下面舉例說明遺傳演算法 %
% 求下列函數的最大值 %
% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] %
% 將 x 的值用一個10位的二值形式表示為二值問題,一個10位的二值數提供的解析度是每為 (10-0)/(2^10-1)≈0.01 。 %
% 將變數域 [0,10] 離散化為二值域清讓握 [0,1023], x=0+10*b/1023, 其中 b 是 [0,1023] 中的一個二值數。 %
% %
%--------------------------------------------------------------------------------------------------------------%
%--------------------------------------------------------------------------------------------------------------%

% 編程
%-----------------------------------------------
% 2.1初始化(編碼)
% initpop.m函數的功能是實現群體的初始化,popsize表示群體的大小,chromlength表示染色體的長度(二值數的長度),
% 長度大小取決於變數的二進制編碼的長度(在本例中取10位)。
%遺傳演算法子程序
%Name: initpop.m
%初始化
function pop=initpop(popsize,chromlength)
pop=round(rand(popsize,chromlength)); % rand隨機產生每個單元為 {0,1} 行數為popsize,列數為chromlength的矩陣,
% roud對矩陣的每個單元進行圓整。這樣產生的初始種群。

% 2.2.2 將二進制編碼轉化為十進制數(2)
% decodechrom.m函數的功能是將染色體(或二進制編碼)轉換為十進制,參數spoint表示待解碼的二進制串的起始位置
% (對於多個變數而言,如有兩個變數,採用20為表示,每個變數10為,則第一個變數從1開始,另一個變數從11開始。本例為1),
% 參數1ength表示所截取的長度(本例為10)。
%遺傳演算法子程序
%Name: decodechrom.m
%將二進制編碼轉換成十進制
function pop2=decodechrom(pop,spoint,length)
pop1=pop(:,spoint:spoint+length-1);
pop2=decodebinary(pop1);

% 2.4 選擇復制
% 選擇或復制答慶操作是決定哪些個體可以進入下一代。程序中採用賭輪盤選擇法選擇,這種方法較易實現。
% 根據方程 pi=fi/∑fi=fi/fsum ,選擇步驟:
% 1) 在第 t 代,由(1)式計算 fsum 和 pi
% 2) 產生 {0,1} 的隨機數 rand( .),求 s=rand( .)*fsum
% 3) 求 ∑fi≥s 中最小的 k ,則第 k 個個體被選中
% 4) 進行 N 次2)、3)操作,得到 N 個個體,成為第 t=t+1 代種群
%遺傳演算法子程序
%Name: selection.m
%選擇復制
function [newpop]=selection(pop,fitvalue)
totalfit=sum(fitvalue); %求適應值之和
fitvalue=fitvalue/totalfit; %單個個體被選擇的概率
fitvalue=cumsum(fitvalue); %如 fitvalue=[1 2 3 4],則 cumsum(fitvalue)=[1 3 6 10]
[px,py]=size(pop);
ms=sort(rand(px,1)); %從小到大排列
fitin=1;
newin=1;
while newin<=px
if(ms(newin))<fitvalue(fitin)
newpop(newin)=pop(fitin);
newin=newin+1;
else
fitin=fitin+1;
end
end

% 2.5 交叉
% 交叉(crossover),滑唯群體中的每個個體之間都以一定的概率 pc 交叉,即兩個個體從各自字元串的某一位置
% (一般是隨機確定)開始互相交換,這類似生物進化過程中的基因分裂與重組。例如,假設2個父代個體x1,x2為:
% x1=0100110
% x2=1010001
% 從每個個體的第3位開始交叉,交又後得到2個新的子代個體y1,y2分別為:
% y1=0100001
% y2=1010110
% 這樣2個子代個體就分別具有了2個父代個體的某些特徵。利用交又我們有可能由父代個體在子代組合成具有更高適合度的個體。
% 事實上交又是遺傳演算法區別於其它傳統優化方法的主要特點之一。
%遺傳演算法子程序
%Name: crossover.m
%交叉
function [newpop]=crossover(pop,pc)
[px,py]=size(pop);
newpop=ones(size(pop));
for i=1:2:px-1
if(rand<pc)
cpoint=round(rand*py);
newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)];
newpop(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)];
else
newpop(i,:)=pop(i);
newpop(i+1,:)=pop(i+1);
end
end

% 2.6 變異
% 變異(mutation),基因的突變普遍存在於生物的進化過程中。變異是指父代中的每個個體的每一位都以概率 pm 翻轉,即由「1」變為「0」,
% 或由「0」變為「1」。遺傳演算法的變異特性可以使求解過程隨機地搜索到解可能存在的整個空間,因此可以在一定程度上求得全局最優解。
%遺傳演算法子程序
%Name: mutation.m
%變異
function [newpop]=mutation(pop,pm)
[px,py]=size(pop);
newpop=ones(size(pop));
for i=1:px
if(rand<pm)
mpoint=round(rand*py);
if mpoint<=0
mpoint=1;
end
newpop(i)=pop(i);
if any(newpop(i,mpoint))==0
newpop(i,mpoint)=1;
else
newpop(i,mpoint)=0;
end
else
newpop(i)=pop(i);
end
end

很多哈,也很麻煩,但是設計程序就是如此!得耐心點才行。 最近又作了些總結,要有興趣網路HI我吧。我有M文件,運行成功

熱點內容
在我的世界伺服器中隱身 發布:2024-05-20 09:07:46 瀏覽:971
加西貝拉壓縮機好嗎 發布:2024-05-20 08:58:56 瀏覽:756
eve腳本航 發布:2024-05-20 08:56:59 瀏覽:590
取票人的密碼是什麼 發布:2024-05-20 08:21:43 瀏覽:962
天貓帳號密碼應輸入什麼 發布:2024-05-20 08:16:26 瀏覽:272
plsql異常處理 發布:2024-05-20 07:54:47 瀏覽:542
dreamweaver上傳網頁 發布:2024-05-20 07:51:24 瀏覽:462
拍攝車的分鏡頭腳本 發布:2024-05-20 07:50:15 瀏覽:137
mg名爵最高配置是哪個 發布:2024-05-20 07:45:11 瀏覽:376
輔助官網源碼 發布:2024-05-20 07:31:48 瀏覽:866