【问题标题】:How to evaluate function of two variables with different x and y vectors如何评估具有不同 x 和 y 向量的两个变量的函数
【发布时间】:2019-09-05 02:17:01
【问题描述】:

我一直在尝试评估 matlab 中的函数。我希望我的 x 向量从 0 到 1000,我的 y 向量从 0 到 125。它们的长度都应该是 101。 要计算的方程是 z(x,y) = ay + bx,其中 a=10 和 b=20。

a = 10;
b = 20;
n = 101;
dx = 10; % Interval length
dy = 1.25; 
x = zeros(1,n);
y = zeros(1,n);
z = zeros(n,n);
for i = 1:n;
    x(i) = dx*(i-1);
    y(i) = dy*(i-1);
    for j = 1:n;
        z(i,j) = a*dy*(j-1) + b*dx*(j-1);
    end
end

我得到了答案,但我不知道我是否正确地使用了嵌套 for 循环中的索引?

【问题讨论】:

  • 您是否希望 x 沿一个矩阵维度增加,而 y 沿另一个矩阵维度增加?如果是这样,您的代码不正确。你想做x(i) = dx*(i-1)y(j) = dy*(j-1),然后z(i,j) = a*y(j) + b*x(i)
  • 使用linspace创建xy,然后你可以使用meshgrid[X,Y] = meshgrid(x,y)后跟Z = a*Y+b*X
  • @obchardon:你不再需要meshgrid,现在有隐式单例扩展。你可以写z = a*y + b*x.'

标签: matlab for-loop


【解决方案1】:

参见 MATLAB 的 linspace 函数。

a=10;
b=20;
n=101;
x=linspace(0,1000,n);
y=linspace(0,125,n);
z=a*y+b*x;

这更容易,并且可以为您处理间隔间距。从 linspace 文档中,

y = linspace(x1,x2,n) 生成 n 个点。点间距为 (x2-x1)/(n-1)。

编辑: 正如其他人指出的那样,我上面的解决方案创建了一个向量,而不是 OP 似乎想要的矩阵。正如@obchardon 指出的那样,您可以使用meshgrid 制作x 和y 点的二维网格以生成z 矩阵。更新的方法是:

a=10;
b=20;
n=101;
x=linspace(0,1000,n);
y=linspace(0,125,n);
[X,Y] = meshgrid(x,y);
z=a*Y+b*X;

(您可以交换xy 的顺序,具体取决于您是否希望每个变量沿z 的行或列。)

【讨论】:

  • 您的答案将是向量而不是矩阵,我认为,正如@obchardon 在评论中指出的那样,您应该使用meshgrid 或任何其他方法来生成所有可能的组合......
  • meshgrid 不是必须的,直接写z = a*y + b*x.'。对于旧版本的 MATLAB,您需要使用 bsxfun 执行操作。 meshgrid 更昂贵,因为中间数组很大。
猜你喜欢
  • 2022-01-17
  • 2020-12-02
  • 2019-08-28
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多