0

xの範囲が定義されている関数y=1-exp(c)をプロットしたいと思います。プロットはxと関数yの間にあります。プロットは、一連のポイントを指数関数的に表示するのではなく、1ポイントだけを表示します。Matlab.Spは初めてです。どこが間違っているのか教えてください。コードは次のとおりです。

   for x = -10:0.25:10

   if(x>0)

   c=-6*x;
   m=exp(c);
   y = 1-m  

   end
   plot(x,y,'o')
   xlabel('x') 
   ylabel('y') 
   title('Plot')
   end
4

2 に答える 2

2

これはそれを行う必要があります:

x = -10:0.25:10; % define the x vector
c=  -5*x.*(x>0); % using a  logical condition the 'if' is avoided
y = 1-exp(c);    % calc y given c

plot(x,y,'o')
xlabel('x') 
ylabel('y') 
title('Plot')

「for」ループまたは「if」が必要な場合はありません。

于 2012-10-26T07:39:47.237 に答える
2

あなたの問題はforループです。yの値をリセットし、ループごとに1ポイントを再プロットします。そのループはまったく必要ありません。このコードは、y = 1-exp(A * x)のトリックを実行します

編集(2012-10-30)OPは、x<=0の場合yはゼロであると言います。上記の回答の@Nateのコードはおそらく最良ですが、ここでは論理インデックスを使用して、同じことを行う別の方法を示しています。

x = -10:0.25:10; % <vector>
y = zeros(size(x)); % prealocate y with zeros and make it the same size as x
y(x>0) = 1 - exp(-5*x(x>0)); % only calculate y values for x>0
plot(x,y,'o')
xlabel('x')
ylabel('y')
title('Plot')
于 2012-10-26T07:48:06.173 に答える