Несогласованная ошибка размеров строк / столбцов в Scilab - PullRequest
0 голосов
/ 25 октября 2018

Я хочу построить Limacon в scilab, у меня есть эти уравнения для обработки:

equations

Я знаю, что r>0 и l>0

Когда я компилирую приведенный ниже код, я получаю эту ошибку в строке 5:

Несоответствующие размеры строки / столбца.

Если я задаю t конкретное числоЯ получаю чистый график, в нем нет функции.

Я пытался изменить r и l на другие числа, но это ничего не дает.У кого-нибудь есть идеи, что я делаю не так?

r=1;
l=1;
t=linspace(0,2,10);
x = 2 * r * (cos(t))^2 + l * cos(t);
y = 2 * r * cos(t) * sin(t) + l * sin(t);
plot (x,y);

1 Ответ

0 голосов
/ 25 октября 2018

Вы (случайно) пытаетесь сделать матричное умножение с *.

Вместо этого вам нужно поэлементное умножение с .* ( Scilab docs , MATLAB docs ).

Точно так же вы должны использовать поэлементную степень .^ для возведения в квадрат косинуса в первом уравнении.

См. Комментарии в исправленном кодениже ...

r = 1;
l = 1;
% Note that t is an array, so we might encounter matrix operations!
t = linspace(0,2,10); 
% Using * on the next line is fine, only ever multiplying scalars with the array.
% Could equivalently use element-wise multiplication (.*) everywhere to be explicit.
% However, we need the element-wise power (.^) here for the same reason!
x = 2 * r * (cos(t)).^2 + l * cos(t);      
% We MUST use element-wise multiplication for cos(t).*sin(t), because the dimensions
% don't work for matrix multiplication (and it's not what we want anyway).
% Note we can leave the scalar/array product l*sin(t) alone, 
% or again be explicit with l.*sin(t) 
y = 2 * r * cos(t) .* sin(t) + l * sin(t);
plot (x,y);
...