2012-05-14 102 views
-2

我寫了一個matlab m文件來繪製如下的double積分。每個人都可以在數學中給我看等價物嗎?將m文件matlab轉換爲mathematica

tetha = pi/4; 
lamb = -1; 
h = 4; 
tetha0 = 0; 
syms x y l 

n = [h.*((cos(tetha)).^2)./sin(tetha); h.*abs(cos(tetha)); 0]; 
ft = ((tetha - pi/2)./sin(tetha)).^4; 
Rt = [cos(tetha) -sin(tetha); sin(tetha) cos(tetha)]; 
zt = [cos(tetha0) -sin(tetha0); sin(tetha0) cos(tetha0)]; 
lt = [x;y]; 

integrand = @(x,y)(ft.*h.*((abs(cos(tetha)).*  (x.*cos(tetha)-y.*sin(tetha)))-((cos(tetha)).^2/sin(tetha)).*(x.*sin(tetha)+y.*cos(tetha)))); 
PhiHat = @(a,b)(dblquad(integrand,0,a,0,b)); 
ezsurfc(PhiHat,[0,5,0,5]) 
+4

它會更容易寫你的Mathematica你,如果你向我們展示了原始方程(組)。現在你需要我們首先從Matlab中導出這些方程,然後在Mathematica中重新實現它們。我個人也不打算做;如果你證明你已經在自己的問題上開了個好頭,那麼你通常會在這裏得到更好的答案。 –

+0

它簡單本身就是導出一些矩陣製作不是非常複雜,既不在matlab中也不是mathematica! 我的問題是如何在變量位於不在其運算符下的整數的範圍內時繪製雙積分!!!!!!!!!!! – Roboticist

+3

我認爲@High Performance Mark意味着對於那些不是用戶使用Matlab的人來說,很難將其翻譯成Mathematica。如果您提供原始公式,我們不需要您的Matlab實現。舉個例子,我非常清楚在Mathematica中如何進行雙積分或者沒有邊界,但是對於這個@(a,b)的Matlab代碼段的含義沒有任何線索。 –

回答

4

這裏你去了(只做了很小的修改),但是你必須做你的功課來理解Mathematica中的函數定義,集成,繪圖等等。此外,這是不地道的數學,但我們不要去那裏...

tetha=Pi/4; 
lamb=-1; 
h=4; 
tetha0=0; 

n={h*((Cos[tetha])^2)/Sin[tetha],h*Abs[Cos[tetha]],0}; 
ft=((tetha-Pi/2)/Sin[tetha])^4; 
Rt={{Cos[tetha], -Sin[tetha]}, {Sin[tetha], Cos[tetha]}}; 
zt={{Cos[tetha0], -Sin[tetha0]}, {Sin[tetha0], Cos[tetha0]}}; 

integrand[x_,y_]:= (ft*h*((Abs[Cos[tetha]]*(x*Cos[tetha]-y*Sin[tetha]))-((Cos[tetha])^2/Sin[tetha])*(x*Sin[tetha]+y*Cos[tetha]))); 
PhiHat[a_,b_]:=NIntegrate[integrand[x,y],{x,0,a},{y,0,b}]; 
Plot3D[PhiHat[x,y],{x,0,5},{y,0,5}] 

enter image description here

+0

我認爲'Rt'應該是'{{Cos [tetha],-Sin [tetha]},{Sin [tetha],Cos [tetha]}}'(類似於'zt')。 – Heike

+0

是的,你說得對。 MATLAB同時使用''''和空格作爲分隔符,而我錯過了它,因爲當我將它複製到Mathematica時,FE添加了它自己的間距和填充... – abcd

+0

非常感謝親愛的yoda! 不幸的是我還沒有流利的mathematica語法,但我試圖做得更好! – Roboticist