2015-04-29 35 views
2

我在使用帶符號功能的dsolve時遇到了麻煩。我收到錯誤消息,說明:使用symfun/subsindex的MATLAB錯誤

「使用symfun/subsindex(線121)
索引值必須是正整數,邏輯值或符號變量

錯誤VK3誤差(第9行)
[F(n)時,G(n)時,H(N)] = dsolve(差異(F)== F2,DIFF(G)== G2,...」

這是我的代碼作爲它對某些人來說可能看起來很愚蠢,但我對Matlab的經驗相對較少,如果有人能告訴我我要出錯的地方,我會心懷感激。

syms F(n) G(n) H(n) F2(n) G2(n) 

c = 1.004e-6; 
m = input('Angular Velocity = '); 
z = 0:1:20; 
r = input('Radial Distance = '); 
n = z*sqrt(m/c); 

[F(n), G(n), H(n)] = dsolve(diff(F) == F2, diff(G) == G2,... 
          diff(F2) == F^2 - G^2 + F2*H,... 
          diff(G2) == 2*F + G2*H,... 
          diff(H) == -2*F,... 
          F(0) == 0, H(0) == 0, G(0) == 1, F(20) == 0, G(20) == 0); 

U = m*r*F(n); 
V = m*r*G(n); 
W = sqrt(m/v)*H(n); 

subplot(3,1,1)  
plot(U,n), xlabel('U'), ylabel('z'),... 
      title('Radial Velocity Component') 

subplot(3,1,2)  
plot(V,n), xlabel('V'), ylabel('z'),... 
      title('Azimuthal Velocity Component') 

subplot(3,1,3)   
plot(W,n), xlabel('W'), ylabel('z'),... 
      title('Axial Velocity Component') 

回答

0

由於錯誤消息指出,問題與調用dsolve的行有關。作爲包含一個方程的解的文檔indicates,該函數或者返回任一

  • 符號陣列。符號數組的大小對應於解決方案的數量。

  • 結構數組包含一個方程組的解。結構數組中的字段數對應於系統中獨立變量的數量。

  • 求解器分配方程組解的變量。輸出變量或符號數組的數量必須等於系統中獨立變量的數量。工具箱按字母順序排列獨立變量,然後爲這些變量分配解決方案以輸出變量或符號數組。

換句話說,它不返回符號函數(symfun)。因此,Matlab將​​視爲數組索引而不是符號函數。我建議使用結構數組形式:

S = dsolve(diff(F) == F2, 
      diff(G) == G2,... 
      diff(F2) == F^2 - G^2 + F2*H,... 
      diff(G2) == 2*F + G2*H,... 
      diff(H) == -2*F,... 
      F(0) == 0, H(0) == 0, G(0) == 1, F(20) == 0, G(20) == 0); 

然而,您的系統可能沒有解析解(你有理由相信它呢?),因爲你會得到一個警告:

警告:找不到明確的解決方案。

和輸出S將爲空。你可以試試applying assumptions。 (對於它的價值,Mathematica 10不會更好。)