differential evalution code Error using * Inner matrix dimensions must agree.
Al momento, stai seguendo questa domanda
- Vedrai gli aggiornamenti nel tuofeed del contenuto seguito.
- Potresti ricevere delle e-mail a seconda delle tuepreferenze per le comunicazioni.
Si è verificato un errore
Impossibile completare l'azione a causa delle modifiche apportate alla pagina. Ricarica la pagina per vedere lo stato aggiornato.
0 voti
Condividi un link a questa domanda
- clear all; close all; clc
- fs=200; %sampling freq.
- dt =1/fs;
- n=fs/3 %number of samples/cycle
- m=3 %no. of cycles
- fi=50;
- t = dt*(0:400); %data window
- ww=wgn(201,1,-40);
- size(transpose(ww))
- t =dt*(0:200);
- y=sin(2*pi*fi*t + 0.3);
- for j=0:200/(n*m)
- t =dt*(j*m*n:(j+1)*m*n);
- x=sin(2*pi*fi*t + 0.3)+transpose(wgn(1+n*m,1,-40));
- V=x
- tmax=0.01;
- lastreported=0;
- %% Problem Definition
- t_est=[];
- f_est=[];
- dt=1/fs;
- i_max=tmax*fs
- for ii=0:i_max
- if(ii/i_max*100-lastreported>=1)
- lastreported=ii/i_max*100;
- fprintf('%5.2f%%\n',lastreported);
- end
- t=(ii:ii+n-1)*dt;
- CostFunction=@(x) sum((minus((x(1)),V)*sin(2*pi.*x(2).*t+x(3)).^2))/n; % Cost Function
- nVar=3; % Number of Decision Variables
- VarSize=[1 nVar]; % Decision Variables Matrix Size
- VarMin=[0,48,0]; % Lower Bound of Decision Variables
- VarMax=[1000,52,2*pi]; % Upper Bound of Decision Variables
- %% DE Parameters
- MaxIt=200; % Maximum Number of Iterations
- nPop=50; % Population Size
- beta=0.5; % Scaling Factor
- pCR=0.2; % Crossover Probability
- minCost=1e-10;
- %% Initialization
- empty_individual.Position=[];
- empty_individual.Cost=[];
- BestSol.Cost=inf;
- pop=repmat(empty_individual,nPop,1);
- for i=1:nPop
- pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
- pop(i).Cost=CostFunction(pop(i).Position);
- if pop(i).Cost<BestSol.Cost
- BestSol=pop(i);
- end
- end
- BestCost=zeros(MaxIt,1);
- %% DE Main Loop
- for it=1:MaxIt
- for i=1:nPop
- x=pop(i).Position;
- A=randperm(nPop);
- A(A==i)=[];
- a=A(1);
- b=A(2);
- c=A(3);
- % Mutation
- %beta=unifrnd(beta_min,beta_max);
- y=pop(a).Position+beta.*(pop(b).Position-pop(c).Position);
- y = max(y, VarMin);
- y = min(y, VarMax);
- % Crossover
- z=zeros(size(x));
- j0=randi([1 numel(x)]);
- for j=1:numel(x)
- if j==j0 || rand<=pCR
- z(j)=y(j);
- else
- z(j)=x(j);
- end
- end
- NewSol.Position=z;
- NewSol.Cost=CostFunction(NewSol.Position);
- if NewSol.Cost<pop(i).Cost
- pop(i)=NewSol;
- if pop(i).Cost<BestSol.Cost
- BestSol=pop(i);
- end
- end
- end
- % Update Best Cost
- BestCost(it)=BestSol.Cost;
- % Show Iteration Information
- %disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
- if(minCost>BestSol.Cost)
- break;
- ErrorTarget=0.00000001;
- EvalMax=10000*n;
- end
- end
- %% Show Results
- % disp(['Iteration ' num2str(ii) ': Best Cost = ' num2str(BestSol.Position(2))]);
- t_est=[t_est;(ii)*dt];
- f_est=[f_est;BestSol.Position(2)];
- if(minCost>BestSol.Cost)
- %break;
- ErrorTarget=0.00000001;
- EvalMax=10000*n;
- end
- end
- end
- t_est
- f_est
- plot (t_est,f_est,'red')
- hold on
- xlabel('time')
- ylabel('frequency')
- title('DE white noise ')
- c=vpa(rms(fi(t_est)-f_est))
- plot (t_est,fi*ones(size(t_est)))
- hold off
Risposta accettata
1 voto
19 Commenti
- clear all; close all; clc
- fs=200; %sampling freq.
- dt =1/fs;
- n=fs/3 %number of samples/cycle
- m=3 %no. of cycles
- fi=50;
- t = dt*(0:400); %data window
- v=@(t) (sin(2*pi*fi*t + 0.3)+ transpose(wgn(1+n*m,1,-40)));
- tmax=1;
- t_est=[];
- f_est=[];
- dt=1/fs;
- i_max=tmax*fs;
- for ii=0:i_max
- t=(ii:ii+n-1)*dt;
- V=v(t);
- CostFunction=@(x) sum((V-x(1)*sin(2*pi*x(2)*t+x(3))).^2)/n; % Cost Function
- nVar=3; % Number of Decision Variables
- VarSize=[1 nVar]; % Decision Variables Matrix Size
- VarMin=[0,48,0]; % Lower Bound of Decision Variables
- VarMax=[1000,52,2*pi]; % Upper Bound of Decision Variables
- %% DE Parameters
- MaxIt=1000; % Maximum Number of Iterations
- nPop=50; % Population Size
- beta=0.5; % Scaling Factor
- pCR=0.2; % Crossover Probability
- minCost=1e-10;
- %% Initialization
- empty_individual.Position=[];
- empty_individual.Cost=[];
- BestSol.Cost=inf;
- pop=repmat(empty_individual,nPop,1);
- for i=1:nPop
- pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
- pop(i).Cost=CostFunction(pop(i).Position);
- if pop(i).Cost<BestSol.Cost
- BestSol=pop(i);
- end
- end
- BestCost=zeros(MaxIt,1);
- %% DE Main Loop
- for it=1:MaxIt
- for i=1:nPop
- x=pop(i).Position;
- A=randperm(nPop);
- A(A==i)=[];
- a=A(1);
- b=A(2);
- c=A(3);
- % Mutation
- %beta=unifrnd(beta_min,beta_max);
- y=pop(a).Position+beta.*(pop(b).Position-pop(c).Position);
- y = max(y, VarMin);
- y = min(y, VarMax);
- % Crossover
- z=zeros(size(x));
- j0=randi([1 numel(x)]);
- for j=1:numel(x)
- if j==j0 || rand<=pCR
- z(j)=y(j);
- else
- z(j)=x(j);
- end
- end
- NewSol.Position=z;
- NewSol.Cost=CostFunction(NewSol.Position);
- if NewSol.Cost<pop(i).Cost
- pop(i)=NewSol;
- if pop(i).Cost<BestSol.Cost
- BestSol=pop(i);
- end
- end
- end
- % Update Best Cost
- BestCost(it)=BestSol.Cost;
- % Show Iteration Information
- %disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
- if(minCost>BestSol.Cost)
- break;
- end
- end
- %% Show Results
- disp(['Iteration ' num2str(ii) ': Best Cost = ' num2str(BestSol.Position(2))]);
- t_est=[t_est;(ii+n-1)*dt];
- f_est=[f_est;BestSol.Position(2)];
- end


Più risposte (0)
Categorie
Scopri di più su Gamma Functions in Centro assistenza e File Exchange
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Seleziona un sito web
Seleziona un sito web per visualizzare contenuto tradotto dove disponibile e vedere eventi e offerte locali. In base alla tua area geografica, ti consigliamo di selezionare: .
Puoi anche selezionare un sito web dal seguente elenco:
Come ottenere le migliori prestazioni del sito
Per ottenere le migliori prestazioni del sito, seleziona il sito cinese (in cinese o in inglese). I siti MathWorks per gli altri paesi non sono ottimizzati per essere visitati dalla tua area geografica.
Americhe
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
