MATLAB的max函数的问题?

矩阵x=[+0.9245 -0.2656 +0.548 -0.906]
我用matlab来求矩阵某一行的最大值,

x=[+0.9245 -0.2656 +0.548 -0.906];
y=max(x')

为什么输出的是
y=1,而不是y=+0.9245,这个问题怎么解决呢?

2个回答

应该是你设置的精度问题,你在y=max(x')执行前打印一下x向量的值,看看是不是都是四舍五入为1了。如果是1,就在脚本最前面执行一下 format long

同样的代码,我执行出来结果是y = 0.9245

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
怎么用matlab编写幂函数计算方法及其步长?
老师要求看MATLAB英文手册,然后发现连题目都看不懂???(扎心) 题目是: **Write a function program to perform the Power Method on the input matrix A. Use a while loop to make it continue until the values stop changing (up to some tol). Put a counter in the loop to count the number of steps. Try your program on some random symmetric matrices of various sizes (Hint: use A=randn(n) then A=A·A’). Is there a relationship between the size and the number of steps needed or between the size and the ew? Turn in a printout of your program and a brief report on the trial.** 我用有道翻译了一遍,发现大致是:**编写函数程序,在输入矩阵a上执行幂函数方法。使用while循环使其继续,直到值停止变化(直到某个tol)。在循环中放置一个计数器来计算步数。在不同大小的随机对称矩阵上尝试您的程序(提示:使用A=randn(n)然后A=A·A ')。大小和需要的步骤数之间或者大小和ew之间有关系吗?提交一份你的程序打印件和一份关于试验的简要报告。** 所以我真的懵逼了!求助这个到底应该怎么解决? 其中手册上附带了 > A = hilb(5) > x = ones(5,1) > x = A*x > el = max(x) > x = x/el 这么一段……__ 求助!!!!!! 我不知道这个标签什么鬼,求不忽略
matlab使用别人的代码的时候出现找不到函数的问题
我在试着复现这个问题 https://github.com/cszn/IRCNN 目前进行到了最后一步了,可是有很大的问题 ![图片说明](https://img-ask.csdn.net/upload/201807/08/1531052564_431237.png) ``` clear; clc; addpath('utilities'); imageSets = {'Set18','Set24'}; % testing dataset setTest = imageSets(1); % select the dataset useGPU = 0; folderTest = 'testsets'; folderResult = 'results'; folderModel = 'models'; if ~exist(folderResult,'file') mkdir(folderResult); end setTestCur = cell2mat(setTest(1)); disp('--------------------------------------------'); disp(['----',setTestCur,'--Color Image Demosaiking--']); disp('--------------------------------------------'); folderTestCur = fullfile(folderTest,setTestCur); % folder to store results folderResultCur = fullfile(folderResult, ['Demosaik_',setTestCur]); if ~exist(folderResultCur,'file') mkdir(folderResultCur); end %% Noise level noiselevel = 0; % default; noiselevel = 10; Isigma = 10/255; Msigma = 8; %% parameter setting in HQS (tune the following parameters to obtain the best results) %% -------------------important!------------------ % Parameter settings of IRCNN % (1) image noise level: Isigma Isigma = 0.5/255; % default 0.5/255 for noise-free image, ****** from interval [1/255, 20/255] ******; e.g., 1/255, 2.55/255, 7/255, 11/255 % (2) noise level of the last denoiser: Msigma Msigma = 2; % default 2 for noise-free image, ****** from {1 2 3 4 5 7 9 11 13 15} ****** %-------------------------------------------------------- %% load denoisers load(fullfile(folderModel,'modelcolor.mat')); %% default parameter setting in HQS totalIter = 30; % default 30 lamda = (Isigma^2)/3; % default 3, ****** from {1 2 3 4} ****** modelSigma1 = 49; % default 49 modelSigmaS = logspace(log10(modelSigma1),log10(Msigma),totalIter); rho = Isigma^2/((modelSigma1/255)^2); ns = min(25,max(ceil(modelSigmaS/2),1)); ns = [ns(1)-1,ns]; ext = {'*.jpg','*.png','*.bmp','*.tif'}; filepaths = []; for i = 1 : length(ext) filepaths = cat(1,filepaths,dir(fullfile(folderTestCur, ext{i}))); end PSNRs = zeros(1,length(filepaths)); SSIMs = zeros(1,length(filepaths)); for i = 1 : length(filepaths) label = imread(fullfile(folderTestCur,filepaths(i).name)); [~, Iname, ext] = fileparts(filepaths(i).name); label = im2single(label); % generate mask [B, y, mask] = mosaic_bayer(label, 'grbg', noiselevel); y = single(y); mask = single(mask); z = linearlcc(B, 0); z = single(z); z0 = z; if useGPU z = gpuArray(z); y = gpuArray(y); end for itern = 1:totalIter % step 1 rho = lamda*255^2/(modelSigmaS(itern)^2); z = (y+rho*z)./(mask+rho); if ns(itern+1)~=ns(itern) [net] = loadmodel(modelSigmaS(itern),CNNdenoiser); net = vl_simplenn_tidy(net); if useGPU net = vl_simplenn_move(net, 'gpu'); end end % step 2 res = vl_simplenn(net, z,[],[],'conserveMemory',true,'mode','test'); residual = res(end).x; z = z - residual; % imshow(z) % title(int2str(itern)) % drawnow; end if useGPU output = im2uint8(gather(z)); y = im2uint8(gather(y)); end %output(mask==1) = y(mask==1); [PSNR_Cur,SSIM_Cur] = Cal_PSNRSSIM(im2uint8(label),output,10,10); PSNRs(i) = PSNR_Cur; SSIMs(i) = SSIM_Cur; imshow(cat(2,y,output)); drawnow; pause(0.001); disp([filepaths(i).name,' -- ', num2str(PSNR_Cur,'%2.2f'),'dB -- ', num2str(SSIM_Cur,'%2.2f')]); % imwrite(y,fullfile(folderResultCur,[Iname,'_mosaik.png'])); % imwrite(output,fullfile(folderResultCur,[Iname,'_ircnn.png'])); end disp('Average PSNR and SSIM') disp([mean(PSNRs),mean(SSIMs)]); ```
matlab中遗传算法的约束条件如何处理,是应该用罚函数吗?
刚刚学习遗传算法 解决简单的一个非线性规划的问题(我把我的问题简化了) max z=x(1).^2+x(2).^2; 约束条件是x(1)+x(2)<=5; 2*x(1)+3*x(2)<=10; 如何处理约束条件 请问这两个约束条件如何写入我的遗传算法的代码中呢?应该写入遗传算法过程的哪个部分?
请问matlab里自带的deconvblind函数运用的是哪种盲解卷积的算法,求原理过程~~~
% Parse inputs to verify valid function calling syntaxes and arguments [J,P,NUMIT,DAMPAR,READOUT,WEIGHT,sizeI,classI,sizePSF,FunFcn,FunArg] = ... parse_inputs(varargin{:}); % 1. Prepare parameters for iterations % % Create indexes for image according to the sampling rate idx = repmat({':'},[1 length(sizeI)]); wI = max(WEIGHT.*(READOUT + J{1}),0);% at this point - positivity constraint fw = fftn(WEIGHT); clear WEIGHT; DAMPAR22 = (DAMPAR.^2)/2; % 2. L_R Iterations % lambda = 2*any(J{4}(:)~=0); for k = (lambda + 1) : (lambda + NUMIT), % 2.a Make an image and PSF predictions for the next iteration if k > 2,% image lambda = (J{4}(:,1).'*J{4}(:,2))/(J{4}(:,2).'*J{4}(:,2) + eps); lambda = max(min(lambda,1),0); % stability enforcement lambda(0,1)之间 end Y = max(J{2} + lambda*(J{2} - J{3}),0);% image positivity constraint if k > 2,% PSF lambda = (P{4}(:,1).'*P{4}(:,2))/(P{4}(:,2).'*P{4}(:,2) + eps); lambda = max(min(lambda,1),0);% stability enforcement end B = max(P{2} + lambda*(P{2} - P{3}),0);% PSF positivity constraint sumPSF = sum(B(:)); B = B/(sum(B(:)) + (sumPSF==0)*eps);% normalization is a necessary constraint, % because given only input image, the algorithm cannot even know how much % power is in the image vs PSF. Therefore, we force PSF to satisfy this % type of normalization: sum to one. % 2.b Make core for the LR estimation CC = corelucy(Y,psf2otf(B,sizeI),DAMPAR22,wI,READOUT,1,idx,[],[]); % 2.c Determine next iteration image & apply positivity constraint J{3} = J{2}; H = psf2otf(P{2},sizeI); scale = real(ifftn(conj(H).*fw)) + sqrt(eps); J{2} = max(Y.*real(ifftn(conj(H).*CC))./scale,0); clear scale; J{4} = [J{2}(:)-Y(:) J{4}(:,1)]; clear Y H; % 2.d Determine next iteration PSF & apply positivity constraint + normalization P{3} = P{2}; H = fftn(J{3}); scale = otf2psf(conj(H).*fw,sizePSF) + sqrt(eps); P{2} = max(B.*otf2psf(conj(H).*CC,sizePSF)./scale,0); clear CC H; sumPSF = sum(P{2}(:)); P{2} = P{2}/(sumPSF + (sumPSF==0)*eps); if ~isempty(FunFcn), FunArg{1} = P{2}; P{2} = feval(FunFcn,FunArg{:}); end; P{4} = [P{2}(:)-B(:) P{4}(:,1)]; end clear fw wI; % 3. Convert the right array (for cell it is first array, for notcell it is % second array) to the original image class & output the whole num = 1 + strcmp(classI{1},'notcell'); if ~strcmp(classI{2},'double'), J{num} = images.internal.changeClass(classI{2},J{num}); end if num == 2,% the input & output is NOT a cell P = P{2}; J = J{2}; end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Function: parse_inputs function [J,P,NUMIT,DAMPAR,READOUT,WEIGHT,sizeI,classI,sizePSF,FunFcn,FunArg] ... = parse_inputs(varargin) % % Outputs: % I=J{1} the input array (could be any numeric class, 2D, 3D) % P=P{1} the operator that distorts the ideal image % % Defaults: % NUMIT=[];NUMIT_d = 10; % Number of iterations, usually produces good % result by 10. DAMPAR =[];DAMPAR_d = 0;% No damping is default WEIGHT =[]; % All pixels are of equal quality, flat-field is one READOUT=[];READOUT_d= 0;% Zero readout noise or any other % back/fore/ground noise associated with CCD camera. % Or the Image is corrected already for this noise by user. FunFcn = '';FunFcn_d = ''; FunArg = {};FunArg_d = {}; funnum = [];funnum_d = nargin+1; narginchk(2,inf);% no constraint on max number % because of FUN args % First, assign the inputs starting with the cell/not cell image & PSF switch iscell(varargin{1}) + iscell(varargin{2}), case 0, % no-cell array is used to do a single set of iterations classI{1} = 'notcell'; J{1} = varargin{1};% create a cell array in order to do the iterations P{1} = varargin{2}; case 1, error(message('images:deconvblind:IandInitpsfMustBeOfSameType')) case 2,% input cell is used to resume the interrupted iterations or classI{1} = 'cell';% to interrupt the iteration to resume them later J = varargin{1}; P = varargin{2}; if length(J)~=length(P), error(message('images:deconvblind:IandInitpsfMustBeOfSameSize')) end end; % check the Image, which is the first array of the J-cell [sizeI, sizePSF] = padlength(size(J{1}), size(P{1})); classI{2} = class(J{1}); validateattributes(J{1},{'uint8' 'uint16' 'double' 'int16' 'single'},... {'real' 'nonempty' 'finite'},mfilename,'I',1); if prod(sizeI)<2, error(message('images:deconvblind:inputImageMustHaveAtLeast2Elements')) elseif ~isa(J{1},'double'), J{1} = im2double(J{1}); end % check the PSF, which is the first array of the P-cell validateattributes(P{1},{'uint8' 'uint16' 'double' 'int16' 'single'},... {'real' 'nonempty' 'finite' 'nonzero'},mfilename,'INITPSF',2); if prod(sizePSF)<2, error(message('images:deconvblind:initPSFMustHaveAtLeast2Elements')) elseif ~isa(P{1},'double'), P{1} = double(P{1}); end % now since the image&PSF are OK&double, we assign the rest of the J & P cells len = length(J); if len == 1,% J = {I} will be reassigned to J = {I,I,0,0} J{2} = J{1}; J{3} = 0; J{4}(prod(sizeI),2) = 0; P{2} = P{1}; P{3} = 0; P{4}(prod(sizePSF),2) = 0; elseif len ~= 4,% J = {I,J,Jm1,gk} has to have 4 or 1 arrays error(message('images:deconvblind:inputCellsMustBe1or4ElementNumArrays')) else % check if J,Jm1,gk are double in the input cell if ~all([isa(J{2},'double'),isa(J{3},'double'),isa(J{4},'double')]), error(message('images:deconvblind:ImageCellElementsMustBeDouble')) elseif ~all([isa(P{2},'double'),isa(P{3},'double'),isa(P{4},'double')]), error(message('images:deconvblind:psfCellElementsMustBeDouble')) end end; % Second, Find out if we have a function to put additional constraints on the PSF % function_classes = {'inline','function_handle','char'}; idx = []; for n = 3:nargin, idx = strmatch(class(varargin{n}),function_classes); if ~isempty(idx), [FunFcn,msgStruct] = fcnchk(varargin{n}); %only works on char, making it inline if ~isempty(msgStruct) error(msgStruct) end FunArg = [{0},varargin(n+1:nargin)]; try % how this function works, just in case. feval(FunFcn,FunArg{:}); catch ME Ftype = {'inline object','function_handle','expression ==>'}; Ffcnstr = {' ',' ',varargin{n}}; error(message('images:deconvblind:userSuppliedFcnFailed', Ftype{ idx }, Ffcnstr{ idx }, ME.message)) end funnum = n; break end end if isempty(idx), FunFcn = FunFcn_d; FunArg = FunArg_d; funnum = funnum_d; end % % Third, Assign the inputs for general deconvolution: % if funnum>7 error(message('images:validate:tooManyInputs',mfilename)); end switch funnum, case 4,% deconvblind(I,PSF,NUMIT,fun,...) NUMIT = varargin{3}; case 5,% deconvblind(I,PSF,NUMIT,DAMPAR,fun,...) NUMIT = varargin{3}; DAMPAR = varargin{4}; case 6,% deconvblind(I,PSF,NUMIT,DAMPAR,WEIGHT,fun,...) NUMIT = varargin{3}; DAMPAR = varargin{4}; WEIGHT = varargin{5}; case 7,% deconvblind(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT,fun,...) NUMIT = varargin{3}; DAMPAR = varargin{4}; WEIGHT = varargin{5}; READOUT = varargin{6}; end % Forth, Check validity of the gen.conv. input parameters: % % NUMIT check number of iterations if isempty(NUMIT), NUMIT = NUMIT_d; else %verify validity validateattributes(NUMIT,{'double'},... {'scalar' 'positive' 'integer' 'finite'},... mfilename,'NUMIT',3); end % DAMPAR check damping parameter if isempty(DAMPAR), DAMPAR = DAMPAR_d; elseif (numel(DAMPAR)~=1) && ~isequal(size(DAMPAR),sizeI), error(message('images:deconvblind:damparMustBeSizeOfInputImage')); elseif ~isa(DAMPAR,classI{2}), error(message('images:deconvblind:damparMustBeSameClassAsInputImage')); elseif ~strcmp(classI{2},'double'), DAMPAR = im2double(DAMPAR); end if ~isfinite(DAMPAR), error(message('images:deconvblind:damparMustBeFinite')); end % WEIGHT check weighting if isempty(WEIGHT), WEIGHT = ones(sizeI); else numw = numel(WEIGHT); validateattributes(WEIGHT,{'double'},{'finite'},mfilename,'WEIGHT',5); if (numw ~= 1) && ~isequal(size(WEIGHT),sizeI), error(message('images:deconvblind:weightMustBeSizeOfInputImage')); elseif numw == 1, WEIGHT = repmat(WEIGHT,sizeI); end; end % READOUT check read-out noise if isempty(READOUT), READOUT = READOUT_d; elseif (numel(READOUT)~=1) && ~isequal(size(READOUT),sizeI), error(message('images:deconvblind:readoutMustBeSizeOfInputImage')); elseif ~isa(READOUT,classI{2}), error(message('images:deconvblind:readoutMustBeSameClassAsInputImage')); elseif ~strcmp(classI{2},'double'), READOUT = im2double(READOUT); end if ~isfinite(READOUT), error(message('images:deconvblind:readoutMustBeFinite')); end;
MATLAB报错未定义函数或变量怎么破啊?附代码
%%----------------------------------------------------------------------------------------------------------------- % fobj 评价函数 % dim 变量的个数 % Max_iteration 最大迭代次数 % SearchAgents_no 种群规模 % lb=[lb1,lb2,...,lbn] lbn 是变量 n 的下界 % ub=[ub1,ub2,...,ubn] ubn 是变量 n 的上界 %%----------------------------------------------------------------------------------------------------------------- % 位置更新函数 [Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj) % 初始化alpha, beta,和delta_pos Alpha_pos=zeros(1,dim); Alpha_score=inf; Beta_pos=zeros(1,dim); Beta_score=inf; Delta_pos=zeros(1,dim); Delta_score=inf; %初始化灰狼个体的位置 Positions=initialization(SearchAgents_no,dim,ub,lb); Convergence_curve=zeros(1,Max_iter); l=0; % 循环计数 % 主循环 while l<Max_iter for i=1:size(Positions,1) % 边界控制 Flag4ub=Positions(i,:)>ub; Flag4lb=Positions(i,:)<lb; Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; % 计算评价函数 fitness=fobj(Positions(i,:)); % 更新 Alpha, Beta 和 Delta if fitness<Alpha_score Alpha_score=fitness; % 更新 alpha Alpha_pos=Positions(i,:); end if fitness>Alpha_score && fitness<Beta_score Beta_score=fitness; % 更新 beta Beta_pos=Positions(i,:); end if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score Delta_score=fitness; % 更新delta Delta_pos=Positions(i,:); end end a=2-l*((2)/Max_iter); % 线性下降从 2到0 % 更新灰狼个体的位置 for i=1:size(Positions,1) for j=1:size(Positions,2) r1=rand(); % r1 是 0 到 1 之间的随机数 r2=rand(); % r2 是 0 到 1 之间的随机数 A1=2*a*r1-a; C1=2*r2; D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); X1=Alpha_pos(j)-A1*D_alpha; r1=rand(); r2=rand(); A2=2*a*r1-a; C2=2*r2; D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); X2=Beta_pos(j)-A2*D_beta; r1=rand(); r2=rand(); A3=2*a*r1-a; C3=2*r2; D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); X3=Delta_pos(j)-A3*D_delta; Positions(i,j)=(X1+X2+X3)/3; end end l=l+1; Convergence_curve(l)=Alpha_score; end
用matlab对语音端点检测后怎么导出来?
我按照网上的程序用matlab对一段音频进行端点检测之后,不知道怎么把处理后的音频导出来。 ``` %双门限法端点检测函数 function duandianjiance clc;close all; [x,fs] = audioread('E:\\1matlab\\newcut.wav');%读取要处理的信号,计算过零率容易受低频干扰, 特别是50 Hz 交流干扰的影响,所以这里的信号是经过滤波的 x=double(x); x=x/max(abs(x)); %幅度归一化 %常数设置 FrameLen = 240;%指定帧长 FrameInc = 80;%指定帧移 amp1 = 10; amp2 = 2; zcr1 = 10; zcr2 = 5; maxsilence = 8; % 6*10ms = 30ms minlen = 15; % 15*10ms = 150ms status = 0; count = 0; silence = 0; %计算过零率 tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);%分帧处理,tmp1和tmp2为分帧后形成的二维数组 tmp2 = enframe(x(2:end) , FrameLen, FrameInc); signs = (tmp1.*tmp2)<0; diffs = (tmp1 -tmp2)>0.02; zcr = sum(signs.*diffs, 2); %计算短时能量 amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2); %调整能量门限 amp1 = min(amp1, max(amp)/4); amp2 = min(amp2, max(amp)/8); %开始端点检测 x1 = []; x2 = []; for n=1:length(zcr) goto = 0; switch status case {0,1} % 0 = 静音, 1 = 可能开始 if amp(n) > amp1 % 确信进入语音段 x1(end+1) = max(n-count-1,1); status = 2; silence = 0; count = count + 1; elseif amp(n) > amp2 || ... % 可能处于语音段 zcr(n) > zcr2 status = 1; count = count + 1; else % 静音状态 status = 0; count = 0; if length(x1)~=length(x2) x2(end+1)=x1(end)+count-silence/2-1; end end case 2 % 2 = 语音段 if amp(n) > amp2 || ... % 保持在语音段 zcr(n) > zcr2 count = count + 1; else % 语音将结束 silence = silence+1; if silence < maxsilence % 静音还不够长,尚未结束 count = count + 1; elseif count < minlen % 语音长度太短,认为是噪声 status = 0; silence = 0; count = 0; else % 语音结束 status = 3; end end case 3 status=0; x2(end+1)=x1(end)+count-silence/2-1; end end % count = count-silence/2; % v_count(i)=v_count(i)+v_count(i-1); % v_silence(i)=v_count(i)+v_silence(i); if length(x2)<length(x1) x2(end+1)=length(zcr); end subplot(311) plot(x) axis([1 length(x) -1 1]) ylabel('Speech'); for i=1:length(x2) line([x1(i)*FrameInc x1(i)*FrameInc], [-1 1], 'Color', 'red'); line([x2(i)*FrameInc x2(i)*FrameInc], [-1 1], 'Color', 'green'); end % line([x1*FrameInc x1*FrameInc], [-1 1], 'Color', 'red'); % line([x2*FrameInc x2*FrameInc], [-1 1], 'Color', 'red'); subplot(312) plot(amp); axis([1 length(amp) 0 max(amp)]) ylabel('Energy'); for i=1:length(x2) line([x1(i) x1(i)], [min(amp),max(amp)], 'Color', 'red'); line([x2(i) x2(i)], [min(amp),max(amp)], 'Color', 'green'); end subplot(313) plot(zcr); axis([1 length(zcr) 0 max(zcr)]) ylabel('ZCR'); for i=1:length(x2) line([x1(i) x1(i)], [min(zcr),max(zcr)], 'Color', 'red'); line([x2(i) x2(i)], [min(zcr),max(zcr)], 'Color', 'green'); %我知道可以用audiowrite('filename',y,fs)这个函数导出音频,但这里的y不知道如何处理。 end ```
利用matlab进行微型电动汽车直流电动机驱动系统建模与控制仿真时,simulink仿真模型出现错误。
1、按照书上给出的步骤执行,但是simulink仿真出现问题,可能是传递函数转 化成模型时出错,不能正确执行。 2、代码如下: clear a11 clc % % % % % % % % % %电动机功率估算 m=1850; f=0.005;cd=0.49;A=3.8; vmax=60;i=0.1;vi=15; pv=(m*9.8*f/3600*vmax+cd*A/76140*vmax^3)/0.92; po=(m*9.8*f/3600*vi+cd*A/76140*vi^3+m*9.8*sin(atan(i))*vi/3600)/0.92; if pv>po p=pv; else p=po; end % % % % % % % % % %电动机驱动系统参数设计计算 R=0.025; %电枢电阻 L=0.018; %电枢电感 u=120; %额定电压 I=85; %额定电流 n=1500; %额定转速 ce=(u-R*I)/n; %电动机电动势系数0.04343 GD2=3.53; %飞轮转矩 cm=30/pi*ce; tm=GD2*R/375/cm/ce; %电动机时间常数 t1=L/R; %电枢回路电磁时间常数 ks=7.9; %触发整流装置放大系数 ts=0.0000667; %触发整流装置延迟系数,开关频率15KHZ alpha=10/1500; %转速反馈系数 beta=0.0908; %电流反馈系数 toi=0.002; %电流环滤波时间常数 t1=0.72; taoi=t1;%0.05; TI=ts+toi; KI=1/(2*TI); %电流开环增量 ki=KI*taoi*R/beta/ks; %电流调节器比例系数5.21 ton=0.2; Tn=2*TI+ton; taon=0.1207; h=5; KN=(h+1)/(2*h^2*Tn^2); %转速开环增益 kn=(h+1)*beta*ce*tm/(2*h*alpha*R*Tn); %转速调节器比例系数?? taodn=Tn*((4*h+2)/(h+1)); %?? [a,b,c,d]=linmod('diandong_che_double_loop'); sy=ss(a,b,c,d); %将系统的simulink结构图转换为状态空间模型 g=tf(sy); step(g,1); den=g.den{1}; %从传递函数中提取分母 num=g.num{1}; %从传递函数中提取分子 finals=polyval(num,0)/polyval(den,0); %求系统的稳态值 [y,t]=step(g); [ym,jmax]=max(y); Mp=100*(ym-finals)/finals; %求系统响应最大超调量 fprintf('电动车辆需求功率为= %3.2f KW\n',p) fprintf('系统最大超调量Mp= %3.3f% % \n',Mp) tp=t(jmax); fprintf('系统峰值时间tp=%3.3f s\n',tp) lt=length(t); while(y(lt)>0.98*finals)&&(y(lt)<1.02*finals) lt=lt-1; end tr=t(lt); fprintf('系统调整时间(2% % )tr=%3.3f s\n',tr )
基于置信传播的立体匹配的相关参数MATLAB应该怎么调整
%基于可信传播的立体匹配算法 %代价函数:AD %优化策略:max-product belief propagation,accelerated updating %参考论文:Comparison of Graph Cuts with Belief Propagation for Stereo, using %Identical MRF Parameters %参考论文:Stereo Matching Using Belief Propagation % %dlut %wzb clear; clc; T=4;%Plots平滑模型的梯度阈值 Truncation=20;%代价函数的截断阈值 P=4;%Plots模型参数 s=10;%Plos模型参数 D=50;%parameter for converting cost into compatibility exp(-C/D) iter=50;%belief propagation 算法的迭代次数 %公共参数 T = input('Input the smooth parameter of Plots model, T[4]: '); if isempty(T)%Plots平滑模型的梯度阈值 T = 4; end s = input('Input the smooth parameter of Plots model, s[10]: '); if isempty(s)%Plos模型参数 s = 10; end P = input('Input the smooth parameter of Plots model, P[4]: '); if isempty(P)%Plots模型参数 P = 4; end Truncation = input('Input the truncation value of cost, Truncation[20]: '); if isempty(Truncation)%代价函数的截断阈值 Truncation = 20; end iter = input('Input the iteration times, iter[50]: '); if isempty(iter) iter = 50; end %图像名 imagename = input('Input the image pairs name, imagename[tsukuba]: '); if isempty(imagename) imagename = 'tsukuba'; end reference = imread([imagename 'left1.png']);%参考图像左图像 disp(['The reference image is: ' imagename 'left1.png']); target = imread([imagename 'right1.png']);%目标图像 disp(['The target image is: ' imagename 'right1.png']); dmax = input('Input the disparity range(the max disparity)[16]:');%最大视差值,候选视差范围从0-dmax if isempty(dmax) dmax=16;%19 end sdmax='The disparity range is: 0--'; eval(['disp(''[' sdmax num2str(dmax) ']'')']); scalar = input('Input the disparity scalar when saved, scalar[16]:'); if isempty(scalar) scalar=16;%19 end disp('running....'); %%%%%%%%%%%%%belief propagation accelerated left image is the reference%%% rgbreference = reference; reference = rgb2gray(reference);reference = double(reference); target = rgb2gray(target);target = double(target); [nr,nc] = size(reference);%图像大小 disp = zeros(nr,nc); leftgradient = zeros(nr,nc); leftgradient(:,2:end) = abs(reference(:,2:end)-reference(:,1:nc-1));%左梯度 leftgradient = leftgradient>T; rightgradient = zeros(nr,nc); rightgradient(:,1:nc-1) = abs(reference(:,1:nc-1)-reference(:,2:end));%右梯度 rightgradient = rightgradient>T; upgradient = zeros(nr,nc); upgradient(2:end,:) = abs(reference(2:end,:)-reference(1:nr-1,:));%上梯度 upgradient = upgradient>T; downgradient = zeros(nr,nc); downgradient(1:nr-1,:) = abs(reference(1:nr-1,:)-reference(2:end,:));%下梯度 downgradient = downgradient>T; %prawcost = Ad(reference,target,dmax); prawcost=zeros(nr,nc,dmax+1); for d=0:dmax%d为循环变量 prawcost(:,d+1:nc,d+1)=abs(reference(:,d+1:nc)-target(:,1:nc-d)); for temp=1:d%图像边界处理 prawcost(:,temp,d+1)=prawcost(:,d+1,d+1); end end prawcost(prawcost>Truncation) = Truncation;%代价函数 prawmessage = exp(-prawcost/D); clear reference; clear target; leftmessage = ones(nr,nc,dmax+1);%从左邻域像素传递来的信息存储矩阵 rightmessage = leftmessage;%从右邻域像素传递来的信息存储矩阵 upmessage = leftmessage;%从上邻域像素传来的信息存储矩阵 downmessage = leftmessage;%从下邻域像素传来的信息存储矩阵 smooth1 = exp(-s/D);%平滑项 smooth2 = exp(-P*s/D); E = []; tic for iteriter = 1:iter %beleif propagation 迭代过程 %,由于参考图像为左图像,参考图像左边界像素在右图像中没有匹配点的概率很大,所以选择信息先从右向左传播的策略 tempupdownpraw = upmessage.*downmessage.*prawmessage;%上信息,下信息,源信息的乘积 for row = 2:nr-1%计算右信息,信息从右向左传播 for col = 2:nc-1 currentcol = nc-col+1;%当前像素列坐标 tempvector = rightmessage(row,currentcol+1,:).*tempupdownpraw(row,currentcol+1,:);%右信息,上信息,下信息,源信息的乘积 tempvector = tempvector(:); if rightgradient(row,currentcol) smooth = smooth1; else smooth = smooth2; end tempvector = tempvector*smooth; maxvectorelement = max(tempvector);%加入平滑项的最大传递信息 for d = 1:dmax+1 tempvectorelement = tempvector(d)/smooth; rightmessage(row,currentcol,d) = max(maxvectorelement,tempvectorelement); %去掉平滑项的最大传递信息 end rightmessage(row,currentcol,:) = rightmessage(row,currentcol,:)*(dmax+1)/sum(rightmessage(row,currentcol,:));%归一化 end end%计算右信息,信息从右向左传播 for row = 2:nr-1%计算左信息,信息从左向右传播 for col = 2:nc-1 tempvector = leftmessage(row,col-1,:).*tempupdownpraw(row,col-1,:);%左信息,上信息,下信息,源信息的乘积 tempvector = tempvector(:); if leftgradient(row,col) smooth = smooth1; else smooth = smooth2; end tempvector = tempvector*smooth; maxvectorelement = max(tempvector);%加入平滑项的最大传递信息 for d = 1:dmax+1 tempvectorelement = tempvector(d)/smooth; leftmessage(row,col,d) = max(maxvectorelement,tempvectorelement); %去掉平滑项的最大传递信息 end leftmessage(row,col,:) = leftmessage(row,col,:)*(dmax+1)/sum(leftmessage(row,col,:));%归一化 end end%计算左信息,信息从左向右传播 templeftrightpraw = leftmessage.*rightmessage.*prawmessage;%左信息,右信息,源信息的乘积 for col = 2:nc-1%计算上信息,信息从上向下传播 for row = 2:nr-1 tempvector = upmessage(row-1,col,:).*templeftrightpraw(row-1,col,:);%左信息,右信息,上信息,源信息的乘积 tempvector = tempvector(:); if upgradient(row,col) smooth = smooth1; else smooth = smooth2; end tempvector = tempvector*smooth; maxvectorelement = max(tempvector);%加入平滑项的最大传递信息 for d = 1:dmax+1 tempvectorelement = tempvector(d)/smooth; upmessage(row,col,d) = max(maxvectorelement,tempvectorelement); %去掉平滑项的最大传递信息 end upmessage(row,col,:) = upmessage(row,col,:)*(dmax+1)/sum(upmessage(row,col,:));%归一化 end end%计算上信息,信息从上向下传播 for col = 2:nc-1%计算下信息,信息从下向上传播 for row = 2:nr-1 currentrow = nr-row+1; tempvector = downmessage(currentrow+1,col,:).*templeftrightpraw(currentrow+1,col,:);%左信息,右信息,上信息,源信息的乘积 tempvector = tempvector(:); if downgradient(currentrow,col) smooth = smooth1; else smooth = smooth2; end tempvector = tempvector*smooth; maxvectorelement = max(tempvector);%加入平滑项的最大传递信息 for d = 1:dmax+1 tempvectorelement = tempvector(d)/smooth; downmessage(currentrow,col,d) = max(maxvectorelement,tempvectorelement); %去掉平滑项的最大传递信息 end downmessage(currentrow,col,:) = downmessage(currentrow,col,:)*(dmax+1)/sum(downmessage(currentrow,col,:));%归一化 end end%计算下信息,信息从下向上传播 belief=downmessage.*upmessage.*leftmessage.*rightmessage.*prawmessage; [temp disp]=max(belief,[],3);%选择可信度最大的作为最终视差求取结果 disp=disp-1;%数组下表从1开始,而视差从0开始 eval(['imwrite(uint8(disp*8),''disp' num2str(iteriter) '.png'')']);%将视差结果存储为图像 toc end %beleif propagation 迭代过程 % belief = downmessage.*upmessage.*leftmessage.*rightmessage.*prawmessage; % ED = 0; % [temp disp] = max(belief,[],3);%选择可信度最大的作为最终视差求取结果 % for row = 1:nr%data term % for col = 1:nc % ED = ED+prawcost(row,col,disp(row,col)); % end % end % disp = disp-1;%数组下表从1开始,而视差从0开始 % % ES = 0; % temp1 = zeros(size(disp)); % temp1(1:nr-1,:) = disp(1:nr-1,:)-disp(2:nr,:); % tmp1 = temp1~=0&downgradient;%列方向上的大梯度平滑项 % ES = ES+length(find(tmp1))*s; % tmp1 = temp1~=0&~downgradient;%列方向上的小梯度平滑项 % ES = ES+length(find(tmp1))*s*P; % % temp2 = zeros(size(disp)); % temp2(:,1:nc-1) = disp(:,1:nc-1)-disp(:,2:nc); % tmp2 = temp2~=0&rightgradient;%行方向上的大梯度平滑项 % ES = ES+length(find(tmp2))*s; % tmp2 = temp2~=0&~rightgradient;%行方向上的小梯度平滑项 % ES = ES+length(find(tmp2))*s*P; % E = [E;[ED ES]]; % eval(['imwrite(uint8(disp*scalar),''bpadisp' num2str(iteriter) 's' num2str(s) 'P' num2str(P) 'T' num2str(T) 'AD' num2str(Truncation) imagename '.png'')']);%将视差结果存储为图像 % end %beleif propagation 迭代过程 % eval(['save bpas' num2str(s) 'P' num2str(P) 'T' num2str(T) 'AD' num2str(Truncation) imagename 'energy.mat E']); % toc %%%%%%%%%%%%%belief propagation accelerated left image is the reference%
关于MATLAB的&用法错误
我在该论坛下载了一个2D的粒子群算法,但本人想解决的是3维问题,因此想把程序改成3维的。但是将程序中的partsize设置成为3之后,也把region的矩阵改成[-3,3;-3,3;-3,3],但是运行时提示错误, Error using & Inputs must have the same size. Error in pso_2D>Region_in (line 110) flag=flag&(pos_present(1:j)>=region(j,1))&(pos_present(1:j)<=region(j,2)); Error in pso_2D (line 69) if (arr_present(j,end)>pbest(j,end))&(Region_in(arr_present(j,:),region)) 这两段程序在改成3之前还是好好的,为什么改成3之后就错了,附全部程序 function [pso F] = pso_2D() % FUNCTION PSO --------USE Particle Swarm Optimization Algorithm %global present; % close all; pop_size = 10; % pop_size 种群大小 part_size = 3; % part_size 粒子大小, ** =n-D gbest = zeros(1,part_size+1); % gbest 当前搜索到的最小的值 max_gen = 80; % max_gen 最大迭代次数 region=zeros(part_size,2); % 设定搜索空间范围 region=[-3,3;-3,3;-3,3]; % **每一维设定不同范围 rand('state',sum(100*clock)); % 重置随机数发生器状态 arr_present = ini_pos(pop_size,part_size); % present 当前位置,随机初始化,rand()的范围为0~1 v=ini_v(pop_size,part_size); % 初始化当前速度 pbest = zeros(pop_size,part_size+1); % pbest 粒子以前搜索到的最优值,最后一列包括这些值的适应度 w_max = 0.9; % w_max 权系数最大值 w_min = 0.4; v_max = 2; % **最大速度,为粒子的范围宽度 c1 = 2; % 学习因子 c2 = 2; % 学习因子 best_record = zeros(1,max_gen); % best_record记录最好的粒子的适应度。 % ———————————————————————— % 计算原始种群的适应度,及初始化 % ———————————————————————— arr_present(:,end)=ini_fit(arr_present,pop_size,part_size); pbest = arr_present; %初始化各个粒子最优值 [best_value best_index] = min(arr_present(:,end)); %初始化全局最优,即适应度为全局最小的值,根据需要也可以选取为最大值 gbest = arr_present(best_index,:); for i=1:max_gen w = w_max-(w_max-w_min)*i/max_gen; % 确定是否对打散已经收敛的粒子群—————————————————————————————— reset = 0; % reset = 1时设置为粒子群过分收敛时将其打散,如果=1则不打散 if reset==1 bit = 1; for k=1:part_size bit = bit&(range(arr_present(:,k))<0.1); end if bit==1 % bit=1时对粒子位置及速度进行随机重置 arr_present = ini_pos(pop_size,part_size); % present 当前位置,随机初始化 v = ini_v(pop_size,part_size); % 速度初始化 for k=1:pop_size % 重新计算适应度 arr_present(k,end) = fitness(arr_present(k,1:part_size)); end warning('粒子过分集中!重新初始化……'); % 给出信息 display(i); end end for j=1:pop_size v(j,:) = w.*v(j,:)+c1.*rand.*(pbest(j,1:part_size)-arr_present(j,1:part_size))... +c2.*rand.*(gbest(1:part_size)-arr_present(j,1:part_size)); % 粒子速度更新 (a) % 判断v的大小,限制v的绝对值小于5———————————————————————————— c = find(abs(v)>6); %**最大速度设置,粒子的范围宽度 v(c) = sign(v(c))*6; %如果速度大于3.14则,速度为3.14 arr_present(j,1:part_size) = arr_present(j,1:part_size)+v(j,1:part_size); % 粒子位置更新 (b) arr_present(j,end) = fitness(arr_present(j,1:part_size)); if (arr_present(j,end)>pbest(j,end))&(Region_in(arr_present(j,:),region)) % 根据条件更新pbest,如果是最小的值为小于号,相反则为大于号 pbest(j,:) = arr_present(j,:); end end [best best_index] = min(arr_present(:,end)); % 如果是最小的值为min,相反则为max if best>gbest(end)&(Region_in(arr_present(best_index,:),region)) % 如果当前最好的结果比以前的好,则更新最优值gbest,如果是最小的值为小于号,相反则为大于号 gbest = arr_present(best_index,:); end best_record(i) = gbest(end); end pso = gbest; %display(gbest); % *************************************************************************** % 计算适应度 % *************************************************************************** function fit = fitness(present) fit=3*(1-present(1)).^2.*exp(-(present(1).^2) - (present(2)+1).^2) ... %**需要求极值的函数,本例即peaks函数 - 10*(present(1)/5 - present(1).^3 - present(2).^5).*exp(-present(1).^2-present(2).^2) ... - 1/3*exp(-(present(1)+1).^2 - present(2).^2)+present(3); function ini_present=ini_pos(pop_size,part_size) ini_present = 3*rand(pop_size,part_size+1); %初始化当前粒子位置,使其随机的分布在工作空间 %** 6即为自变量范围 function ini_velocity=ini_v(pop_size,part_size) ini_velocity =3/2*(rand(pop_size,part_size)); %初始化当前粒子速度,使其随机的分布在速度范围内 function flag=Region_in(pos_present,region) [m n]=size(pos_present); flag=1; for j=1:n-1 flag=flag&(pos_present(1:j)>=region(j,1))&(pos_present(1:j)<=region(j,2)); end function arr_fitness=ini_fit(pos_present,pop_size,part_size) for k=1:pop_size arr_fitness(k,1) = fitness(pos_present(k,1:part_size)); %计算原始种群的适应度 end ``` ```
MATLAB 索引超出矩阵维度。
开始运行程序没问题,后面在今天用的时候突然提示“索引超出矩阵维度。”我代码和数据集都没换过。。。不知道原因,求大神解一下 ``` function [acc,G,Cls] = GFK(X_src,Y_src,X_tar,Y_tar,dim) Ps = pca(X_src); Pt = pca(X_tar); G = GFK_core([Ps,null(Ps')], Pt(:,1:dim)); [Cls, acc] = my_kernel_knn(G, X_src, Y_src, X_tar, Y_tar); end function G = GFK_core(Q,Pt) N = size(Q,2); % dim = size(Pt,2); % compute the principal angles QPt = Q' * Pt; [V1,V2,V,Gam,Sig] = gsvd(QPt(1:dim,:), QPt(dim+1:end,:)); V2 = -V2; theta = real(acos(diag(Gam))); % theta is real in theory. Imaginary part is due to the computation issue. % compute the geodesic flow kernel eps = 1e-20; B1 = 0.5.*diag(1+sin(2*theta)./2./max(theta,eps)); B2 = 0.5.*diag((-1+cos(2*theta))./2./max(theta,eps)); B3 = B2; B4 = 0.5.*diag(1-sin(2*theta)./2./max(theta,eps)); G = Q * [V1, zeros(dim,N-dim); zeros(N-dim,dim), V2] ... * [B1,B2,zeros(dim,N-2*dim);B3,B4,zeros(dim,N-2*dim);zeros(N-2*dim,N)]... * [V1, zeros(dim,N-dim); zeros(N-dim,dim), V2]' * Q'; end ``` 我重新去下了原文件,还是提示索引超出矩阵维度。 此外还进行了断点测试,根本进不了GFK_core的函数里面![图片说明](https://img-ask.csdn.net/upload/201901/05/1546684734_37290.png)![图片说明](https://img-ask.csdn.net/upload/201901/05/1546684746_895315.png)
matlab实现BP神经网络,训练结果不好,附源代码
希望大家看看,谢谢了!自己看了一整天都不知道哪里出现了问题,编程思想按照经典的机器学习的书 lr=0.05; %lr为学习速率; err_goal=0.1; %err_goal为期望误差最小值 max_epoch=15000; %max_epoch为训练的最大次数; a=0.9; %a为惯性系数 Oi=0; Ok=0; %置隐含层和输出层各神经元输出初值为0 %提供两组训练集和目标值(3输入神经元,2输出) %X=[1 1;-1 -1;1 1]; %T=[1 1;1 1]; load house_dataset; x=houseInputs; t=houseTargets; %数据的归一化 maxRowx=max(x,[],2); maxRowt=max(t,[],2); minRowx=min(x,[],2); minRowt=min(t,[],2); % y = ( x - min )/( max - min ) for i=1:size(x,2) x(:,i)=(x(:,i)-minRowx)./(maxRowx-minRowx); t(:,i)=(t(:,i)-minRowt)./(maxRowt-minRowt); end %初始化wki,wij(M为输入节点j的数量;q为隐含层节点i的数量;L为输出节点k的数量) [M,N]=size(x); q=8; [L,N]=size(t); %N为训练集对数量 wij=rand(q,M); wki=rand(L,q);%随机值在-0.05到0.05之间 wij0=zeros(size(wij)); wki0=zeros(size(wki)); for epoch=1:max_epoch for n=1:N %for every example neti=wij*x(:,n);%q*1 每个隐藏层的输出 oi=1./(1+exp(-neti)); netk=wki*oi;%L*1 每个输出层的输出 ok=1./(1+exp(-netk)); deltak=ok.*(1-ok).*(t(:,n)-ok);%输出层的误差项 deltai=oi.*(1-oi).*(wki'*deltak);%隐藏层de误差项 %更新对应的权值 deltawij=lr*deltai*(x(:,n)'); deltawki=lr*deltak*(ok'); wij=wij+deltawij; wki=wki+deltawki; %计算误差函数 E=0.0; for i=1:N %N为训练的总数 neti=wij*x(:,i);%q*1 每个隐藏层的输出 oi=1./(1+exp(-neti)); netk=wki*oi;%L*1 每个输出层的输出 ok=1./(1+exp(-netk)); E=E+(ok-t)*(ok-t)'; end E=E/2; fprintf('the error is %f, the iteration is %d\n',E,epoch); end if E<err_goal break; end end
请教如何在使用matlab GPU时记录arrayfun中的循环迭代变量?
在下述代码中,我希望能记录arrayfun函数里面的循环变量z到一个矩阵中,以作进一步的操作。Matlab版本为2017b,代码运行报错为“Array indexing is not supported”。请各位大侠赐教如何才能解决这一问题。 ``` clear all clc maxIterations=100; gridSize=300; xlim=[-0.75, -0.73]; ylim=[ 0.12, 0.14]; t=tic(); x=gpuArray.linspace(xlim(1), xlim(2), gridSize); y=gpuArray.linspace(ylim(1), ylim(2), gridSize); [xGrid,yGrid]=meshgrid(x,y); Pos=gpuArray.zeros(maxIterations,1); count=parent_fun(xGrid,yGrid,maxIterations,Pos); count=gather(count); gpuArrayfunTime=toc(t) figure(1) imagesc(x,y,count) reset(gpuDevice(1)) %下面是用到的子函数。使用nested function的形式是希望能进行索引,但无效。 function result=parent_fun(xGrid,yGrid,maxIterations,Pos) function count=tar_fun(x0,y0) z0=complex(x0,y0); z=z0; count=1; while (count<=maxIterations) && (abs(z)<=2) count=count+1; z=z*z+z0; Pos(count,1)=z; %这里报错不支持索引 end count=max(log(count),log(abs(z))); end result=arrayfun(@tar_fun, xGrid, yGrid); end ```
在信号重采样的时候,滤波器设计的指标怎么确定?
尝试把44.1kHz的信号转换成96kHz的信号。 把L/M=320/147 分解成 (8/7)(4/3)(10/7)的形式,可以知道截至频率应该等于 π/max(L,M)。 1. 但是具体每个滤波器应该怎么设计呢? 2. 还有我看了下matlab的resample函数的处理方法,不太明白这一段: ``` % Need to delay output so that downsampling by q hits center tap of filter. nz = floor(q-mod(Lhalf,q)); z = zeros(1,nz); h = [z h(:).']; % ensure that h is a row vector. Lhalf = Lhalf + nz; % Number of samples removed from beginning of output sequence % to compensate for delay of linear phase filter: delay = floor(ceil(Lhalf)/q); % Need to zero-pad so output length is exactly ceil(Lx*p/q). nz1 = 0; while ceil( ((Lx-1)*p+length(h)+nz1 )/q ) - delay < ceil(Lx*p/q) nz1 = nz1+1; end h = [h zeros(1,nz1)]; ```
matlab 蚁群算法报错 小白求助
function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q) %%------------------------------------------------------------------------- %% 主要符号说明 %% C n个城市的坐标,n×2的矩阵 load C.mat % 39个城市问题 %% NC_max 最大迭代次数 NC_max = 30; %% m 蚂蚁个数 m = 20; %% Alpha 表征信息素重要程度的参数 Alpha = 0.3; %% Beta 表征启发式因子重要程度的参数 Beta = 0.4; %% Rho 信息素蒸发系数 Rho = 0.5; %% Q 信息素增加强度系数 Q = 0.4; %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%========================================================================= %%第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; else D(i,j)=eps; %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示 end D(j,i)=D(i,j); %对称矩阵 end end Eta=1./D; %Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n); %Tau为信息素矩阵 Tabu=zeros(m,n); %存储并记录路径的生成 NC=1; %迭代计数器,记录迭代次数 R_best=zeros(NC_max,n); %各代最佳路线 L_best=inf.*ones(NC_max,1); %各代最佳路线的长度 L_ave=zeros(NC_max,1); %各代路线的平均长度 while NC <=NC_max %停止条件之一:达到最大迭代次数,停止 %%第二步:将m只蚂蚁放到n个城市上 Randpos=[]; %随即存取 for i=1:(ceil(m/n)) Randpos=[Randpos,randperm(n)]; end Tabu(:,1)=(Randpos(1,1:m))'; %此句不太理解? %%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游 for j=2:n %所在城市不计算 for i=1:m visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问 J=zeros(1,(n-j+1)); %待访问的城市 P=J; %待访问城市的选择概率分布 Jc=1; for k=1:n if length(find(visited==k))==0 %开始时置0 J(Jc)=k; Jc=Jc+1; %访问的城市个数自加1 end end %下面计算待选城市的概率分布 for k=1:length(J) P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta); end P=P/(sum(P)); %按概率原则选取下一个城市 Pcum=cumsum(P); %cumsum,元素累加即求和 Select=find(Pcum>=rand) %若计算的概率大于原来的就选择这条路线 to_visit=J(Select(1)) Tabu(i,j)=to_visit; end end if NC>=2 Tabu(1,:)=R_best(NC-1,:); end %%第四步:记录本次迭代最佳路线 L=zeros(m,1); %开始距离为0,m*1的列向量 for i=1:m R=Tabu(i,:); for j=1:(n-1) L(i)=L(i)+D(R(j),R(j+1)); %原距离加上第j个城市到第j+1个城市的距离 end L(i)=L(i)+D(R(1),R(n)); %一轮下来后走过的距离 end L_best(NC)=min(L); %最佳距离取最小 pos=find(L==L_best(NC)); R_best(NC,:)=Tabu(pos(1),:); %此轮迭代后的最佳路线 L_ave(NC)=mean(L); %此轮迭代后的平均距离 NC=NC+1 ; %迭代继续 %%第五步:更新信息素 Delta_Tau=zeros(n,n); %开始时信息素为n*n的0矩阵 for i=1:m for j=1:(n-1) Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i); %此次循环在路径(i,j)上的信息素增量 end Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i); %此次循环在整个路径上的信息素增量 end Tau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素 %%第六步:禁忌表清零 Tabu=zeros(m,n); %%直到最大迭代次数 end %%第七步:输出结果 Pos=find(L_best==min(L_best)); %找到最佳路径(非0为真) Shortest_Route=R_best(Pos(1),:) %最大迭代次数后最佳路径 Shortest_Length=L_best(Pos(1)) %最大迭代次数后最短距离 subplot(1,2,1) %绘制第一个子图形 DrawRoute(C,Shortest_Route) %画路线图的子函数 subplot(1,2,2) %绘制第二个子图形 plot(L_best) hold on %保持图形 plot(L_ave,'r') title('平均距离和最短距离') %标题 function DrawRoute(C,R) %%========================================================================= %% DrawRoute.m %% 画路线图的子函数 %%------------------------------------------------------------------------- %% C Coordinate 节点坐标,由一个N×2的矩阵存储 %% R Route 路线 %%========================================================================= N=length(R); scatter(C(:,1),C(:,2)); hold on plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'g') hold on for ii=2:N plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g') hold on end 最后报错。。。。 Index exceeds matrix dimensions. Error in ACATSP (line 127) to_visit=J(Select(1)); 求解答
matlab ssim怎么运行?
想用个ssim比较两个图片相似度,报错“脚本中的所有函数都必须以 'end' 结束。”初学不懂,求大神指教 调用代码如下: img1= imread('E:\paperanddata\127\1.jpg'); img2= imread('E:\paperanddata\127\2.jpg'); ssim(img1,img2); 源代码如下: function [mssim, ssim_map] = ssim(img1, img2, K, window, L) %======================================================================== %SSIM Index, Version 1.0 %Copyright(c) 2003 Zhou Wang %All Rights Reserved. % %The author is with Howard Hughes Medical Institute, and Laboratory %for Computational Vision at Center for Neural Science and Courant %Institute of Mathematical Sciences, New York University. % %---------------------------------------------------------------------- %Permission to use, copy, or modify this software and its documentation %for educational and research purposes only and without fee is hereby %granted, provided that this copyright notice and the original authors' %names ap pearon all copies and supporting documentation. This program %shall not be used, rewritten, or adapted as the basis of a commercial %software or hardware product without first obtaining permission of the %authors. The authors make no representations about the suitability of %this software for any purpose. It is provided "as is" without express %or implied warranty. %---------------------------------------------------------------------- % %This is an implementation of the algorithm for calculating the %Structural SIMilarity (SSIM) index between two images. Please refer %to the following paper: % %Z. Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli, "Image %quality assessment: From error visibility to structural similarity" %IEEE Transactios on Image Processing, vol. 13, no. 4, pp.600-612, %Apr. 2004. % %Kindly report any suggestions or corrections to zhouwang@ieee.org % %---------------------------------------------------------------------- % %Input : (1) img1: the first image being compared % (2) img2: the second image being compared % (3) K: constants in the SSIM index formula (see the above % reference). defualt value: K = [0.01 0.03] % (4) window: local window for statistics (see the above % reference). default widnow is Gaussian given by % window = fspecial('gaussian', 11, 1.5); % (5) L: dynamic range of the images. default: L = 255 % %Output: (1) mssim: the mean SSIM index value between 2 images. % If one of the images being compared is regarded as % perfect quality, then mssim can be considered as the % quality measure of the other image. % If img1 = img2, then mssim = 1. % (2) ssim_map: the SSIM index map of the test image. The map % has a smaller size than the input images. The actual size: % size(img1) - size(window) + 1. % %Default Usage: % Given 2 test images img1 and img2, whose dynamic range is 0-255 % % [mssim ssim_map] = ssim_index(img1, img2); % %Advanced Usage: % User defined parameters. For example % % K = [0.05 0.05]; % window = ones(8); % L = 100; % [mssim ssim_map] = ssim_index(img1, img2, K, window, L); % %See the results: % % mssim %Gives the mssim value % imshow(max(0, ssim_map).^4) %Shows the SSIM index map % %======================================================================== if (nargin < 2 | nargin > 5) ssim_index = -Inf; ssim_map = -Inf; return; end if (size(img1) ~= size(img2)) ssim_index = -Inf; ssim_map = -Inf; return; end [M N] = size(img1); if (nargin == 2) if ((M < 11) | (N < 11)) % 图像大小过小,则没有意义。 ssim_index = -Inf; ssim_map = -Inf; return end window = fspecial('gaussian', 11, 1.5); % 参数一个标准偏差1.5,11*11的高斯低通滤波。 K(1) = 0.01; % default settings K(2) = 0.03; L = 255; end if (nargin == 3) if ((M < 11) | (N < 11)) ssim_index = -Inf; ssim_map = -Inf; return end window = fspecial('gaussian', 11, 1.5); L = 255; if (length(K) == 2) if (K(1) < 0 | K(2) < 0) ssim_index = -Inf; ssim_map = -Inf; return; end else ssim_index = -Inf; ssim_map = -Inf; return; end end if (nargin == 4) [H W] = size(window); if ((H*W) < 4 | (H > M) | (W > N)) ssim_index = -Inf; ssim_map = -Inf; return end L = 255; if (length(K) == 2) if (K(1) < 0 | K(2) < 0) ssim_index = -Inf; ssim_map = -Inf; return; end else ssim_index = -Inf; ssim_map = -Inf; return; end end if (nargin == 5) [H W] = size(window); if ((H*W) < 4 | (H > M) | (W > N)) ssim_index = -Inf; ssim_map = -Inf; return end if (length(K) == 2) if (K(1) < 0 | K(2) < 0) ssim_index = -Inf; ssim_map = -Inf; return; end else ssim_index = -Inf; ssim_map = -Inf; return; end end if size(img1,3)~=1 %判断图像时不是彩色图,如果是,结果为3,否则为1 org=rgb2ycbcr(img1); test=rgb2ycbcr(img2); y1=org(:,:,1); y2=test(:,:,1); y1=double(y1); y2=double(y2); else y1=double(img1); y2=double(img2); end img1 = double(y1); img2 = double(y2); % automatic downsampling %f = max(1,round(min(M,N)/256)); %downsampling by f %use a simple low-pass filter % if(f>1) % lpf = ones(f,f); % lpf = lpf/sum(lpf(:)); % img1 = imfilter(img1,lpf,'symmetric','same'); % img2 = imfilter(img2,lpf,'symmetric','same'); % img1 = img1(1:f:end,1:f:end); % img2 = img2(1:f:end,1:f:end); % end C1 = (K(1)*L)^2; % 计算C1参数,给亮度L(x,y)用。 C1=6.502500 C2 = (K(2)*L)^2; % 计算C2参数,给对比度C(x,y)用。 C2=58.522500 window = window/sum(sum(window)); %滤波器归一化操作。 mu1 = filter2(window, img1, 'valid'); % 对图像进行滤波因子加权 valid改成same结果会低一丢丢 mu2 = filter2(window, img2, 'valid'); % 对图像进行滤波因子加权 mu1_sq = mu1.*mu1; % 计算出Ux平方值。 mu2_sq = mu2.*mu2; % 计算出Uy平方值。 mu1_mu2 = mu1.*mu2; % 计算Ux*Uy值。 sigma1_sq = filter2(window, img1.*img1, 'valid') - mu1_sq; % 计算sigmax (标准差) sigma2_sq = filter2(window, img2.*img2, 'valid') - mu2_sq; % 计算sigmay (标准差) sigma12 = filter2(window, img1.*img2, 'valid') - mu1_mu2; % 计算sigmaxy(标准差) if (C1 > 0 & C2 > 0) ssim_map = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))./((mu1_sq + mu2_sq + C1).*(sigma1_sq + sigma2_sq + C2)); else numerator1 = 2*mu1_mu2 + C1; numerator2 = 2*sigma12 + C2; denominator1 = mu1_sq + mu2_sq + C1; denominator2 = sigma1_sq + sigma2_sq + C2; ssim_map = ones(size(mu1)); index = (denominator1.*denominator2 > 0); ssim_map(index) = (numerator1(index).*numerator2(index))./(denominator1(index).*denominator2(index)); index = (denominator1 ~= 0) & (denominator2 == 0); ssim_map(index) = numerator1(index)./denominator1(index); end mssim = mean2(ssim_map); return 报错错误: 文件:ssim.m 行:223 列:1 脚本中的所有函数都必须以 'end' 结束。 不知道怎么解决求指教
自己写了matlab神经网络,公式正确但训练失败
关键就在偏导数计算这两行,两行合并起来就是完整的误差传导公式,梯度检验也是正确的,但训练正确率一直没有提高,当去掉第二行时,训练就成功了,不过不符合公式,不知道到底哪里出了问题。 delte2=theta2_non'*delte3;%第二层误差,行 delte2=delte2.*a2(2:end,:).*(1-a2(2:end,:));%完全版误差公式 ![图片说明](https://img-ask.csdn.net/upload/201704/10/1491792244_944502.png) ``` clc;clear; %============初始化================ x=[ 1, 2,-3,-4,-5,-2, 2,2;... -1,-2,-3,-4, 5, 2, 3,4;... 1,-2, 3,-4, 5,-3,-3,1]; y=[1,1,0,0,0,0,0,0;... 0,0,0,0,0,0,1,1;... 0,0,1,1,1,1,0,0]; x_e=[-1.5, 3,2,-5,-1;... 7,-1,1,-1,2;... 6, 0,0,-2,1]; x_e_label=[0,1,0,0,0;... 0,0,1,0,0;... 1,0,0,1,1]; m=length(y(1,:)); alpha=1; lamda=0.02;%正则化参数 theta1=(rand(3,3)-0.5)/10;%参数初始化,范围在-0.05~0.05之间,三行三列 theta2=(rand(3,4)-0.5)/10; a20=1;%偏置不变 %theta1,2为第一二层参数,第三层没有,dtheta1,2为第一二层参数的偏导数容器 %a1为特征,数值偏离1,a2,3都是激活过后的数值,在1附近 %delte2,3为各层误差值 %============初始化================ %============总循环================ for q=1:500 J=0; delte2=zeros(3,1); delte3=zeros(3,1); dtheta1=zeros(3,3); dtheta2=zeros(3,4);%每次更新对偏导数置零 correct_num=0; %========= %计算平均偏导数循环=========== for i=1:m a1=x(:,i);%取每列特征数据 z1=theta1*a1;%列 raw_a2=1./(1+exp(-z1));%s激活函数 a2=[a20;raw_a2];%添加偏置a20,列 z2=theta2*a2;%1列 a3=1./(1+exp(-z2)); %y(:,i)-a3第三层误差,列 delte3=y(:,i)-a3; theta2_non=theta2(:,2:4); delte2=theta2_non'*delte3;%第二层误差,行 delte2=delte2.*a2(2:end,:).*(1-a2(2:end,:));%完全版误差公式 dtheta1=dtheta1+delte2*a1';%偏导数计算完成,但尚未进行平均,后面的是矩阵 dtheta2=dtheta2+delte3*a2'; J=J+y(:,i)'*log(a3)+(1-y(:,i)')*log(1-a3);%小代价函数 end %========计算平均偏导数循环============ g_check=gradient_check(theta1,theta2,x,y)%梯度检验 dtheta1 dtheta2 %========代价函数和梯度下降============ J=-J/m;%+lamda/2/m*(sum(sum(theta1.^2))+sum(sum(theta2_non.^2)));%完整代价函数 theta1=theta1+alpha*dtheta1/m-lamda/m.*theta1;%加入正则化的梯度下降 temp_theta2=theta2; temp_theta2(:,1)=0;%偏置theta不加入正则化计算,故单独拿出来 theta2=theta2+alpha*dtheta2/m-lamda/m.*temp_theta2; fprintf('循环%d,代价函数为:%0.4f,',q,J) %========代价函数和梯度下降============ %========训练集验证==================== for i=1:length(y(1,:)) a1=x(:,i);%取每列特征数据 z1=theta1*a1;%列 raw_a2=1./(1+exp(-z1));%s激活函数 a2=[a20;raw_a2];%添加偏置a20,列 z2=theta2*a2;%1列 a3=1./(1+exp(-z2)); train=[y(:,i),a3]; [~,i1]=max(y(:,i)); [~,i2]=max(a3); if i1==i2 correct_num=correct_num+1; end end fprintf('训练集正确率:%0.1f\n',correct_num/length(y(1,:))*100); %========训练集验证==================== end %============总循环=========================== %============训练完成后进行测试集验证======= correct_num=0; for i=1:length(x_e(1,:))%测试集验证 a1=x_e(:,i);%取每列特征数据 z1=theta1*a1;%列 raw_a2=1./(1+exp(-z1));%s激活函数 a2=[a20;raw_a2];%添加偏置a20,列 z2=theta2*a2;%1列 a3=1./(1+exp(-z2)); test_set=[x_e_label(:,i),a3]; [~,i1]=max(x_e_label(:,i)); [~,i2]=max(a3); if i1==i2 correct_num=correct_num+1; end end fprintf('测试集正确率:%0.1f\n',correct_num/length(x_e(1,:))*100); %============训练完成后进行测试集验证======= ``` 以下是梯度检验 ``` function gradient_check=gradient_check(theta1,theta2,x,y) eps=0.001; a20=1; temp_gradient_check=zeros(1,21); for temp_i=1:21 temp_theta1=theta1';%先转置,再展开,对单个参数处理,塑形,再转置 temp_theta2=theta2'; unrolled_parameter=[temp_theta1(:);temp_theta2(:)]';%参数展开 unrolled_parameter(temp_i)=unrolled_parameter(temp_i)+eps;%加一点参数 temp_theta1=reshape(unrolled_parameter(1:9),3,3); temp_p_theta1=temp_theta1'; temp_p_theta2=reshape(unrolled_parameter(10:21),4,3); temp_p_theta2=temp_p_theta2'; unrolled_parameter(temp_i)=unrolled_parameter(temp_i)-2*eps;%减一点参数 temp_theta1=reshape(unrolled_parameter(1:9),3,3); temp_n_theta1=temp_theta1'; temp_n_theta2=reshape(unrolled_parameter(10:21),4,3); temp_n_theta2=temp_n_theta2'; J=0; for i=1:length(y(1,:)) a1=x(:,i);%取每列特征数据 z1=temp_p_theta1*a1;%列 raw_a2=1./(1+exp(-z1));%s激活函数 a2=[a20;raw_a2];%添加偏置a20,列 z2=temp_p_theta2*a2;%1列 a3=1./(1+exp(-z2)); J=J+y(:,i)'*log(a3)+(1-y(:,i)')*log(1-a3);%小代价函数 end J_p=J; J=0; for i=1:length(y(1,:)) a1=x(:,i);%取每列特征数据 z1=temp_n_theta1*a1;%列 raw_a2=1./(1+exp(-z1));%s激活函数 a2=[a20;raw_a2];%添加偏置a20,列 z2=temp_n_theta2*a2;%1列 a3=1./(1+exp(-z2)); J=J+y(:,i)'*log(a3)+(1-y(:,i)')*log(1-a3);%小代价函数 end J_n=J; temp_gradient_check(temp_i)=(J_p-J_n)/2/eps; end temp_check=reshape(temp_gradient_check(1:9),3,3); gradient_check=[temp_check',reshape(temp_gradient_check(10:21),4,3)']; ```
求助大神,这个matlab程序如何修改才能正确运行?
function [Zp,Y1p,Y2p,Y3p,Xp,LC1,LC2]=JSPGA(M,N,Pm,T,P) %-------------------------------------------------------------------------- %  JSPGA.m %  流水线型车间作业调度遗传算法 %  GreenSim团队原创作品,转载请注明 %  Email:greensim@163.com %  GreenSim团队主页:http://blog.sina.com.cn/greensim %  欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim %-------------------------------------------------------------------------- %  输入参数列表 %  M       遗传进化迭代次数 %  N       种群规模(取偶数) %  Pm      变异概率 %  T       m×n的矩阵,存储m个工件n个工序的加工时间 %  P       1×n的向量,n个工序中,每一个工序所具有的机床数目 %  输出参数列表 %  Zp      最优的Makespan值 %  Y1p     最优方案中,各工件各工序的开始时刻,可根据它绘出甘特图 %  Y2p     最优方案中,各工件各工序的结束时刻,可根据它绘出甘特图 %  Y3p     最优方案中,各工件各工序使用的机器编号 %  Xp      最优决策变量的值,决策变量是一个实数编码的m×n矩阵 %  LC1     收敛曲线1,各代最优个体适应值的记录 %  LC2     收敛曲线2,各代群体平均适应值的记录 %  最后,程序还将绘出三副图片:两条收敛曲线图和甘特图(各工件的调度时序图) %第一步:变量初始化 [m,n]=size(T);%m是总工件数,n是总工序数 Xp=zeros(m,n);%最优决策变量 LC1=zeros(1,M);%收敛曲线1 LC2=zeros(1,N);%收敛曲线2 %第二步:随机产生初始种群 farm=cell(1,N);%采用细胞结构存储种群 for k=1:N X=zeros(m,n); for j=1:n for i=1:m X(i,j)=1+(P(j)-eps)*rand; end end farm{k}=X; end counter=0;%设置迭代计数器 while counter<M%停止条件为达到最大迭代次数 %第三步:交叉 newfarm=cell(1,N);%交叉产生的新种群存在其中 Ser=randperm(N); for i=1:2:(N-1) A=farm{Ser(i)};%父代个体 Manner=unidrnd(2);%随机选择交叉方式 if Manner==1 cp=unidrnd(m-1);%随机选择交叉点 %双亲双子单点交叉 a=[A(1:cp,:);B((cp+1):m,:)];%子代个体 b=[B(1:cp,:);A((cp+1):m,:)]; else cp=unidrnd(n-1);%随机选择交叉点 b=[B(:,1:cp),A(:,(cp+1):n)]; end newfarm{i}=a;%交叉后的子代存入newfarm newfarm{i+1}=b; end %新旧种群合并 FARM=[farm,newfarm]; %第四步:选择复制 FITNESS=zeros(1,2*N); fitness=zeros(1,N); plotif=0; for i=1:(2*N) X=FARM{i}; Z=COST(X,T,P,plotif);%调用计算费用的子函数 FITNESS(i)=Z; end %选择复制采取两两随机配对竞争的方式,具有保留最优个体的能力 Ser=randperm(2*N); for i=1:N f2=FITNESS(Ser(2*i)); if f1<=f2 farm{i}=FARM{Ser(2*i-1)}; fitness(i)=FITNESS(Ser(2*i-1)); else farm{i}=FARM{Ser(2*i)}; end end %记录最佳个体和收敛曲线 minfitness=min(fitness); meanfitness=mean(fitness); LC1(counter+1)=minfitness;%收敛曲线1,各代最优个体适应值的记录 LC2(counter+1)=meanfitness;%收敛曲线2,各代群体平均适应值的记录 pos=find(fitness==minfitness); Xp=farm{pos(1)}; %第五步:变异 for i=1:N if Pm>rand;%变异概率为Pm X=farm{i}; I=unidrnd(m); J=unidrnd(n); X(I,J)=1+(P(J)-eps)*rand; farm{i}=X; end end farm{pos(1)}=Xp; counter=counter+1; end %输出结果并绘图 figure(1); plotif=1; X=Xp; [Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif); figure(2); plot(LC1); figure(3); plot(LC2); function [Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif) %  JSPGA的内联子函数,用于求调度方案的Makespan值 %  输入参数列表 %  X       调度方案的编码矩阵,是一个实数编码的m×n矩阵 %  T       m×n的矩阵,存储m个工件n个工序的加工时间 %  P       1×n的向量,n个工序中,每一个工序所具有的机床数目 %  plotif  是否绘甘特图的控制参数 %  输出参数列表 %  Zp      最优的Makespan值 %  Y1p     最优方案中,各工件各工序的开始时刻 %  Y2p     最优方案中,各工件各工序的结束时刻 %  Y3p     最优方案中,各工件各工序使用的机器编号 %第一步:变量初始化 [m,n]=size(X); Y1p=zeros(m,n); Y2p=zeros(m,n); Y3p=zeros(m,n); %第二步:计算第一道工序的安排 Q1=zeros(m,1); Q2=zeros(m,1); R=X(:,1);%取出第一道工序 Q3=floor(R);%向下取整即得到各工件在第一道工序使用的机器的编号 %下面计算各工件第一道工序的开始时刻和结束时刻 for i=1:P(1)%取出机器编号 pos=find(Q3==i);%取出使用编号为i的机器为其加工的工件的编号 lenpos=length(pos); if lenpos>=1 Q1(pos(1))=0; if lenpos>=2 for j=2:lenpos Q1(pos(j))=Q2(pos(j-1)); Q2(pos(j))=Q2(pos(j-1))+T(pos(j),1); end end end end Y1p(:,1)=Q1; Y3p(:,1)=Q3; %第三步:计算剩余工序的安排 for k=2:n R=X(:,k);%取出第k道工序 Q3=floor(R);%向下取整即得到各工件在第k道工序使用的机器的编号 %下面计算各工件第k道工序的开始时刻和结束时刻 for i=1:P(k)%取出机器编号 pos=find(Q3==i);%取出使用编号为i的机器为其加工的工件的编号 lenpos=length(pos); if lenpos>=1 EndTime=Y2p(pos,k-1);%取出这些机器在上一个工序中的结束时刻 POS=zeros(1,lenpos);%上一个工序完成时间由早到晚的排序 for jj=1:lenpos POS(jj)=ppp(1); EndTime(ppp(1))=Inf; end %根据上一个工序完成时刻的早晚,计算各工件第k道工序的开始时刻和结束时刻 Q1(pos(POS(1)))=Y2p(pos(POS(1)),k-1); Q2(pos(POS(1)))=Q1(pos(POS(1)))+T(pos(POS(1)),k);%前一个工件的结束时刻 if lenpos>=2 for j=2:lenpos Q1(pos(POS(j)))=Y2p(pos(POS(j)),k-1);%预定的开始时刻为上一个工序的结束时刻 if Q1(pos(POS(j)))<Q2(pos(POS(j-1)))%如果比前面的工件的结束时刻还早 Q1(pos(POS(j)))=Q2(pos(POS(j-1))); end end end end end Y1p(:,k)=Q1; Y2p(:,k)=Q2; Y3p(:,k)=Q3; end %第四步:计算最优的Makespan值 Y2m=Y2p(:,n); Zp=max(Y2m); %第五步:绘甘特图 if plotif for i=1:m for j=1:n mPoint1=Y1p(i,j); mPoint2=Y2p(i,j); mText=m+1-i; PlotRec(mPoint1,mPoint2,mText); Word=num2str(Y3p(i,j)); %text(0.5*mPoint1+0.5*mPoint2,mText-0.5,Word); hold on x1=mPoint1;y1=mText-1; x2=mPoint2;y2=mText-1; x4=mPoint1;y4=mText; %fill([x1,x2,x3,x4],[y1,y2,y3,y4],'r'); fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,0.5,1]); text(0.5*mPoint1+0.5*mPoint2,mText-0.5,Word); end end end function PlotRec(mPoint1,mPoint2,mText) %  此函数画出小矩形 %  输入: %  mPoint1    输入点1,较小,横坐标 %  mPoint2    输入点2,较大,横坐标 %  mText      输入的文本,序号,纵坐标 vPoint = zeros(4,2) ; vPoint(1,:) = [mPoint1,mText-1]; vPoint(2,:) = [mPoint2,mText-1]; vPoint(3,:) = [mPoint1,mText]; vPoint(4,:) = [mPoint2,mText]; plot([vPoint(1,1),vPoint(2,1)],[vPoint(1,2),vPoint(2,2)]); hold on ; plot([vPoint(1,1),vPoint(3,1)],[vPoint(1,2),vPoint(3,2)]); plot([vPoint(2,1),vPoint(4,1)],[vPoint(2,2),vPoint(4,2)]); plot([vPoint(3,1),vPoint(4,1)],[vPoint(3,2),vPoint(4,2)]);
想要用MATLAB求取光斑中能量占比所对用的角度,感觉程序少了很多,麻烦帮助一下啊
clear; fig_test = imread('E:\光斑图\12.19.bmp'); dlmwrite('b1.txt',fig_test(:,:,1)) %%图像重构,建立三维图像并进行滤波处理 [size_x,size_y]=size(text); count=1; fig_new=reshape(size_x,size_y,count); f=[1 2 1;2 4 2;1 2 1 ]/16; for k=1:10 fig_new(:,:,1)=filter2(f,fig_new(:,:,1)); end %方法3 fig_back=[128,128,128,128,128];%,112,128,128,144];%,1296,1280,1344,1360];%CCD统计本底,从CCD软件histgram中读取 fig_deback=zeros(size_x,size_y,count); for i=1 fig_deback(:,:,i)=fig_new(:,:,i)-fig_back(i); end %%小于零的点归零处理 for k0=1 for i=1:size_x for j=1:size_y if fig_deback(i,j,k0)<0 fig_deback(i,j,k0)=0; end end end end fig_db=double(fig_deback); %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %注意更爱需要清除的内存变量,注意下面参数的数量要至少包含所使用的图,一般够用就不用改 clear fig1 fig2 fig3 fig4 fig5 fig6 fig7 fig8 fig9 fig10 fig11 fig12 fig13 fig14 fig15 fig16 clear fig_back fig_org fig_new fig_deback %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%计算能量质心 XM=zeros(1);YM=zeros(1);MM=zeros(1); for k1=1 for i=1:size_x for j=1:size_y XM(k1)=fig_db(i,j,k1)*i+XM(k1); YM(k1)=fig_db(i,j,k1)*j+YM(k1); MM(k1)=fig_db(i,j,k1)+MM(k1); end end XM(k1)=fix(XM(k1)/MM(k1));%X轴能量质心 YM(k1)=fix(YM(k1)/MM(k1));%Y轴能量质心 end %%计算EE90和EE95的能量半径 R=zeros(1);r=zeros(1);EE=zeros(1);SUM=zeros(1);flag90=zeros(1); R90=zeros(1);R95=zeros(1);flag95=zeros(1); %为了节省时间给个初始的半径 for k3=1 while EE(k3)<=90%设定能量EE比值 for i=-r(k3):1:r(k3) if 0<i+XM(k3)&&i+XM(k3)<=size_x for j=-r(k3):1:r(k3) if 0<j+YM(k3)&&j+YM(k3)<=size_y if ((i^2+j^2)<=r(k3)^2&&(i^2+j^2)>R(k3)^2) SUM(k3)=fig_db(XM(k3)+i,YM(k3)+j,k3)+SUM(k3); end else flag90(k3)=1; continue; end end else flag90(k3)=1; continue; end end EE(k3)=(SUM(k3)+fig_db(XM(k3),YM(k3),k3))/MM(k3)*100; R(k3)=r(k3); r(k3)=r(k3)+1; end R90(k3)=R(k3); while EE(k3)<=95%设定能力EE比值 for i=-r(k3):1:r(k3) if 0<i+XM(k3)&&i+XM(k3)<=size_x for j=-r(k3):1:r(k3) if 0<j+YM(k3)&&j+YM(k3)<=size_y if ((i^2+j^2)<=r(k3)^2&&(i^2+j^2)>R(k3)^2) SUM(k3)=fig_db(XM(k3)+i,YM(k3)+j,k3)+SUM(k3); end else flag95(k3)=1; continue; end end else flag95(k3)=1; continue; end end EE(k3)=(SUM(k3)+fig_db(XM(k3),YM(k3),k3))/MM(k3)*100; R(k3)=r(k3); r(k3)=r(k3)+1; end R95(k3)=R(k3); end RR90=R90*2*0.009; RR95=R95*2*0.009; %sprintf('\n%f\n%f,RR90,flag90) sprintf('\n%f\n%f\n%f\n%f',RR90,flag90,RR95,flag95) %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %保存EE90,EE95的光斑直径和光斑是否溢出的bajing 标记,X,Y方向的能量质心 save 'C:\E:\光斑图\R-XM-YM-flag6.mat' RR90 RR95 XM YM flag90 flag95 %%%% 注意更改数据保存路径,即更改 \R-XM-YM-flag.mat 之前的路径 function [X0,Y0,R] = Yuan(rgb) %定义函数,获得圆形区域的圆心坐标及半径 % MATLAB下寻找位图中圆形的圆心和半径 r = rgb(:,:,1); %红色分量 g = rgb(:,:,2); %绿色分量 b = rgb(:,:,3); %蓝色分量 I=0.59*r+0.11*g+0.3*b;%像素亮度计算公式 I = uint8(I); [Height,Width]=size(I); Thre=100; %预设阈值 for Row1 = 1:(Height/2) %循环寻找圆形区域上边界 CurRow_Bright = I(Row1,:); Max = max(CurRow_Bright); %求取最大亮度值 Min = min(CurRow_Bright); %求取最小亮度值 Lim = Max-Min; %该扫描线的极限亮度差 if (Lim>Thre) Ytop = Row1; break; end end for Row2 = Height:-1:(Height/2) %循环寻找圆形区域下边界 CurRow_Bright = I(Row2,:); Max = max(CurRow_Bright); %求取最大亮度值 Min = min(CurRow_Bright); %求取最小亮度值 Lim = Max-Min; %该扫描线的极限亮度差 if (Lim>Thre) Ybot = Row2; break; end end for Col1 = 1:(Width/2) %循环寻找圆形区域左边界 CurCol_Bright = I(:,Col1); Max = max(CurCol_Bright); %求取最大亮度值 Min = min(CurCol_Bright); %求取最小亮度值 Lim = Max-Min; %该扫描线的极限亮度差 if (Lim>Thre) Xleft = Col1; break end end for Col2 = Width:-1:Width/2 %循环寻找圆形区域右边界 CurCol_Bright = I(:,Col2); Max = max(CurCol_Bright); %求取最大亮度值 Min = min(CurCol_Bright); %求取最小亮度值 Lim = Max-Min; %该扫描线的极限亮度差 if (Lim>Thre) Xrig= Col2; break end end X0 = (Xleft+Xrig)/2; Y0 = (Ytop+Ybot)/2; Rx = floor((Xrig-Xleft)/2); Ry = floor((Ytop-Ybot)/2); R = max(Rx,Ry); % % % rgb(Ytop,Xleft:Xrig,1) = 255; % rgb(Ytop,Xleft:Xrig,2) = 0; % rgb(Ytop,Xleft:Xrig,3) = 0; % % rgb(Ybot,Xleft:Xrig,1) = 0; % rgb(Ybot,Xleft:Xrig,2) = 255; % rgb(Ybot,Xleft:Xrig,3) = 0; % % rgb(Ytop:Ybot,Xleft,1) = 0; % rgb(Ytop:Ybot,Xleft,2) = 255; % rgb(Ytop:Ybot,Xleft,3) = 0; % % rgb(Ytop:Ybot,Xrig,1) = 0; % rgb(Ytop:Ybot,Xrig,2) = 0; % rgb(Ytop:Ybot,Xrig,3) = 255; % % figure, imshow(rgb); end 这是我所有的程序,感觉缺少了好多,想麻烦帮我改一下。
遗传算法物流中心选址优化代码,在MATLAB里一直运行没有反应,各位大神能帮忙看下吗?我这方面真的不太懂
clear clc global gen; G=300; NP=100; chromsome=24;%染色体的长度 Pc=0.5;%交叉概率 Pm=0.2; gen=0; max=600; min=145; l=5; n=4; M=[200 400 600 200]; D=[174 232 439 145 221]; f=[9;11;11;7]; a=[4;5;3;3;4;4;2;4;3;2;3;3;2;3;2;3;3;3;3;4]; c=[16;58;30;25;51;45;27;19;32;21;74;5;76;8;48;60;67;47;66;41]; %%目标函数 %function minF for i=1:NP while 0<1 for j=1:4 chrom1(i,j)=round( rand(1)); end if sum(chrom1(i,:),2)>=1 break end end end sumx=zeros(NP,4); for i=1:NP for j=1:4 if chrom1(i,j)==0 chrom2(i,(5*(j-1)+1):(5*j))=0; else while chrom1(i,j)==1 chrom2(i,(5*(j-1)+1):(5*j))=rand(1,5).*(rep([M(j)],[1 l])); sumx(i,j)=sum(chrom2(i,(5*(j-1)+1):(5*j))); end end end end chrom=[chrom1 chrom2];%产生初始种群 %种群初始化 %initPop=initializega(100,[145 600],'fitness'); % [x endPop bpop trace]=ga([145 600],'calfitvalue',[],chrom,[1e-6 2 1],'maxGenTerm',800,... % 'arithXover',0.5,'nonUnifMutation',0.2); % x % hold on % plot(endPop(:,1),endPop(:,2),'ro') % figure(2) % plot(trace(:,1),trace(:,3),'b:') % hold on % plot(trace(:,1),trace(:,2),'r-:') % xlabel('迭代次数');ylabel('适应度'); % legend('Mean Fitness','Best Fitness') %f=rand(chromsome,NP)*(max-min)+min; %fitness=1/minF; %%按适应度升序排列 % for np= 1:NP % MSLL(np)=func2; %% [objvalue]=calobjvalue(chrom,n,l,a,c); [fitvalue,restriction]=calfitvalue(objvalue,chrom,max,n,1,M,D); [bestindividual,bestfit,bestrestriction,nopos]=best(chrom,fitvalue,restriction); gen=0; while gen<G [objvalue]=calobjvalue(chrom,n,l,a,c,f); [fitvalue,restriction]=calfitvalue(objvalue,chrom,max,m,n,1,M,D); [bestindividuall ,bestfitl ,bestrestrictionl ,nopos1 ]=best(chrom,fitvalue,restriction); if bestrestriction>bestrestrictionl bestindividual=bestindividual1 ; bestfit=bestfit1; bestrestriction=bestrestriction1; end if (bestrestriction==bestrestrictionl)&(bestfit<bestfitl) bestindividual=bestindividual1; bestfit=bestfit1; bestrestriction=bestrestriction1; end chrom(nopos1,: )=bestindividual; [newchrom]=selection(chrom,fitvalue); [newchrom]=crossover(newchromn,l); [newchrom]=mutation(newchrom,Pm,n,l); [bestindividual2,bestfit2,bestrestriction2,nopos2]=best(newchrom,fitvalue,restriction); if bestrestriction>bestrestriction2 bestindividual=bestindividual2; bestfit=bestfit2; bestrestriction=bestrestriction2; end if (bestrestriction==bestrestriction2)&(bestfit<bestfit2) bestindividual=bestindividual2; bestfit=bestfit2; bestrestriction=bestrestriction2; end chrom=newchrom; gen=gen+1; end bestindividual,bestfit,bestrestriction figure(1) plot(sumx(:, 1), sumx(:, 2),'y*') figure(2) plot(gen(:, 1), gen(:, 2), 'r-') xlabel('Generation'); ylabel('Fittness'); %目标函数 function [objvalue]=calobjvalue(chrom,n,l,a,c,f,D) chrom1=chrom(:,1:n); chrom2=chrom(:,(n+l):(n+l*n)); %%[NP,chromsome]=size(chrom); for i=1:NP for j=l :n u(ij)=120*sum(chrom2(i,(2*(j-1)+1):(2*j)),2); end end objvalue=chrom2*a*c*D+chrom1*f+chrom2*300*(D/15); %适应度计算和约束判断 function [fitvalue, restriction]=calfitvalue(objvalue,chrom,max,n,l,M,D) global gen; %%[NP,chromsome]=size(chrom); chrom1=chrom(:,1:n); chrom2=chrom(:,(n+1):(n+l*n)); restriction=zeros(NP,1); s=zeros(NP,n); t=zeros(NP,1); u=zeros(NP,2); p=zeros(NP,n); for i=1:NP for j=1:1 t(i, j)=sum((chrom2(i,j:l:n*1)),2)-D(j); if t(ij)<0z restriction(i,1)=restriction(i,1)+1; end end for j=l :n s(i,j)=chrom1(i,j)*M(j)-sum(chrom2(i,(m*(j-1)+1):(m*j)),2); p(i,j)=abs(sum(chrorn3(i,(1*(j-1)+1):(1*j)),2)-sum(chrom2(i,(m*(j-1)+1):(m*J)),2)); if s(ij)<0 restriction(i,1)=restriction(i,1)+1; end if p(ij)>=1e-3 restriction(i,1)=restriction(i,1)+1; end end u(i, l )=P-sum(chrom1(i,:),2); if u(i, l )<0 restriction(i,1)=restriction(i,1)+1; end u(i,2)=sum(chrom1(i,:),2)-1; if u(i,2)<0 restriction(i, l)=restriction(i,1)+ 1; end if (objvalue(i, l )<max) fitvalue(i,1)=max-objvalue(i,1); else fitvalue(i, l )=0.0; end end %找出最优个体和最差个体 function [bestindividual,bestfit,bestrestriction,nopos]=best(chrom,fitvalue,restriction) %%[NP,chromsome]=size(chrom); pos=1; for i=1:NP if restriction(pos, l )>restriction(i, l ) pos=i; end if (restriction(pos,1)==restriction(i,1))&&(fitvalue(pos,1)<fitvalue(i,1)) pos=i; end end bestindividual=chrom(pos,:); bestfit=fitvalue(pos); bestrestriction=restriction(pos,:); nopos=1; for i=1 :NP if restriction(nopos, l )<restriction(i, l ) nopos=i; end if (restriction(nopos,1)==restriction(i,1))&&(fitvalue(nopos,1)>fitvalue(i,1)) nopos=i; end end %选择 function [newchrom]=selection(chrom,fitvalue) totalfit=sum(fitvalue); fitvalue=fitvalue/totalfit; fitvalue=cumsum(fitvalue); %%[NP,chromsome]=size(chrom); ms=sort(rand(NP, l )); fitin=1;newin=1; while newin<=NP if(ms(newin))<fitvalue(fitin) temp(newin,:)=chrom(fitin,:); newin=newin+ 1; else fitin=fitin+l; end if fitin>=NP fitin=NP; end end newchrom=temp; %交叉 function [newchrom]=crossover(chrom,n,l) global gen; %%[NP,chromsone]=size(chrom); chrom1=chrom(:, l :n); chrom2=chrom(:,(n+1):(n+l*n)); newchrom=zeros(NP,chromsome); for i=1:2:NP-1 if (rand<Pc) point=ceil(rand*(n-1)); if point<5 newchrom(i,:)=[chroml(i,l:point) chroml(i+l,point+l:n)... chrom2(i, l :n*point) chrom2(i+l,n*point+l :l*n)]; newchrom(i+1,:)=[chrom1(i+l,l:point) chroml(i,point+l:n)... chrom2(i+1,1:1*point) chrorn3(i,l*point+l:n*1)]; else newchrom(i,:)=chrom(i,:); newchrom(i+1,:)=chrom(i+1,:); end else newchrom(i,:)=chrom(i,:); newchrom(i+1,:)=chrom(i+1,:); end end %变异 function [newchrom]=mutation(chrom,Pm,n,l) global gen; Fie1dDR=[0 0 0 0 0 0 0 0 ;200 200 400 400 600 600 200 200]; RANGE=[0 0 0 0 0;174 232 439 145 221]; [NP,chromsome]=size(chrom); chroml =chrom(:, l :n); chrom2=chrom(:,(n+l ):(n+l*n)); newchrom=zeros(NP,chromsome); newchrom1=zeros(NP,n); newchrom2=zeros(NP,l*n); for i=1:NP for j=l :n if chrom1(ij)==0 newchrom2(i,(l*(j-1)+1):(l*j))=0; else if round(rand)==0 newchrom2(i,(1 * (j-1)+1): (1 * j))=chrorn2(i,(1 * (j-1)+1):(1*j))+..., (D-chrom2(i,(1*(j-1)+1):(1*j)))*(1-rand^((1-gen/800)^10)); elseif round(rand)==1 newchrom2(i,(1*(j-1)+1):(1*j))=chrom2(i,(1*(j-1)+1):(1*j))-..., (chrom3(i,(1*(j-1)+1):(1*j))-[0 0 0 0 ] ) *(1-rand^((1-gen/800)^ 10)); end end end end newchrom1=chroml; newchrom=[newchrom1 newchrom2]; figure(1) plot(1:iter, fitness_ave, 'r', 1:iter, fitness_best, 'b') grid on legend('平均适应度', '最优适应度') e = PlotModel(chrom_best)
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
相关热词 c# id读写器 c#俄罗斯方块源码 c# linq原理 c# 装箱有什么用 c#集合 复制 c# 一个字符串分组 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图
立即提问