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