【问题标题】:Octave: For-loop error says A(I) = X: X must have the same size as IOctave: For-loop 错误说 A(I) = X: X must have the same size as I
【发布时间】:2016-04-17 02:52:06
【问题描述】:

我需要为函数x*e^(x)*sin(pi*x) 计算从x=-1x=1 的积分。为此,我使用了高斯正交法。这种方法可以概括为(weights)*(function evaluated at given roots)k=1k=n的总和,其中n=30

在我下面的代码中,根在列向量LegendreGaussQuadratureConstants(n).x 中。我正在进行转置,因为我想对权重执行逐个元素的乘法运算,这些权重存储在 row 向量LegendreGaussQuadratureConstants(n).w

我的代码:

fx = @(x) x .* e.^(-x) .* sin(pi .* x);

  for k = 1:50

    Leg(k) = (fx(LegendreGaussQuadratureConstants(k).x))' .* LegendreGaussQuadratureConstants(k).w;

  endfor

问题是它给了我标题中的错误,暗示使用 k 的标量值存在一些问题,并且它应该与被相乘的值的大小相匹配,但这没有任何意义...

【问题讨论】:

    标签: matlab for-loop octave


    【解决方案1】:

    你自己在你的问题中说的

    在列向量LegendreGaussQuadratureConstants(n).x 中找到根。我采用转置是因为我想对权重执行逐个元素的乘法,这些权重存储在行向量LegendreGaussQuadratureConstants(n).w 中。

    您正在获取两个向量的元素乘积,结果也将是一个向量。但是,然后您尝试将其分配给一个标量 Leg(k),这会产生您的错误。

    您需要将这些向量存储在Leg 的二维版本中

    for k = 1:50
        Leg(k,:) = (fx(LegendreGaussQuadratureConstants(k).x))' .* LegendreGaussQuadratureConstants(k).w;
    endfor
    

    或对元素乘法结果执行一些其他操作以使其成为标量。

    for k = 1:50
        Leg(k) = sum((fx(LegendreGaussQuadratureConstants(k).x))' .* LegendreGaussQuadratureConstants(k).w);
    endfor
    

    【讨论】:

    • 第一种方法是给我一个错误:error: script: A(I,J,...) = X: dimensions mismatch 指向=Leg(k) 之后的符号。第二种方法看起来更有希望。它给了我似乎是这个积分的正确值,但对于向量中的每次迭代一次。我希望这会产生单个标量值。
    • 没关系,第二个答案效果很好。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 2018-07-28
    • 2014-09-17
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多