Странное поведение с векторными операциями в MATLAB

У меня есть формула

F = (-k.^(3/2) .* sqrt(4 .* c .* x + k) + 2 .* x .* k .* c + k.^2) / (2 .* c)

и я пытаюсь построить F для диапазона значений c для константы x и k следующим образом:

x = 0.01;
c = 10000:10000:100000;
k = 100000;
F = (-k.^(3/2) .* sqrt(4 .* c .* x + k) + 2 .* x .* k .* c + k.^2) / (2 .* c)

В этот момент я предположил, что matlab даст мне вектор того же размера, что и c, но он просто напечатает:

F =

   47.1563

Построение F по диапазону значений k для констант c и x работает нормально, но вышеописанное - нет.

Кто-нибудь может объяснить это для меня?

1 ответ

Решение

Используйте поэлементное деление ./, похожий на .*

F = (-k.^(3/2) .* sqrt(4 .* c .* x + k) + 2 .* x .* k .* c + k.^2) ./ (2 .* c)

/ используется для разделения правой матрицы: A/B эквивалентно mrdivide(A,B), которая решает систему (линейных) уравнений x*B = A за x, в то время как ./ это просто стихийное деление.

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