amziha 2023-07-31 17:12 采纳率: 25%
浏览 6

直接配点法相关的问题

我在看直接配点法的例程,在正是求解之前看到一段代码是这样的(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

  • 写回答

2条回答 默认 最新

  • 配电网和matlab 2023-07-31 17:31
    关注

    以下内容引用自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。

    希望这个解释能够帮助您理解这段代码的功能和操作。如果您还有其他问题,请随时提问。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月31日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价