我正在尝试计算给定共面矩形结构中的势函数。这是我用数学推导出的等式,这里是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
答案 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)
给出:
答案 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))
正如您所看到的,符号数学工具箱能够执行一些简化(?)但无法解决问题的核心:那里仍然存在无限的总和。据我所知,这表明没有封闭的表单表达式(或者至少发现它超出了工具箱的功能)。