Matlab中的3D绘图 - 不正确

时间:2013-11-26 15:45:03

标签: matlab

我正在尝试计算给定共面矩形结构中的势函数。这是我用数学推导出的等式,这里是sumary:  Assumption

现在我尝试在MATLAB中绘制它,这是我的代码:

function [x,y,v] = potentialFM(a1,a2,a3,b)
syms n;

%range in normalized values
x=0:1/20:1;
y=0:(b/a3)/20:(b/a3);
[X,Y] = meshgrid(x,y);

%normalized values
an1=a1/a3;
an2=a2/a3;
bn=b/a3;

%symbol k 
k=(n.*2+1)*(pi/2);

C1=(1/(k.^2)).*(2/(an1-an2));
C2=cos(k.*an2)-cos(k.*an1);
C3=1/(sinh(k.*bn));
Vx=cos(X*k);
Vy=sinh(Y*k);
v=symsum(C1.*C2.*C3.*Vx.*Vy,n,1,20);
end

那么,有人可以尝试我的代码并检查错误在哪里。结果应该看起来像链接中的假设图,但我无法实现它。

最诚挚的问候,

FRZ

2 个答案:

答案 0 :(得分:0)

绘图时没有问题,但是对功能进行了评估。如果你想为绘图准备好数字结果,为什么还要使用符号?

这是一个简单的修复 - n现在只是一个循环变量,k另一个正常变量,并使用变量v累计计算总和:

function [x,y,v] = potentialFM(a1,a2,a3,b)

%range in normalized values
x=0:1/20:1;
y=0:(b/a3)/20:(b/a3);
[X,Y] = meshgrid(x,y);

%normalized values
an1=a1/a3;
an2=a2/a3;
bn=b/a3;

v = 0;
for n = 1 : 20
    k=(n.*2+1)*(pi/2);

    C1=(1/(k.^2)).*(2/(an1-an2));
    C2=cos(k.*an2)-cos(k.*an1);
    C3=1/(sinh(k.*bn));
    Vx=cos(X*k);
    Vy=sinh(Y*k);
    v = v + C1.*C2.*C3.*Vx.*Vy;
end

这不一定是最有效的实现,也许一些计算可以被矢量化 - 但它可以工作。任意选择参数,

[x,y,v] = potentialFM(1, 2, 3, 4);
surf(x, y, v)

给出:

surface plot

答案 1 :(得分:0)

另一种尝试:如果你需要无限和的值,并希望symsum可以找到一个封闭的表格,那么就没有必要将它与数字混合。相反,将所有变量声明为符号:

syms n an1 an2 bn X Y
k=(n.*2+1)*(pi/2);
C1=(1/(k.^2)).*(2/(an1-an2));
C2=cos(k.*an2)-cos(k.*an1);
C3=1/(sinh(k.*bn));
Vx=cos(X*k);
Vy=sinh(Y*k);
v=symsum(C1.*C2.*C3.*Vx.*Vy,n,1,inf);

symsum会返回一个结果,但看起来像这样:

-(8*sum(((exp(-(pi*X*(2*n + 1)*i)/2)/2 + exp((pi*X*(2*n + 1)*i)/2)/2)*(exp(-(pi*Y*(2*n + 1))/2)/2 - exp((pi*Y*(2*n + 1))/2)/2)*(exp(-(pi*an1*(2*n + 1)*i)/2)/2 + exp((pi*an1*(2*n + 1)*i)/2)/2 - exp(-(pi*an2*(2*n + 1)*i)/2)/2 - exp((pi*an2*(2*n + 1)*i)/2)/2))/((2*n + 1)^2*(exp(-(pi*bn*(2*n + 1))/2)/2 - exp((pi*bn*(2*n + 1))/2)/2)), n == 1..Inf))/(pi^2*(an1 - an2))

正如您所看到的,符号数学工具箱能够执行一些简化(?)但无法解决问题的核心:那里仍然存在无限的总和。据我所知,这表明没有封闭的表单表达式(或者至少发现它超出了工具箱的功能)。