|
809 | 809 | prob = SDEProblem(sys, [x => 1.0, y => 1.0], (0.0, 1.0))
|
810 | 810 | @test prob[z] ≈ 2.0
|
811 | 811 | end
|
| 812 | + |
| 813 | +@testset "SDESystem to ODESystem" begin |
| 814 | + @variables x(t) y(t) z(t) |
| 815 | + @testset "Scalar noise" begin |
| 816 | + @named sys = SDESystem([D(x) ~ x, D(y) ~ y, z ~ x + y], [x, y, 3], |
| 817 | + t, [x, y, z], [], is_scalar_noise = true) |
| 818 | + odesys = ODESystem(sys) |
| 819 | + @test odesys isa ODESystem |
| 820 | + vs = ModelingToolkit.vars(equations(odesys)) |
| 821 | + nbrownian = count( |
| 822 | + v -> ModelingToolkit.getvariabletype(v) == ModelingToolkit.BROWNIAN, vs) |
| 823 | + @test nbrownian == 3 |
| 824 | + for eq in equations(odesys) |
| 825 | + ModelingToolkit.isdiffeq(eq) || continue |
| 826 | + @test length(arguments(eq.rhs)) == 4 |
| 827 | + end |
| 828 | + end |
| 829 | + |
| 830 | + @testset "Non-scalar vector noise" begin |
| 831 | + @named sys = SDESystem([D(x) ~ x, D(y) ~ y, z ~ x + y], [x, y, 0], |
| 832 | + t, [x, y, z], [], is_scalar_noise = false) |
| 833 | + odesys = ODESystem(sys) |
| 834 | + @test odesys isa ODESystem |
| 835 | + vs = ModelingToolkit.vars(equations(odesys)) |
| 836 | + nbrownian = count( |
| 837 | + v -> ModelingToolkit.getvariabletype(v) == ModelingToolkit.BROWNIAN, vs) |
| 838 | + @test nbrownian == 1 |
| 839 | + for eq in equations(odesys) |
| 840 | + ModelingToolkit.isdiffeq(eq) || continue |
| 841 | + @test length(arguments(eq.rhs)) == 2 |
| 842 | + end |
| 843 | + end |
| 844 | + |
| 845 | + @testset "Matrix noise" begin |
| 846 | + noiseeqs = [x+y y+z z+x |
| 847 | + 2y 2z 2x |
| 848 | + z+1 x+1 y+1] |
| 849 | + @named sys = SDESystem([D(x) ~ x, D(y) ~ y, D(z) ~ z], noiseeqs, t, [x, y, z], []) |
| 850 | + odesys = ODESystem(sys) |
| 851 | + @test odesys isa ODESystem |
| 852 | + vs = ModelingToolkit.vars(equations(odesys)) |
| 853 | + nbrownian = count( |
| 854 | + v -> ModelingToolkit.getvariabletype(v) == ModelingToolkit.BROWNIAN, vs) |
| 855 | + @test nbrownian == 3 |
| 856 | + for eq in equations(odesys) |
| 857 | + @test length(arguments(eq.rhs)) == 4 |
| 858 | + end |
| 859 | + end |
| 860 | +end |
0 commit comments