gpt4 book ai didi

matlab - 有人可以解释如何使用 contourf 在 MATLAB 中绘制这个总和吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:52 25 4
gpt4 key购买 nike

首先我要声明,是的,这是家庭作业(我关于 stackoverflow 的第一个家庭作业问题!)。但我不想让你帮我解决,我只是想要一些指导!

有问题的等式是这样的:Series in question

我被告知取 N = 50、phi1 = 300、phi2 = 400、0<=x<=1 和 0<=y<=1,并让 x 和 y 为 100 等距的向量点,包括终点。

所以我做的第一件事就是设置这些变量,并使用 x = linspace(0,1) 和 y = linspace(0,1) 生成正确的向量。

问题是编写一个名为 potential.m 的 MATLAB 脚本文件,它计算 phi(x,y) 并使用内置函数 contourf 绘制 x 和 y 的填充等高线图(参见例如,MATLAB 中的帮助命令)。确保图形已正确标记。 (提示:域的顶部和底部应该更热,大约 400 度,而左侧和右侧应该是 300 度)。

但是,之前,我使用 x 或 y 作为常量来计算 phi。我应该如何计算两者都是变量的地方?我是否保持 x 稳定,同时遍历 y 的向量中的每个数字,将其分配给矩阵,在一次又一次遍历 y 的每个值后将 x 递增为其向量中的下一个数字?然后执行相同的过程,但慢慢增加 y?

如果是这样,我一直在使用一个循环,每次循环遍历所有 100 个值时都会递增到下一行。如果我那样做,我最终会得到一个有 200 行和 100 列的巨大矩阵。我将如何在 linspace 函数中使用它?

如果这是正确的,这就是我找到矩阵的方式:

clear
clc
format compact
x = linspace(0,1);
y = linspace(0,1);
N = 50;
phi1 = 300;
phi2 = 400;
phi = 0;
sum = 0;
for j = 1:100
for i = 1:100
for n = 1:N
sum = sum + ((2/(n*pi))*(((phi2-phi1)*(cos(n*pi)-1))/((exp(n*pi))-(exp(-n*pi))))*((1-(exp(-n*pi)))*(exp(n*pi*y(i)))+((exp(n*pi))-1)*(exp(-n*pi*y(i))))*sin(n*pi*x(j)));
end
phi(j,i) = phi1 - sum;
end
end
for j = 1:100
for i = 1:100
for n = 1:N
sum = sum + ((2/(n*pi))*(((phi2-phi1)*(cos(n*pi)-1))/((exp(n*pi))-(exp(-n*pi))))*((1-(exp(-n*pi)))*(exp(n*pi*y(j)))+((exp(n*pi))-1)*(exp(-n*pi*y(j))))*sin(n*pi*x(i)));
end
phi(j+100,i) = phi1 - sum;
end
end

这是contourf的定义。我想我必须使用 contourf(X,Y,Z):

contourf(X,Y,Z)、contourf(X,Y,Z,n) 和 contourf(X,Y,Z,v) 使用 X 和 Y 绘制 Z 的填充等高线图以确定 x- 和y 轴限制。当 X 和 Y 是矩阵时,它们必须与 Z 大小相同并且必须单调递增。

这是新代码:

N = 50;
phi1 = 300;
phi2 = 400;
[x, y, n] = meshgrid(linspace(0,1),linspace(0,1),1:N)
f = phi1-((2./(n.*pi)).*(((phi2-phi1).*(cos(n.*pi)-1))./((exp(n.*pi))-(exp(-n.*pi)))).*((1-(exp(-1.*n.*pi))).*(exp(n.*pi.*y))+((exp(n.*pi))-1).*(exp(-1.*n.*pi.*y))).*sin(n.*pi.*x));
g = sum(f,3);
[x1,y1] = meshgrid(linspace(0,1),linspace(0,1));
contourf(x1,y1,g)

最佳答案

向量化代码。例如,您可以编写 f(x,y,n) :

 [x y n] = meshgrid(-1:0.1:1,-1:0.1:1,1:10);
f=exp(x.^2-y.^2).*n ;

f 是一个 3D 矩阵,现在只是在正确的维度上求和...

 g=sum(f,3);

为了使用contourf,我们只取x,y的二维部分:

 [x1 y1] = meshgrid(-1:0.1:1,-1:0.1:1);    
contourf(x1,y1,g)

enter image description here

关于matlab - 有人可以解释如何使用 contourf 在 MATLAB 中绘制这个总和吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14515051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com