Indexing error while using symsum inside a function.

2 次查看(过去 30 天)
Does anyone know why I am recieving the indexing error below?
x = 0:0.01:5
x = 1×501
0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300 0.2400 0.2500 0.2600 0.2700 0.2800 0.2900
y = [2 -1 3 -2 4 -3 2 -4 1 -2]
y = 1×10
2 -1 3 -2 4 -3 2 -4 1 -2
Test(x,y)
Error using indexing
Invalid indexing or function definition. Indexing must follow MATLAB indexing. Function arguments must be symbolic variables, and function body must be sym expression.

Error in solution>Test (line 7)
f = symsum(y(k)*sin(2*pi*k*x),k,1,size(y));
function f = Test(x,y)
syms k
f = symsum(y(k)*sin(2*pi*k*x),k,1,size(y));
end

采纳的回答

Walter Roberson
Walter Roberson 2023-12-5
y = [2 -1 3 -2 4 -3 2 -4 1 -2]
Your y is a numeric vector.
Test(x,y)
you are passing that numeric vector as the second parameter to Test
function f = Test(x,y)
Internally, Test knows that numeric vector under the name y
syms k
f = symsum(y(k)*sin(2*pi*k*x),k,1,size(y));
You try to index that numeric vector with a symbolic variable. In MATLAB, you can never index an array at a symbolic variable.
What you need to do is
function f = Test(x,y)
f = sum(y.*sin(2*pi*(1:numel(y)).*x));
end
That is, form a definite list of terms and sum() them.
  2 个评论
Bear Foot
Bear Foot 2023-12-5
移动:Walter Roberson 2023-12-5
@Walter Roberson, I appreciate the help, are there any code adjustments I can make to fix the arrays have incompatible sizes error?
x = 0:0.01:5
x = 1×501
0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300 0.2400 0.2500 0.2600 0.2700 0.2800 0.2900
y = [2 -1 3 -2 4 -3 2 -4 1 -2]
y = 1×10
2 -1 3 -2 4 -3 2 -4 1 -2
Test(x,y)
Arrays have incompatible sizes for this operation.

Error in solution>Test (line 5)
f = sum(y.*sin(2*pi*(1:numel(y)).*x));
function f = Test(x,y)
f = sum(y.*sin(2*pi*(1:numel(y)).*x));
end
Walter Roberson
Walter Roberson 2023-12-5
编辑:Walter Roberson 2023-12-5
x = 0:0.01:5
x = 1×501
0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300 0.2400 0.2500 0.2600 0.2700 0.2800 0.2900
y = [2 -1 3 -2 4 -3 2 -4 1 -2]
y = 1×10
2 -1 3 -2 4 -3 2 -4 1 -2
z = Test(x,y)
z = 1×501
0 -1.5185 -2.3932 -2.1983 -0.8690 1.2779 3.6519 5.5843 6.5444 6.3013 4.9798 2.9977 0.9134 -0.7586 -1.6974 -1.8442 -1.3737 -0.5903 0.2024 0.8070 1.1756 1.3802 1.5365 1.7183 1.9072 2.0000 1.8690 1.4455 0.7835 0.0671
plot(x, z)
function f = Test(x,y)
f = sum(y(:).*sin(2*pi*(1:numel(y)).'.*x),1);
end

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Calculus 的更多信息

产品


版本

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by