0

関数の極限を計算する必要があります

(c^(2n) - 1)/(c^(2n) + 1) as n = 1,2,3...無限に行く

関数の動作はパラメーターcに依存します。説明したいのは、シーケンスの最初の100個(またはそれ以上)の値をcのさまざまな値に対してプロットc = 1する-1 < c < 1ことです。 c > 1、可能であれば、すべて1つの「画像」内に。

MATLABでこれにアプローチする最良の方法は何ですか?

4

2 に答える 2

3

インライン関数を使用し、すべてと凡例を保持する必要があります。これが簡単な例です

n=1:100;
f = @(c) (c.^(2.*n) - 1)./(c.^(2.*n) + 1); 
hold all;
plot(n,f(0.7),'.-');
plot(n,f(0.9),'.-');
plot(n,f(0.95),'.-');
plot(n,f(1),'.-');
plot(n,f(1.05),'.-');
plot(n,f(1.3),'.-');
plot(n,f(1.1),'.-');
legend('c=0.7','c=0.9','c=0.95','c=1.0','c=1.05','c=1.3','c=1.1');

この出力は次のようになります ここに画像の説明を入力してください

于 2012-10-13T04:16:39.870 に答える
2

私は次のようなことをします:

% Clean up, this isn't necessary if you're throwing this in a function
%   and not a script.
close all
clear all
clc

% Define your function
f = @(c,n)( (c^(2*n) - 1)/(c^(2*n) + 1) );

% An array containing the values of c you want to use
C = [0.5, 1, 1.5, 2];

% N will contain 500 points, equally spaced between 1 and 20.
%   (Modify these arguments as necessary)
N = linspace(1,20,500);

% Initialize an output matrix
Y = zeros(length(N), length(C));
for i = [1:length(C)]
    c = C(i);

    for j = [1:length(N)]
        n = N(j);

        % Compute value of function
        y = f(c,n);

        % Store it
        Y(j,i) = y;
    end%for
end%for

% Plot it
plot(N,Y);

% Generate Legend
lt = cell(1,length(C));
for i = [1:length(C)]
    lt{i} = sprintf('C = %s', num2str(C(i)));
end%for
legend(lt);

fベクトルを受け入れて返すように関数を変更することで最適化できますが、この明示的なバージョンは、おそらく何がより良くなっているのかを示しています。

于 2012-10-13T00:28:46.170 に答える