Ошибка 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')

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 лучше не стоит, чего бы это ни стоило.)

Другие вопросы по тегам