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