Home > Net >  Filling MATLAB array using formula and arrays of values
Filling MATLAB array using formula and arrays of values

Time:03-30

I want to fill a 10x15 matrix in MATLAB using the formula z(i, j) = 2 * x(i) 3 * y(j)^2, so that each entry at (i, j) = z(i, j). I have arrays for x and y, which are of size 10 and 15, respectively.

I've accomplished the task using the code below, but I want to do it in one line, since I'm told it's possible. Any thoughts?

x = linspace(0,1,10);
y = linspace(-0.5,0.5,15);
z = zeros(10,15);
m_1 = 2;
m_2 = 3;
for i = 1:length(x)
    for j = 1:length(y)
        z(i, j) = m_1*x(i)   m_2*y(i)^2;
    end
end

CodePudding user response:

It looks like you have a bug in your original loop:
You are using i index twice: m_1*x(i) m_2*y(i)^2.

The result is that all the columns of z matrix are the same.

For applying the formula z(i, j) = 2*x(i) 3*y(j)^2 use the following loop:

x = linspace(0,1,10);
y = linspace(-0.5,0.5,15);
z = zeros(10,15);
m_1 = 2;
m_2 = 3;
for i = 1:length(x)
    for j = 1:length(y)
        z(i, j) = m_1*x(i)   m_2*y(j)^2;
    end
end

For implementing the above loop using one line, we may use meshgrid first.

Replace the loop with:

[Y, X] = meshgrid(y, x);
Z = m_1*X   m_2*Y.^2;

For expansions, read the documentation of meshgrid, it is much better than any of the expansions I can write...


The following command gives the same output as your original loop (but it's probably irrelevant):

Z = repmat((m_1*x   m_2*y(1:length(x)).^2)', [1, length(y)]);

Testing:

max(max(abs(Z - z)))

ans =

     0
  • Related