matlab用for绘三维图像

请问有谁知道怎么用matlab的for循环绘制以下的三维图像吗?

代码我是根据二维的改的,应该是有问题,但是我不知道怎么做

提示的问题是:

错误使用 mesh (line 71)
Z 必须为矩阵,不能是标量或向量。

出错 pai_1G_s_d (line 28)
mesh(X,Y,pai_1g)

syms c1 c2 c3 c4 t1 t2 lambda
c1=0.15;c2=0.02;c3=0.15;c4=0.02;t1=0.5;t2=0.5;lambda=0.5;
s_g = 0.1:0.025:0.5;
d = 0.1:0.1:0.9;

pai_1g=[ ];
pai_2g=[ ];
pai_rg=[ ];

for s=0.1:0.02:0.5
    for delta = 0.1:0.1:0.9
        pai_1N=[2*lambda*(1-delta)-(lambda*t1+t2)*(2*c1-delta*c1-c2-delta*c3+2*c3-c4)]^2/2*lambda*(lambda*t1+t2)*(1-delta)*(4-delta)^2;
        kappa=4*c1-2*delta*c1-2*c2+4*c3-2*delta*c3-2*c4-2*s+delta*s;
        pai_1G=pai_1N+s*(2-delta)*[4*lambda*(1-delta)-(lambda*t1+t2)*kappa]/2*lambda*(1-delta)*(4-delta)^2;   %目标函数1
        pai_1g=[pai_1g pai_1G];
    end
end
[X,Y] = meshgrid(s_g,d);
mesh(X,Y,pai_1g)



你需要绘制出的图是什么样子呀?你发出来看看。另外算法公式是什么?

不用啦,谢谢呀,我已经知道怎么做啦

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据你的提示信息,问题可能出现在 mesh 函数对于 Z 的格式不正确。在 pai_1g 的计算中,我们可以使用二维矩阵来存储数据,其中一个维度对应于 s 的值,另一个维度对应于 delta 的值。 因此,在对 pai_1g 进行 mesh 绘图之前,我们需要将其 reshape 成一个矩阵。具体而言,它应该是一个大小为 (length(d),length(s)) 的矩阵。下面是一个示例代码:

syms c1 c2 c3 c4 t1 t2 lambda
c1=0.15;c2=0.02;c3=0.15;c4=0.02;t1=0.5;t2=0.5;lambda=0.5;
s_g = 0.1:0.025:0.5;
d = 0.1:0.1:0.9;

pai_1g=zeros(length(d),length(s_g)); % 初始化 pai_1g

for i=1:length(s_g)
    s = s_g(i);
    for j = 1:length(d)
        delta = d(j);
        pai_1N=[2*lambda*(1-delta)-(lambda*t1+t2)*(2*c1-delta*c1-c2-delta*c3+2*c3-c4)]^2/2*lambda*(lambda*t1+t2)*(1-delta)*(4-delta)^2;
        kappa=4*c1-2*delta*c1-2*c2+4*c3-2*delta*c3-2*c4-2*s+delta*s;
        pai_1G=pai_1N+s*(2-delta)*[4*lambda*(1-delta)-(lambda*t1+t2)*kappa]/2*lambda*(1-delta)*(4-delta)^2;   %目标函数1
        pai_1g(j,i) = pai_1G;   % 将 pai_1G 存储在 pai_1g 的正确位置
    end
end

[X,Y] = meshgrid(s_g,d);
mesh(X,Y,pai_1g)  % 绘制 pai_1g 的三维图像

在上面的代码中,我们使用了两个循环,一个对 s 进行迭代,另一个对 delta 进行迭代。 我们还手动创建了一个大小为 length(d) × length(s_g) 的全零矩阵 pai_1g,并在计算 pai_1G 时将其存储在正确的位置。最后,我们使用 mesh 函数绘制 pai_1g 的三维图像。

希望这可以帮助你解决问题。
如果我的回答解决了您的问题,请采纳!

以下内容引用CHATGPT:

在你的代码中,出现了一个错误,是因为在 pai_1G 的计算中,分母的括号没有正确地括起来,导致了一个标量被误认为是矩阵,从而出现错误。你需要将分母括起来,如下所示:

pai_1G=pai_1N+s*(2-delta)*[4*lambda*(1-delta)-(lambda*t1+t2)*kappa]/(2*lambda*(1-delta)*(4-delta)^2);   %目标函数1

另外,你需要将 pai_1g 改为矩阵形式,可以使用 reshape 函数实现:

pai_1g = reshape(pai_1G, [], length(d));

然后,你需要将 pai_1g 作为一个矩阵来绘制三维图像,可以使用 surfmesh 函数。下面是使用 mesh 函数绘制的例子:

mesh(s_g, d, pai_1g)
xlabel('s')
ylabel('d')
zlabel('pai\_1g')

注意,在绘制三维图像之前,需要先将 pai_1g 转换为矩阵形式。

引用chatGPT作答,根据错误提示,可以看出问题在于 mesh 函数中的 pai_1g 不是一个矩阵,而是一个向量。为了解决这个问题,需要将 pai_1g 变成一个矩阵。

你可以使用 reshape 函数将 pai_1g 转换为一个矩阵,然后再使用 mesh 函数进行绘图。具体来说,修改代码如下:

pai_1g = reshape(pai_1g, [length(d), length(s_g)]);
[X, Y] = meshgrid(s_g, d);
mesh(X, Y, pai_1g)

这里,reshape 函数将 pai_1g 变成了一个大小为 (length(d), length(s_g)) 的矩阵,即每一行对应一个固定的 delta,每一列对应一个固定的 s。然后,使用 mesh 函数进行绘图。

最终的完整代码如下:

syms c1 c2 c3 c4 t1 t2 lambda
c1=0.15;c2=0.02;c3=0.15;c4=0.02;t1=0.5;t2=0.5;lambda=0.5;
s_g = 0.1:0.025:0.5;
d = 0.1:0.1:0.9;

pai_1g = [];
pai_2g = [];
pai_rg = [];

for s = 0.1:0.02:0.5
    for delta = 0.1:0.1:0.9
        pai_1N = [2*lambda*(1-delta)-(lambda*t1+t2)*(2*c1-delta*c1-c2-delta*c3+2*c3-c4)]^2/2*lambda*(lambda*t1+t2)*(1-delta)*(4-delta)^2;
        kappa = 4*c1-2*delta*c1-2*c2+4*c3-2*delta*c3-2*c4-2*s+delta*s;
        pai_1G = pai_1N+s*(2-delta)*[4*lambda*(1-delta)-(lambda*t1+t2)*kappa]/2*lambda*(1-delta)*(4-delta)^2;   %目标函数1
        pai_1g = [pai_1g pai_1G];
    end
end

pai_1g = reshape(pai_1g, [length(d), length(s_g)]);
[X, Y] = meshgrid(s_g, d);
mesh(X, Y, pai_1g)

希望这能够帮助你完成绘图!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

matlab绘图(三)绘制三维图像

可以借鉴下
https://blog.csdn.net/higerwy/article/details/129435292