【问题标题】:surface plot in MatlabMatlab中的曲面图
【发布时间】:2016-04-03 05:07:52
【问题描述】:

我正在尝试用对角矩阵绘制曲面,我正在尝试绘制的方程是 f = x^TDx,x 是 2×1 向量,D 是 2× 2 矩阵。

这是到目前为止的内容,但我不断收到错误消息。

x = linspace(-10,10);
y = linspace(-10,10);
[X,Y] = meshgrid(x,y);
D = [1 0; 0 1];

f = @(x,y) [x,y]*D*[x,y].'; % [x,y] is 1 by 2 

contour (X,Y,f(X,Y))

谁能告诉我如何摆脱这个错误?谢谢

【问题讨论】:

  • 您声明“[x,y] 是 1 乘 2”。这是不正确的,并且是您的问题的根本原因。
  • @mikkola 我不知道为什么这不是真的。我检查 [x,y] 给出一个 1 乘 2 矩阵
  • XY 都是 100 x 100。因此,当您将它们输入到 f 并且实际上有 [X, Y] 时,结果是 100 x 200 矩阵。跨度>
  • @mikkola 如何使 [x,y] 成为 2 乘 1?我还是不知道怎么办

标签: matlab plot


【解决方案1】:

由于xy 的长度相同,所以您的对角矩阵D 必须是大小为n x n 的方阵,其中n 等于xy 向量长度的两倍。您需要将长度乘以 2 的原因是因为操作 [x,y] 水平连接数组,从而复制其中一个维度。

在此示例中,D 是身份矩阵。请参阅eye 了解更多信息。

x = linspace(-10,10);   % x is 1x100
y = linspace(-10,10);   % y is 1x100
[X,Y] = meshgrid(x,y);  % X is 100x100 and Y is 100x100
D = eye(2*numel(x));    % D is 2*100x2*100 = 200x200

f = @(x,y) [x,y]*D*[x,y].'; % [X,Y] is 100x200 and [X,Y].' is 200x100

contour (X,Y,f(X,Y))

如果您希望D 成为一个随机对角矩阵,您可以将diag 与可用的Random Number Generation 函数之一(例如randn)结合起来完成此操作。

在前面的示例中,将D 替换为以下指令:

D = diag(randn(1,2*numel(x)));

您还可以将您选择的系数赋予对角矩阵。为此,您需要手动创建系数向量,确保它具有足够的长度,从而满足本文开头所述的条件。

现在尝试将D 替换为以下说明:

v = 1:2*numel(x);   % vector of coefficients: v = [1 2 ... 200]
D = diag(v);

【讨论】:

  • 如果D不是单位矩阵,是随机对角矩阵,我该怎么做
  • @Simple 我已编辑答案以满足您的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多