MATLAB Answers

Error while vectorizing my code

28 views (last 30 days)
x = 0:0.01:5; %% range of x values for graph
y = zeta_func(x);
plot(x,y),xlabel('x'), ylabel('zeta(x)'), title('Zeta(x) Graph'),
%% function definition
function zeta_val = zeta_func(x)
%% zeta(x) = summation of 1/x^n
%% here summing from n = 1 to 50
n = 1:1:50;
terms = 1./power(n,x); %% performing 1/x^i for all n
zeta_val = sum(terms); %% summing the values
end
I get the following error
Error using .^
Matrix dimensions must agree.
Error in zeta_gpu>zeta_func (line 11)
terms = 1./power(n,x); %% performing 1/x^i for all n
Error in zeta_gpu (line 2)
y = zeta_func(x);
Over here the function is being called on the whole array x. But I want to do element wise.
How do I acheive this over here?

  0 Comments

Sign in to comment.

Accepted Answer

Cris LaPierre
Cris LaPierre on 27 Dec 2020
The error is because your vectors x and n are not the same length. x has 501 elements while n has 50. Also, power is doing n.^x. From how you worded things, perhaps you want x.^n?
Assuming you want every n to be raised to every x, I would look into using meshgrid. You can set it up so the rows represent unique values of x and the columns unique values of n (or vice versa). Then just sum by each x so you can create your plot.
x = 0:0.01:5; %% range of x values for graph
y = zeta_func(x);
plot(x,y),xlabel('x'), ylabel('zeta(x)'), title('Zeta(x) Graph'),
%% function definition
function zeta_val = zeta_func(x)
%% zeta(x) = summation of 1/x^n
%% here summing from n = 1 to 50
n = 1:1:50;
% create meshgrid, with unique x in each column, unique n in each row (50x501)
[X,N]=meshgrid(x,n);
terms = 1./power(N,X); %% performing 1/x^i for all n
zeta_val = sum(terms); %% summing the values
end

  3 Comments

Jan
Jan on 27 Dec 2020
Or alternatively:
terms = 1 ./ power(n.', x);
madhan ravi
madhan ravi on 27 Dec 2020
Ah didn't see your comment Jan :), have to increase my font size ;)

Sign in to comment.

More Answers (2)

madhan ravi
madhan ravi on 27 Dec 2020
terms = 1 ./ (n( : ) .^ x) % < 2016b 1 ./ bsxfun(@power, n( : ), x)

Luigi Emanuel di Grazia
Luigi Emanuel di Grazia on 27 Dec 2020
Shouldn't it be power(x,n)?

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by