Matlab 倍频程:For循环错误表示A(I)=X:X必须具有与I相同的大小

Matlab 倍频程:For循环错误表示A(I)=X:X必须具有与I相同的大小,matlab,for-loop,octave,Matlab,For Loop,Octave,我需要为函数x*e^(x)*sin(pi*x)计算从x=-1到x=1的积分。为此,我使用高斯求积法。此方法可总结为(权重)*(在给定根处计算的函数)从k=1到k=n的总和,其中n=30 在我下面的代码中,根位于列向量LegendregaussQuadraureConstants(n).x中。我之所以使用转置,是因为我想对存储在行向量legendregaussquadraureconstants(n).w 我的代码: fx = @(x) x .* e.^(-x) .* sin(pi .* x);

我需要为函数
x*e^(x)*sin(pi*x)
计算从
x=-1
x=1
的积分。为此,我使用高斯求积法。此方法可总结为
(权重)*(在给定根处计算的函数)
k=1
k=n
的总和,其中
n=30

在我下面的代码中,根位于列向量
LegendregaussQuadraureConstants(n).x
中。我之所以使用转置,是因为我想对存储在行向量
legendregaussquadraureconstants(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
存在一些问题,它应该与被乘以的值的大小相匹配,但这没有意义…

你在问题中自己说的

根位于列向量
LegendregaussQuadraureConstants(n).x
中。我之所以使用转置,是因为我想对存储在行向量
LegendregaussquadraureConstants(n).w
中的权重执行逐元素乘法

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

您需要将这些向量存储在2D版本的
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:维度不匹配
指向
腿(k)
后的
=
符号。第二种方法看起来更有希望。它给出了这个积分的正确值,但对于向量中的每次迭代都是一次。我想得到一个单一的标量值。不管怎样,第二个答案很有效。谢谢你的帮助!