0

MATLAB初心者はこちら。ヘヴィサイド関数を滑らかに近似しようとしていますheaviside(x)。そのために、バンプ機能を備えた標準的な軟化手順を実行しています。これは、プロセスを実行する必要があると思われるネストされた関数smoothです(エレガントでないソリューションである場合は申し訳ありません)。

function c = smooth(q,y,e)
c = e.^-1*int(igrand(q,y),y,-2,2);
igrand(q,y)

function i = igrand(q,y)
i = dbump(q)*heaviside(y);
dbump(q)

    function d = dbump(q)
    d = compose(nbump,quot,x,q);
    nbump(x);
    quot(x,y,e);


        function n = nbump(x)
        n = bump(x)*(ibump(x)).^-1;
        ibump(x)

            function i = ibump(x)
            i = integral(@bump, -2, 2);
            bump(x)

                function b = bump(x)
                region1 = abs(x) < 1;
                b(region1) = (exp(-1./(1 - x(region1).^2)));

                region2 = abs(x) >= 1;
                b(region2) = 0;

        function q = quot(x,y,e)
        q = (x-y)./e;
        end
                end
            end
        end
    end
end

end

また、私のフォーマットを許してください。最後のendものは、前のものの左側にある必要があります。また、 の定義はsmooth、ボディの残りの部分の左側にある必要があります。

x = -2:.01:2e = .1およびを選択しますsyms y real。ただし、実行するplot(x, smooth(q,y,e))と、次のエラーが発生します。

Error using smooth/igrand/dbump/nbump (line 16)
Not enough input arguments.

Error in smooth/igrand/dbump (line 10)
d = compose(nbump,quot,x,q);

Error in smooth/igrand (line 6)
i = dbump(q)*heaviside(y);

Error in smooth (line 2)
c = e.^-1*int(igrand(q,y),y,-2,2);

実際に関数を書いているときに表示される唯一のエラーはquot、関数が使用されていない可能性があることを示す下線です。しかし、私はそれを構成していませんnbumpか?

編集:私はcompose(nbump,quot,x,q);ちょうどnbump(quot(x,y,e));に変更し、すべての変数を変更して、それらが整列するようにしました(qはもうありません)。を実行するplot(x,smooth(x,y,e))と、しばらく実行された後、停止し、次のエラー メッセージが表示されます。

Error using symengine (line 58)
Unable to prove 'abs(10*y + 20) < 1' literally. To test the statement mathematically, use isAlways.

Error in sym/subsindex (line 1554)
X = find(mupadmex('symobj::logical',A.s,9)) - 1;

Error in sym>privformat (line 2357)
x = subsindex(x)+1;

Error in sym/subsref (line 1578)
[inds{k},refs{k}] = privformat(inds{k});

Error in bump (line 3)
b(region1) = (exp(-1./(1 - x(region1).^2)))

Error in smooth/igrand/dbump/nbump (line 16)
n = bump(x)*(ibump(x)).^-1;

Error in smooth/igrand/dbump (line 10)
d = nbump(quot(x,y,e));

Error in smooth/igrand (line 6)
i = dbump(x,y,e)*heaviside(y);

Error in smooth (line 2)
s = e.^-1*int(igrand(x,y,e),y,-2,2);

4

1 に答える 1