MATLAB--向量操作(1.3)

 >> help('randi')
randi - 均匀分布的伪随机整数,返回一个介于 [imin,imax] 之间的伪随机整数标量。

>> a=randi([-3,3],2,3)

a =

     2    -3     1
     3     3    -3

等差数列

>> b=linspace(-5,6,5)

b =

   -5.0000   -2.2500    0.5000    3.2500    6.0000

判断向量共线/共面

方向余弦的计算

向量的模的计算函数,使用到norm()函数。 

向量的内积

几何意义:一个向量在另一个向量上的投影的长度,内积得0说明两个向量是垂直的。

使用函数dot(A,B)或者sum(A.*B)

向量的夹角

空间中的两个向量u和v, 内积(u,v)=\sum u_{i}v_{j}=r1*r2*cos\theta,r1和r2分别为两向量的长度,\theta为两向量的夹角。

两点间的距离

向量的向量积

axb=c。向量的向量积(叉积运算),得到一个新的向量,该向量与前两者垂直,长度为前两者的平行四边形面积,方向按照右手螺旋决定。几何意义为过前两相交向量的交点的,垂直于两向量所在平面的向量。|c|=|a||b|sin<a,b>

向量的混合积

 

 点到平面的距离

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的CMA-ES(协方差矩阵适应进化策略)的Matlab代码: ```matlab function [best, fval] = cmaes(fitnessfcn, x0, sigma0, options) % 输入: % fitnessfcn: 目标函数句柄 % x0: 初始解向量 % sigma0: 初始步长 % options: 设置参数的结构体 % 输出: % best: 最优解向量 % fval: 最优解对应的目标函数值 % 初始化参数 n = length(x0); lambda = 4 + floor(3*log(n)); mu = floor(lambda/2); weights = log(mu+1/2)-log(1:mu)'; mu_eff = sum(weights)^2/sum(weights.^2); cc = (4 + mu_eff/n) / (n+4 + 2*mu_eff/n); cs = (mu_eff+2) / (n+mu_eff+5); c1 = 2 / ((n+1.3)^2+mu_eff); cmu = min(1-c1, 2 * (mu_eff-2+1/mu_eff) / ((n+2)^2+mu_eff)); damps = 1 + 2*max(0, sqrt((mu_eff-1)/(n+1))-1) + cs; % 初始化种群和协方差矩阵 xmean = x0; ps = zeros(n, 1); pc = zeros(n, 1); C = eye(n); B = eye(n); D = ones(n, 1); sigma = sigma0; counteval = 0; % 开始迭代 for i = 1:options.MaxIterations % 生成新的种群 arx = repmat(xmean, 1, lambda) + sigma * (B * diag(D) * randn(n, lambda)); arfitness = zeros(lambda, 1); for j = 1:lambda arfitness(j) = fitnessfcn(arx(:, j)); counteval = counteval + 1; end % 更新最优解 [arfitness, arindex] = sort(arfitness); best = arx(:, arindex(1)); fval = arfitness(1); % 更新协方差矩阵 ps = (1-cs)*ps + sqrt(cs*(2-cs)*mu_eff)*(B*diag(D))*(arx(:, arindex(1:mu))-repmat(xmean, 1, mu)) / sigma; hsig = norm(ps) / sqrt(1-(1-cs)^(2*counteval/lambda)) < (1.4 + 2/(n+1)); pc = (1-cc)*pc + hsig*sqrt(cc*(2-cc)*mu_eff)*(arx(:, arindex(1:mu))*weights) / sigma; C = (1-c1-cmu)*C + c1*(pc*pc' + (1-hsig)*cc*(2-cc)*C) + cmu*(arx(:, arindex(1:mu))*diag(weights)*arx(:, arindex(1:mu))'); % 更新步长和均值 sigma = sigma * exp((cs/damps)*(norm(ps)/sqrt(n))-1); if mod(counteval/lambda, n/10) < 1 C = triu(C) + triu(C,1)'; [B, D] = eig(C); D = sqrt(diag(D)); xmean = arx(:, arindex(1:mu)) * weights; end % 检查是否收敛 if fval <= options.FunctionTolerance break; end end end ``` 需要注意的是,这只是一个简单的实现,可能存在性能问题和不够健壮的情况。在实际应用中需要根据具体问题进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值