0

f(x,y)このシリーズを計算するためにSQLで関数を使用するにはどうすればよいですか:

f(x,y)=x-y^3/3!+x^5/5!-y^7/7!+....

階乗関数を作成し、while ループと count until parameter<=32 を使用しました。convert(varchar(50),@answer)

stackoverflow エラーなしで計算できますが、このセットでこの関数 (または proc) を使用するにはどうすればよいですか?

階乗関数を使用せずにこのセットをシミュレートするにはどうすればよいでしょうか?

例えば

x^5/5!  

でシミュレートされます

x^3/3!*x^2/5*4   .....

私を助けてくれてありがとう :)

4

2 に答える 2

1

この特定の無限級数のみが必要な場合は、すべての x に対して sin() 値と sinh() 値のこの組み合わせに収束します。(罪と罪にテイラー級数を使用して、私の数学を確認してください。)

f(x,y) = (sin(x)-sinh(-x))/2 + (sin(y)+sinh(-y))/2

これは、ループなしで必要な結果を表しますが、残念ながら双曲線正弦関数 sinh() は T-SQL では使用できません。CLR ユーザー定義関数を作成することにより、.NET math.sinh 関数を SQL Server で使用できるようにすることができます。(関数 f(x,y) 全体を CLR 関数にすることもできます。)

于 2012-04-28T17:40:27.467 に答える
0

一連の要因(3、5、7として表示)は奇数のセットとして増加すると想定しています。このソリューションでは、共通テーブル式を使用しています。つまり、SQLServer2005以降を使用する必要があります。

Declare @x float;
Declare @y float;

-- this is the first factor evaluated
-- e.g., in the example, 3 is the first factor
-- values less that one effectively set the min
-- to one.
Declare @FactorMin int;

-- this is the maximum number of iterations
-- i.e., 3, 5, 7, 
Declare @FactorMax int

Set @x = 20;
Set @y = 20;
Set @FactorMin = 3;
Set @FactorMax = 15;

With Numbers As
    (
    Select 1 As Value
    Union All
    Select Value + 1
    From Numbers
    Where Value < @FactorMax
    )
    , OddNumbers As
    (
    Select Value
        , Row_Number() Over( Order By Value ) As Position
    From Numbers
    Where Value % 2 = 1
        And Value Between @FactorMin And @FactorMax
    )
    , Factorials As
    (
    Select O.Value, O.Position
        , Exp(Sum(Log(N1.Value))) As Factorial
        , Case When O.Position % 2 = 1 Then -1 * @y Else @x End As XOrY
    From OddNumbers As O
        Cross Join Numbers As N1
    Where N1.Value <= O.Value
    Group By O.Value, O.Position
    )
Select Sum( Z.Value )
From    (
        Select @x As Value
        Union All   
        Select Power(XOrY, Value) / Factorial
        From Factorials 
        ) As Z  
Option (MaxRecursion 0);
于 2012-04-28T17:05:37.677 に答える