【问题标题】:Optical optimization by MATLAB通过 MATLAB 进行光学优化
【发布时间】:2018-07-09 15:48:36
【问题描述】:

我想在 MATLAB 中模拟一些圆柱形灯,并尝试在不平坦的表面上使它们的强度均匀化。

为了让问题更简单,我假设每盏灯的长度为 100 厘米,表面是平坦的(100 x 25 厘米)。

在使问题再次变得更简单的第一步中,我尝试只模拟一个灯以最小化表面某些点上的强度变化。为此,我编写了一个 Fitness 函数,它实际上是强度公式:

  • r = 你想在那里找到强度的点的距离(以米为单位)
  • l = 我放 1 (m) 的表面宽度
  • P = 我要使用 15W 的每盏灯的输出功率

还有适应度函数代码是:

function [ intensity ] = simple_fitness(x)

global Pout;      % Pout = 15 Watts
r = (( x(1)^2 + x(2)^2 )^(1/2))*((10)^(-2));
intensity = (( Pout / (6 * r) )*( x(2)/r ));

end

约束也是必要的。正如我所说,目标是最小化某些点上的强度变化,我这里有一些未知问题。

约束功能代码为:

function [c, ceq] = simple_constraints(x)
global Pout;             %Pout
intensity = zeros(1,26);
avgint = 0;
minus = 0;
for i=0:25
     r = (( (x(1)-i)^2 + x(2)^2 )^(1/2))*((10)^(-2));
     intensity(i) = (( Pout / (6 * r) )*( x(2)/r ));
end

avgint = mean(intensity);
for j=1:25
     minus = minus + ( intensity(i) - avgint )^(2);   
end

c = -(sqrt(minus)/avgint) + 0.12 ; %actually it's not the variance formula 
ceq = [];

end

一些提示:x(1)x(2) 是灯在空间中的位置:垂直轴 = x(2) 水平轴 = x(1)

在第 6 行,我放置了一个从 0 到 25 的循环。这条线显示了我想在那里计算强度的点。在第 7 行,我编写了代码来获得距离(这只是高中几何:))

我说我想最小化方差,但在这里我制定了一个新公式来实现我的目标,它与方差公式有点不同。在方差公式中,我们应该将每个元素与其平均值的平方偏差除以元素的数量,但在这里我再次将它们除以平均值(它们出纸的原因有一些:/)

最后主要功能代码是:

objectiveFunction = @simple_fitness;
nvars = 2;
global Pout;
Pout = 15;
UB = [25 40];   %% 0<x<25 (cm) / 20<y<40 (cm) lamp
LB = [0 20];
constraintFuntion = @simple_constraints;
rng default
[x ,fval] = ga(objectiveFunction, nvars,[],[],[],[],LB, UB, constraintFuntion)

然后我得到了这些错误:

到底是什么问题???

【问题讨论】:

  • 请不要张贴错误信息的图片,而是在此处复制粘贴。

标签: matlab optimization genetic-algorithm


【解决方案1】:

您在此行中收到一条错误消息,指出“下标索引必须是真正的 整数”:

intensity(i) = ...

...嵌入在循环for i=0:25中,所以i0开始,这不是一个正整数。

MATLAB 中的索引从 1 开始。

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 2018-07-27
    • 1970-01-01
    • 2013-08-26
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多