我在看直接配点法的例程,在正是求解之前看到一段代码是这样的(matlab内),实在搞不清楚这个的原理是啥
d=3;
y_base=0;
%get collocation points
% cp1*x^3+cp2*x^2+cp1*x+y_base
tau_root=[y_base collocation_points(d, 'legendre')];
%coefficients of collocation equation
C=zeros(d+1,d+1);
%coes of the continuity equation
D=zeros(d+1,1);
%coes of quadrature(正交,求积,面积) function
B=zeros(d+1,1);
%construct polinomial 看不懂... ...
%遍历多项式参数
for j=1:(d+1)
%缩放参数?A:不是
%其实就是因为要乘积,初始值
coeff=1;
%再次遍历,这说明是卷积类似的操作0731YH
for r=1:(d+1)
if r~=j
%conv卷积 等于两个多项式相乘后结果的系数
coeff=conv(coeff, [1, -tau_root(r)]);
coeff=coeff/(tau_root(j)-tau_root(r));%1*2
end
end
D(j)=polyval(coeff, 1.0); %系数的和,高次在前 1*1
pder=polyder(coeff); %多项式微分
for r=1:(d+1)
C(j,r)=polyval(pder,tau_root(r));
end
pint=polyint(coeff); %多项式积分
B(j)=polyval(pint, 1.0);
end
以下内容引用自GPT,有用望采纳:
这段代码是用于构建多项式的相关计算和系数的求解。我将逐行解释代码的功能和操作,以帮助您理解。
d=3;
y_base=0;
tau_root=[y_base collocation_points(d, 'legendre')];
在这段代码中,我们首先定义了变量d和y_base。d表示多项式的阶数,y_base是基础值。然后,我们使用函数collocation_points()
生成一个包含插值点的向量tau_root
,这些点用于构建多项式。
C=zeros(d+1,d+1);
D=zeros(d+1,1);
B=zeros(d+1,1);
这里我们创建了三个矩阵C、D和B,用于存储求解多项式过程中的系数。
for j=1:(d+1)
coeff=1;
for r=1:(d+1)
if r~=j
coeff=conv(coeff, [1, -tau_root(r)]);
coeff=coeff/(tau_root(j)-tau_root(r));
end
end
D(j)=polyval(coeff, 1.0);
pder=polyder(coeff);
for r=1:(d+1)
C(j,r)=polyval(pder,tau_root(r));
end
pint=polyint(coeff);
B(j)=polyval(pint, 1.0);
end
这里是主要的计算部分,使用循环逐个求解多项式的系数。首先,我们以变量j为索引遍历多项式参数。
在每个迭代中,我们首先将初始系数coeff
设置为1。然后,我们使用内置函数conv()
将coeff
与多项式 [1, -tau_root(r)]
进行卷积操作,计算多项式相乘得到的结果的系数。我们还根据插值点tau_root(j)
和tau_root(r)
的差值对系数进行缩放。
接下来,我们使用函数polyval()
计算在x=1.0处求解多项式的值,并将结果储存在向量D中。
然后,我们使用函数polyder()
对多项式进行微分操作,得到多项式的导函数。然后,我们再次遍历插值点,使用函数polyval()
计算在每个插值点处导函数的值,并将结果存储在矩阵C中。
最后,我们使用函数polyint()
进行多项式的积分操作,得到多项式的原函数。然后,我们再次在x=1.0处使用函数polyval()
计算原函数的值,并将结果存储在向量B中。
最终,循环执行完毕后,我们将得到一个包含多项式系数的矩阵C、一个包含多项式值的向量D,以及一个包含多项式的积分值的向量B。
希望这个解释能够帮助您理解这段代码的功能和操作。如果您还有其他问题,请随时提问。
不知道你这个问题是否已经解决, 如果还没有解决的话:在对多约束、非线性问题的求解上,传统线性规划等方法往往无法有效求解(求解时间过长、无法处理非线性约束等。 进化算法是一类强有力的工具,已经在多个领域有了较为成功的应用。然而,在利用遗传算法、粒子群等等进化算法求解实际的优化问题时,还存在许多困难,具体表现为:
博主在对许多文章进行复现之后,针对上面提到的问题也是很难受。为了加快复现进度,同时也是给广大研究工作者总结一般的代码编写套路,因此发布一下我经常使用的单目标进化算法框架以及MATLAB代码。本人的研究主要集中在进化多目标优化领域,对于单目标优化问题只是个人兴趣,如有不当,可友好交流讨论。多目标领域的优化之后也会发布一些文章。