基于MATLAB的光学优化

基于MATLAB的光学优化,matlab,optimization,genetic-algorithm,Matlab,Optimization,Genetic Algorithm,我想在MATLAB中模拟一些圆柱灯,并尝试在不平坦的表面上均匀化它们的强度 为了使问题更简单,我假设每个灯的长度为100厘米,表面均匀(100 x 25厘米) 在使问题再次变得简单的第一步中,我尝试只模拟一盏灯,以最小化曲面某些点上的强度变化。为此,我编写了一个适应度函数,它实际上是强度公式: r=要在其中找到强度的点的距离(米) l=我放置的表面宽度1(m) P=我将使用的每个灯的输出功率为15W 此外,健身功能代码为: function [ intensity ] = simple_f

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

为了使问题更简单,我假设每个灯的长度为100厘米,表面均匀(100 x 25厘米)

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

  • 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
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)
约束也是必要的。正如我所说,目标是最小化某些点上强度的变化,我这里有一些未知的问题

约束功能代码为:

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行,我编写了代码以获得距离(这只是高中几何:)

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

最后,主要功能代码为:

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
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)
objectiveFunction=@simple\u fitness;
nvars=2;
全球撅嘴;
撅嘴=15;

UB=[25 40];%0您收到一条错误消息,在这一行中“下标索引必须是实<强>正整数”:

…对于i=0:25,它被嵌入循环
,因此
i
0
开始,这不是一个正整数


MATLAB中的索引从1开始。

请不要发布错误消息的图像,而是复制粘贴到此处。