簡體   English   中英

Matlab中的下標分配維不匹配錯誤

[英]Subscripted assignment dimension mismatch error in Matlab

我在Matlab中執行此命令時遇到下一個錯誤:

% dibuji sixmin
x_lim=-2:.1:2; y_lim=-1:0.1:1;
[x(1), x(2)]= meshgrid(x_lim, y_lim);

z = (-exp^(-(x(1) + x(2))))*((sin(3*x(1)))^2)*((sin(3*x(2)))^2);

subplot(2,1, 1)
surf(x(1), x(2), z, 'edgecolor', 'none', 'facecolor', 'interp');
grid on
title('mi_sixmin')

subplot(2,1, 2)
contour(x(1),x(2),z,20)
grid on

有人可以幫助我解決嗎?

您的代碼似乎存在3個問題。

首先,命令[X, Y] = meshgrid(x_lim, y_lim)創建兩個21x41矩陣並將其保存到XY 因此,您代碼的第二行( [x(1), x(2)]= meshgrid(x_lim, y_lim); )試圖將21x41矩陣插入x的第一個元素中,並將21x41矩陣插入第二個元素x元素。 之所以不起作用,是因為矩陣x的每個元素只能容納1個元素。 換句話說, x(1)只能適合1x1矩陣。 要解決此問題,請將x(1)替換為X ,將x(2)替換為Y 這樣,兩個21x41矩陣將保存到它們自己的變量中。

其次,請注意exp()是一個函數,而不是一個變量。 因此,函數的第四行應具有exp(-(X+Y))而不是exp^(-(X+Y))

第三,我相信您正在嘗試在同一行中執行基於元素的操作。 相反,該代碼指定矩陣乘法。 要指定逐元素操作,請使用.*.^ 因此,代碼的第四行應為: z = (-exp(-(X + Y))).*((sin(3*X)).^2).*((sin(3*Y)).^2);

因此,您編輯的代碼現在應如下所示:

x_lim=-2:.1:2; y_lim=-1:0.1:1;
[X, Y]= meshgrid(x_lim, y_lim);

z = (-exp(-(X + Y))).*((sin(3*X)).^2).*((sin(3*Y)).^2);

subplot(2,1, 1)
surf(X, Y, z, 'edgecolor', 'none', 'facecolor', 'interp');
grid on
title('mi_sixmin')

subplot(2,1, 2)
contour(X,Y,z,20)
grid on

您的腳本中有一些錯誤:

  • 網格物體的meshgrid :當您指定x(1)x(2)定義2個標量時,輸出為2個矩陣
  • zexp不需要^它“已經”是指數了; 同樣,由於您使用的是矩陣(由meshgrid生成),因此所有operand都必須以meshgrid . (點),以便將其應用於矩陣的每個元素

這是更新的代碼。

x_lim=-2:.1:2; y_lim=-1:0.1:1;
[X, Y]= meshgrid(x_lim, y_lim);

z = (-exp(-(X + Y))).*((sin(3*X)).^2).*((sin(3*Y)).^2);

subplot(2,1, 1)
surf(X, Y, z, 'edgecolor', 'none', 'facecolor', 'interp');
grid on
title('mi_sixmin')

subplot(2,1, 2)
contour(X,Y,z,20)
grid on

在此處輸入圖片說明

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM