使用symfun / subsindex的MATLAB错误

时间:2015-04-29 15:19:51

标签: algorithm matlab symbolic-math symbolic-computation

我在使用带有符号功能的dsolve时遇到了麻烦。我收到一条错误说明:

  

“使用symfun / subsindex时出错(第121行)
  索引值必须是正整数,逻辑或符号变量。

     

VK3错误(第9行)
  [F(n),G(n),H(n)] = dsolve(diff(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')

1 个答案:

答案 0 :(得分:0)

正如错误消息所述,问题在于调用dsolve的行。作为文档indicates,此函数要么返回

  
      
  • 包含等式解的符号数组。符号数组的大小对应于解决方案的数量。

  •   
  • 包含方程组解的结构数组。结构数组中的字段数对应于系统中独立变量的数量。

  •   
  • 求解器分配方程组解的变量。输出变量或符号数组的数量必须等于系统中独立变量的数量。工具箱按字母顺序对独立变量进行排序,然后将这些变量的解决方案分配给输出变量或符号数组。

  •   

换句话说,它不返回符号函数(symfun)。因此,Matlab将F(n)视为数组索引而不是符号函数。我建议使用结构数组形式:

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并没有更好的价值,因为它的价值。)