簡體   English   中英

Matlab中的3D圖-不正確

[英]3D Plot in Matlab - not correct

我正在嘗試計算給定共面矩形結構中的勢函數。 這是我使用數學推導的方程式,這是總結: 假設

現在,我嘗試在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

因此,可以有人嘗試我的代碼並檢查哪里有錯誤。 結果應該看起來像鏈接中的假定圖,但我無法實現。

最好的祝福,

R

您對繪圖沒有問題,但是對函數進行評估。 如果希望將數字結果准備好繪制,為什么要使用符號?

這是一個簡單的解決方法– 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)

給出:

表面圖

另一嘗試:如果您需要無限和的值,並希望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))

如您所見, Symbolical Math Toolbox可以執行一些簡化(?),但不能解決問題的核心:那里仍然有無限的總和。 據我了解,這表明沒有封閉形式的表達式(或者至少發現它超出了工具箱的能力)。

暫無
暫無

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

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