MATLABの間違った出力プロット画像

Matlabにシンプルなプログラムを書く必要がありますが、問題はあります。タスクは次のとおりです。

図1に示すスキーマの出力電圧の大きさと位相を描きます。   LをR2C/mとし、mがステップ0.2で1から5の値を取るとする。

私はこのコードで試した:

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)

問題は、このプログラムはただ1つのポイントをプロットすることです。私はMatlabプログラミングの初心者ですが、学びたいと思っています..
私にとって最大の問題は、x軸に何をプロットするのか、y軸上に何をプロットするのか分からないことです。誰かが私にこの問題を手伝ってもらえますか? 私はあなたに私がコード全体を解決することを望んでいない、私に行く場所を私に与える。

EDIT: Here is figure for this task: enter image description here

0

2 答え

MATLABのプロット関数はデータタプレット(x、y)をグラフに描画する方法です。つまり、最初にそれらのtuplet、つまりx-y-value-pairsを生成する必要があります。たとえば、次のようになります。

% 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スクリプト)を使用するには2種類の方法があります。

Functions: If your file starts with the keyword function, the file name must correspond to that function's name. This then makes the function available in your workspace, like a static method in C++ or Java - so in your case you can call your function coherence_task2 (R, omega, tau, m, i) from the console like this: coherence_task2(123,44,55,66).

また、関数に戻り引数がありません。戻り値の引数は、.mファイル(最初の行)に定義できます。 function y = SomeFunctionName(x)。関数本体では、単に 'endfunction'の前にyに値を代入するだけです。この値は実行後に自動的に返されます。これによりコンソールから次のような関数を呼び出して結果を取得することができます: anotherY = SomeFunctionName(x)

Batch file: If the file doesnt start with function, it is interpreted as just a sequence of commands executed in your workspace - as if you would type them in the console. For example you could put what I wrote above (plot example) into an .m file. You can then execute the script/sequence by writing the filename into the console (without any arguments).

ここ数日前に書いたバッチファイルの例を示します。これはまた、関数をプロットしていないことを示しています。x-y値のペアをプロットします。

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
追加された
偉大な答えをありがとう、あなたは私に多くのことを明らかにした。私はJavaの開発者です。私はMatlabの構文が少し異なります。
追加された 著者 Иван Бишевац,

I'm not sure how much this helps but I have a few quick pointers.

plot(moduo_z , argument_z)

moduo_zとargument_zは、プロットするデータの配列ではなく、2つの単一の値です。 forループにplotコマンドを追加したい場合は、

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)
1
追加された
明らかに私は2つの問題があります。 1つは技術的な問題(配列の問題)、2番目のタスクの誤解です(x軸に何をy軸にプロットするかわからない)。私は最初の仕事を解決することができますが、2番目は問題です。私は、y軸は電圧の大きさでなければならないが、x軸には何があるかを知っている。私が見ることができるので、ここでは変数だけが周波数である可能性があります。
追加された 著者 Иван Бишевац,