Неправильный вывод сюжета в Matlab - PullRequest
0 голосов
/ 24 ноября 2011

Я должен написать простую программу на Matlab, но у меня проблемы с ней.Задача:

Нарисуйте величину и фазу выходного напряжения для схемы, показанной на рисунке 1. Пусть L будет R2C / m, и пусть m принимает значения от 1 до 5 в шагах 0.2.

Я пробовал с этим кодом:

function coherence_task2 (R, omega, tau, m, i)


R=1;

tau=1;

f=50; 

omega=2*pi*f;

ksi=0;

i=1;

for m=1:0.2:5;

    moduo_Z=R*sqrt(((1+omega.^2*tau.^2)/((1-omega.^2*tau^2*m).^2+(omega*tau*m).^2)));

    argument_Z=(atan(omega*tau))-(atan((omega*tau*m)/(1-omega.^2*tau.^2*m)));

end;

Z=moduo_Z*exp((sqrt(-1))*argument_Z);

u=Z*i;

plot(moduo_z , argument_z)

Проблема в том, что эта программа отображает только одну единственную точку.Я новичок в программировании на Matlab, но хочу научиться ..
Для меня самая большая проблема в том, что я не знаю, что строить на оси x, а на оси y.Может ли кто-нибудь помочь мне с этой проблемой?Я не хочу, чтобы вы решали весь код целиком, просто чтобы указать путь к нему.

РЕДАКТИРОВАТЬ: Вот рисунок для этой задачи: enter image description here

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

способ, которым функция plot в matlab рисует кортежи данных (x, y) в графЭто означает, что сначала вы должны сгенерировать эти кортежи или пары значений xy.Например, как это:

% generate a vector of values from -5 to +5
x = [-5:0.1:5]; 

% put every element of x in the expression -> y has same length
y = 1 ./ (1 + exp(x));

% plot the two vectors. note that the tuplets are defined by the array index
plot(x,y)

Также обратите внимание, что существует два вида использования файла .m (сценарии matlab):

Функции: Если ваш файл начинается с ключевого слова function, имя файла должно соответствовать имени этой функции.Это тогда делает функцию доступной в вашем рабочем пространстве, как статический метод в C ++ или Java - так что в вашем случае вы можете вызывать свою функцию coherence_task2 (R, omega, tau, m, i) из консоли следующим образом: coherence_task2(123,44,55,66).

Кроме того, ваша функция теперь не имеет возвращаемого аргумента.Вы можете определить возвращаемый аргумент в файле .m (первая строка): function y = SomeFunctionName(x).В теле функции просто присвойте значение y перед endfunction - это значение автоматически возвращается после выполнения.Это позволяет вам вызывать такую ​​функцию из консоли и получать результат: anotherY = SomeFunctionName(x).

Пакетный файл: Если файл не начинается с function, он интерпретируется какпросто последовательность команд, выполняемых в вашем рабочем пространстве - как если бы вы вводили их в консоли.Например, вы можете поместить то, что я написал выше (пример графика), в файл .m.Затем вы можете выполнить скрипт / последовательность, записав имя файла в консоль (без каких-либо аргументов).

Вот пример пакетного файла, который я написал несколько дней назад, который также показывает, что вы не чертите функции, вы строите пары xy-значение:

n = [1:6000];

theta = 2*pi/(137.51/180) * n;
r = 0.1*sqrt(n);

x = cos(theta).*r;
y = sin(theta).*r;
plot(x, y, '.');
1 голос
/ 24 ноября 2011

Я не уверен, насколько это помогает, но у меня есть несколько быстрых указателей.

plot(moduo_z , argument_z)

moduo_z и arguments_z - это два отдельных значения, а не массивы данных для построения. Если вы хотите добавить команду plot в цикл for, вы можете использовать

hold on;

перед петлей. Затем все команды построения отображаются в одном графике. Я немного изменил ваш код, надеюсь, это поможет.

function coherence_task2 (R, omega, tau, m, i)

R=1;
tau=1;
f=50; 
omega=2*pi*f;
ksi=0;
i=1;


moduo = zeros(21,1); % length(1:0.2:5) = 21.

argu = zeros(21,1);

cnt = 1;

for m=1:0.2:5

    moduo(cnt) = R*sqrt(((1+omega.^2*tau.^2)/((1-omega.^2*tau^2*m).^2+(omega*tau*m).^2)));

    argu(cnt) = (atan(omega*tau))-(atan((omega*tau*m)/(1-omega.^2*tau.^2*m))); 

    cnt = cnt + 1;

end

% This was never used

% Z=moduo_Z*exp((sqrt(-1))*argument_Z); 


% This was never used

% u=Z*i; 

plot(moduo , argu)
...