Ошибка MATLAB при использовании symfun/subsindex

У меня проблемы с использованием 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')

person Michael    schedule 29.04.2015    source источник


Ответы (1)


Как указано в сообщении об ошибке, проблема связана со строкой, вызывающей dsolve. Как указано в документации , эта функция возвращает либо

  • Символьный массив, содержащий решения уравнения. Размер символьного массива соответствует количеству решений.

  • Массив структур, содержащий решения системы уравнений. Количество полей в массиве структур соответствует количеству независимых переменных в системе.

  • Переменные, которым решатель назначает решения системы уравнений. Количество выходных переменных или символьных массивов должно равняться количеству независимых переменных в системе. Набор инструментов сортирует независимые переменные в алфавитном порядке, а затем присваивает решения для этих переменных выходным переменным или символьным массивам.

Другими словами, он не возвращает символьные функции (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 будет пустым. Вы можете попробовать применить assumptions. (Mathematica 10 ничуть не лучше, чего бы она ни стоила.)

person horchler    schedule 29.04.2015