Странная ошибка при попытке вычислить котангенс - PullRequest
0 голосов
/ 10 февраля 2011

Я новичок в MATLAB и пытаюсь разобраться в некоторых моих сценариях. В одном из них есть выражение для вычисления полного сопротивления короткого замыкания (в контексте других выражений):

Z=tan(2*p*f*d/vp)

Это хорошо, но когда я хочу перейти от касательной к отрицательной котангенс (для разомкнутой цепи), вот так:

Z=-1/tan(2*p*f*d/vp)

В этой строке выдается ошибка:

?? Error using ==> mldivide
Matrix dimensions must agree

Теперь, AFAIK, ни одно из подвыражений в вычислении Z не является матрицами. Что делает его еще более запутанным, так это то, что если я изменю 1/tan на cot, то это сработает (независимо от того, добавлю я знак - перед ним или нет):

Z=-cot(2*p*f*d/vp)

Есть идеи? Я выполнил поиск в Google по ошибке mldivide, но я просто не понимаю, как это относится к вычислению котангенса как буквально обратного касательной.

Я упускаю здесь особенность MATLAB? Спасибо.

- РЕДАКТИРОВАТЬ -

Я думаю, что я должен был включить весь исходный код (первоначально для расчета входного сопротивления для линии короткого замыкания, и попытаться получить шанс от tan до -cot для линии разомкнутой цепи)

close all; % close all opened graphs
figure;    % open new graph

% define distributed line parameters
L=209.410e-9;  % line inductance in H/m
C=119.510e-12; % line capacitance in F/m

vp=1/sqrt(L*C); % phase velocity
Z0=sqrt(L/C);   % characteristic line impedance

d=0.1;          % line length
N=5000;         % number of sampling points

f=1e9+3e9*(0:N)/N;  % set frequency range

%Z=tan(2*pi*f*d/vp); % short circuit impedance

Z= -1/tan(2*pi*f*d/vp); % open circuit impedance

plot(f/1e9,abs(Z0*Z));
title('Input impedance of a short-circuit transmission line');
xlabel('Frequency {\itf}, GHz');
ylabel('Input impedance |Z|, {\Omega}');
axis([1 4 0 500]);
% print -deps 'fig2_28.eps' % if uncommented -> saves a copy of plot in EPS format

Ответы [ 4 ]

3 голосов
/ 10 февраля 2011

Я предполагаю, что один из p, f или d - это матрица, поэтому tan(2*p*f*d/vp) также будет матрицей. 1 / matrix не будет работать, потому что это определено как обратное умножению матриц, где у вас есть ограничения на размеры ваших матриц.

Попробуйте

Z=-1./tan(2*p*f*d/vp)

Это поэтапное деление. (Я полагаю, это то, что вы хотите.)

2 голосов
/ 10 февраля 2011

Этот код работает нормально, пока p, f, d и vp все скалярны. Следовательно, один из ваших входных данных должен быть нескалярным.

2 голосов
/ 10 февраля 2011

Знак / является матричным делением (т.е. умножением на обратное справа), для которого требуются массивы одинакового размера.Обычно все хорошо работает со скалярами, но иногда интерпретатор будет кашлять, поэтому вместо него придется использовать ./, то есть поэлементное деление.

1 голос
/ 10 февраля 2011
>> p = 0.1;
>> f = 0.2;
>> d = 0.01;
>> vp =0.2;
>> Z=-1/tan(2*p*f*d/vp)

Z =

 -499.9993

Казалось бы, вы передаете матрицу, как говорит вам Матлаб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...