| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544 |
- from sympy.core.function import (Derivative, Function, diff)
- from sympy.core.mul import Mul
- from sympy.core.numbers import (I, Rational, pi)
- from sympy.core.relational import Eq
- from sympy.core.singleton import S
- from sympy.core.symbol import (Symbol, symbols)
- from sympy.functions.elementary.hyperbolic import sinh
- from sympy.functions.elementary.miscellaneous import sqrt
- from sympy.matrices.dense import Matrix
- from sympy.core.containers import Tuple
- from sympy.functions import exp, cos, sin, log, Ci, Si, erf, erfi
- from sympy.matrices import dotprodsimp, NonSquareMatrixError
- from sympy.solvers.ode import dsolve
- from sympy.solvers.ode.ode import constant_renumber
- from sympy.solvers.ode.subscheck import checksysodesol
- from sympy.solvers.ode.systems import (_classify_linear_system, linear_ode_to_matrix,
- ODEOrderError, ODENonlinearError, _simpsol,
- _is_commutative_anti_derivative, linodesolve,
- canonical_odes, dsolve_system, _component_division,
- _eqs2dict, _dict2graph)
- from sympy.functions import airyai, airybi
- from sympy.integrals.integrals import Integral
- from sympy.simplify.ratsimp import ratsimp
- from sympy.testing.pytest import raises, slow, tooslow, XFAIL
- C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 = symbols('C0:11')
- x = symbols('x')
- f = Function('f')
- g = Function('g')
- h = Function('h')
- def test_linear_ode_to_matrix():
- f, g, h = symbols("f, g, h", cls=Function)
- t = Symbol("t")
- funcs = [f(t), g(t), h(t)]
- f1 = f(t).diff(t)
- g1 = g(t).diff(t)
- h1 = h(t).diff(t)
- f2 = f(t).diff(t, 2)
- g2 = g(t).diff(t, 2)
- h2 = h(t).diff(t, 2)
- eqs_1 = [Eq(f1, g(t)), Eq(g1, f(t))]
- sol_1 = ([Matrix([[1, 0], [0, 1]]), Matrix([[ 0, 1], [1, 0]])], Matrix([[0],[0]]))
- assert linear_ode_to_matrix(eqs_1, funcs[:-1], t, 1) == sol_1
- eqs_2 = [Eq(f1, f(t) + 2*g(t)), Eq(g1, h(t)), Eq(h1, g(t) + h(t) + f(t))]
- sol_2 = ([Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), Matrix([[1, 2, 0], [ 0, 0, 1], [1, 1, 1]])],
- Matrix([[0], [0], [0]]))
- assert linear_ode_to_matrix(eqs_2, funcs, t, 1) == sol_2
- eqs_3 = [Eq(2*f1 + 3*h1, f(t) + g(t)), Eq(4*h1 + 5*g1, f(t) + h(t)), Eq(5*f1 + 4*g1, g(t) + h(t))]
- sol_3 = ([Matrix([[2, 0, 3], [0, 5, 4], [5, 4, 0]]), Matrix([[1, 1, 0], [1, 0, 1], [0, 1, 1]])],
- Matrix([[0], [0], [0]]))
- assert linear_ode_to_matrix(eqs_3, funcs, t, 1) == sol_3
- eqs_4 = [Eq(f2 + h(t), f1 + g(t)), Eq(2*h2 + g2 + g1 + g(t), 0), Eq(3*h1, 4)]
- sol_4 = ([Matrix([[1, 0, 0], [0, 1, 2], [0, 0, 0]]), Matrix([[1, 0, 0], [0, -1, 0], [0, 0, -3]]),
- Matrix([[0, 1, -1], [0, -1, 0], [0, 0, 0]])], Matrix([[0], [0], [4]]))
- assert linear_ode_to_matrix(eqs_4, funcs, t, 2) == sol_4
- eqs_5 = [Eq(f2, g(t)), Eq(f1 + g1, f(t))]
- raises(ODEOrderError, lambda: linear_ode_to_matrix(eqs_5, funcs[:-1], t, 1))
- eqs_6 = [Eq(f1, f(t)**2), Eq(g1, f(t) + g(t))]
- raises(ODENonlinearError, lambda: linear_ode_to_matrix(eqs_6, funcs[:-1], t, 1))
- def test__classify_linear_system():
- x, y, z, w = symbols('x, y, z, w', cls=Function)
- t, k, l = symbols('t k l')
- x1 = diff(x(t), t)
- y1 = diff(y(t), t)
- z1 = diff(z(t), t)
- w1 = diff(w(t), t)
- x2 = diff(x(t), t, t)
- y2 = diff(y(t), t, t)
- funcs = [x(t), y(t)]
- funcs_2 = funcs + [z(t), w(t)]
- eqs_1 = (5 * x1 + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * t * x(t) + 3 * y(t) + t))
- assert _classify_linear_system(eqs_1, funcs, t) is None
- eqs_2 = (5 * (x1**2) + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * t * x(t) + 3 * y(t) + t))
- sol2 = {'is_implicit': True,
- 'canon_eqs': [[Eq(Derivative(x(t), t), -sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)],
- [Eq(Derivative(x(t), t), sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)]]}
- assert _classify_linear_system(eqs_2, funcs, t) == sol2
- eqs_2_1 = [Eq(Derivative(x(t), t), -sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)]
- assert _classify_linear_system(eqs_2_1, funcs, t) is None
- eqs_2_2 = [Eq(Derivative(x(t), t), sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)]
- assert _classify_linear_system(eqs_2_2, funcs, t) is None
- eqs_3 = (5 * x1 + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * x(t) + 3 * y(t)), (5 * w1 + z(t)), (z1 + w(t)))
- answer_3 = {'no_of_equation': 4,
- 'eq': (12*x(t) - 6*y(t) + 5*Derivative(x(t), t),
- -11*x(t) + 3*y(t) + 2*Derivative(y(t), t),
- z(t) + 5*Derivative(w(t), t),
- w(t) + Derivative(z(t), t)),
- 'func': [x(t), y(t), z(t), w(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1, w(t): 1},
- 'is_linear': True,
- 'is_constant': True,
- 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [Rational(12, 5), Rational(-6, 5), 0, 0],
- [Rational(-11, 2), Rational(3, 2), 0, 0],
- [0, 0, 0, 1],
- [0, 0, Rational(1, 5), 0]]),
- 'type_of_equation': 'type1',
- 'is_general': True}
- assert _classify_linear_system(eqs_3, funcs_2, t) == answer_3
- eqs_4 = (5 * x1 + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * x(t) + 3 * y(t)), (z1 - w(t)), (w1 - z(t)))
- answer_4 = {'no_of_equation': 4,
- 'eq': (12 * x(t) - 6 * y(t) + 5 * Derivative(x(t), t),
- -11 * x(t) + 3 * y(t) + 2 * Derivative(y(t), t),
- -w(t) + Derivative(z(t), t),
- -z(t) + Derivative(w(t), t)),
- 'func': [x(t), y(t), z(t), w(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1, w(t): 1},
- 'is_linear': True,
- 'is_constant': True,
- 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [Rational(12, 5), Rational(-6, 5), 0, 0],
- [Rational(-11, 2), Rational(3, 2), 0, 0],
- [0, 0, 0, -1],
- [0, 0, -1, 0]]),
- 'type_of_equation': 'type1',
- 'is_general': True}
- assert _classify_linear_system(eqs_4, funcs_2, t) == answer_4
- eqs_5 = (5*x1 + 12*x(t) - 6*(y(t)) + x2, (2*y1 - 11*x(t) + 3*y(t)), (z1 - w(t)), (w1 - z(t)))
- answer_5 = {'no_of_equation': 4, 'eq': (12*x(t) - 6*y(t) + 5*Derivative(x(t), t) + Derivative(x(t), (t, 2)),
- -11*x(t) + 3*y(t) + 2*Derivative(y(t), t), -w(t) + Derivative(z(t), t), -z(t) + Derivative(w(t),
- t)), 'func': [x(t), y(t), z(t), w(t)], 'order': {x(t): 2, y(t): 1, z(t): 1, w(t): 1}, 'is_linear':
- True, 'is_homogeneous': True, 'is_general': True, 'type_of_equation': 'type0', 'is_higher_order': True}
- assert _classify_linear_system(eqs_5, funcs_2, t) == answer_5
- eqs_6 = (Eq(x1, 3*y(t) - 11*z(t)), Eq(y1, 7*z(t) - 3*x(t)), Eq(z1, 11*x(t) - 7*y(t)))
- answer_6 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 3*y(t) - 11*z(t)), Eq(Derivative(y(t), t), -3*x(t) + 7*z(t)),
- Eq(Derivative(z(t), t), 11*x(t) - 7*y(t))), 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1},
- 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [ 0, -3, 11],
- [ 3, 0, -7],
- [-11, 7, 0]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_6, funcs_2[:-1], t) == answer_6
- eqs_7 = (Eq(x1, y(t)), Eq(y1, x(t)))
- answer_7 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), y(t)), Eq(Derivative(y(t), t), x(t))),
- 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': True,
- 'is_homogeneous': True, 'func_coeff': -Matrix([
- [ 0, -1],
- [-1, 0]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_7, funcs, t) == answer_7
- eqs_8 = (Eq(x1, 21*x(t)), Eq(y1, 17*x(t) + 3*y(t)), Eq(z1, 5*x(t) + 7*y(t) + 9*z(t)))
- answer_8 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 21*x(t)), Eq(Derivative(y(t), t), 17*x(t) + 3*y(t)),
- Eq(Derivative(z(t), t), 5*x(t) + 7*y(t) + 9*z(t))), 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1},
- 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [-21, 0, 0],
- [-17, -3, 0],
- [ -5, -7, -9]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_8, funcs_2[:-1], t) == answer_8
- eqs_9 = (Eq(x1, 4*x(t) + 5*y(t) + 2*z(t)), Eq(y1, x(t) + 13*y(t) + 9*z(t)), Eq(z1, 32*x(t) + 41*y(t) + 11*z(t)))
- answer_9 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 4*x(t) + 5*y(t) + 2*z(t)),
- Eq(Derivative(y(t), t), x(t) + 13*y(t) + 9*z(t)), Eq(Derivative(z(t), t), 32*x(t) + 41*y(t) + 11*z(t))),
- 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True,
- 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [ -4, -5, -2],
- [ -1, -13, -9],
- [-32, -41, -11]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_9, funcs_2[:-1], t) == answer_9
- eqs_10 = (Eq(3*x1, 4*5*(y(t) - z(t))), Eq(4*y1, 3*5*(z(t) - x(t))), Eq(5*z1, 3*4*(x(t) - y(t))))
- answer_10 = {'no_of_equation': 3, 'eq': (Eq(3*Derivative(x(t), t), 20*y(t) - 20*z(t)),
- Eq(4*Derivative(y(t), t), -15*x(t) + 15*z(t)), Eq(5*Derivative(z(t), t), 12*x(t) - 12*y(t))),
- 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True,
- 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [ 0, Rational(-20, 3), Rational(20, 3)],
- [Rational(15, 4), 0, Rational(-15, 4)],
- [Rational(-12, 5), Rational(12, 5), 0]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_10, funcs_2[:-1], t) == answer_10
- eq11 = (Eq(x1, 3*y(t) - 11*z(t)), Eq(y1, 7*z(t) - 3*x(t)), Eq(z1, 11*x(t) - 7*y(t)))
- sol11 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 3*y(t) - 11*z(t)), Eq(Derivative(y(t), t), -3*x(t) + 7*z(t)),
- Eq(Derivative(z(t), t), 11*x(t) - 7*y(t))), 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1},
- 'is_linear': True, 'is_constant': True, 'is_homogeneous': True, 'func_coeff': -Matrix([
- [ 0, -3, 11], [ 3, 0, -7], [-11, 7, 0]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq11, funcs_2[:-1], t) == sol11
- eq12 = (Eq(Derivative(x(t), t), y(t)), Eq(Derivative(y(t), t), x(t)))
- sol12 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), y(t)), Eq(Derivative(y(t), t), x(t))),
- 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': True,
- 'is_homogeneous': True, 'func_coeff': -Matrix([
- [0, -1],
- [-1, 0]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq12, [x(t), y(t)], t) == sol12
- eq13 = (Eq(Derivative(x(t), t), 21*x(t)), Eq(Derivative(y(t), t), 17*x(t) + 3*y(t)),
- Eq(Derivative(z(t), t), 5*x(t) + 7*y(t) + 9*z(t)))
- sol13 = {'no_of_equation': 3, 'eq': (
- Eq(Derivative(x(t), t), 21 * x(t)), Eq(Derivative(y(t), t), 17 * x(t) + 3 * y(t)),
- Eq(Derivative(z(t), t), 5 * x(t) + 7 * y(t) + 9 * z(t))), 'func': [x(t), y(t), z(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [-21, 0, 0],
- [-17, -3, 0],
- [-5, -7, -9]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq13, [x(t), y(t), z(t)], t) == sol13
- eq14 = (
- Eq(Derivative(x(t), t), 4*x(t) + 5*y(t) + 2*z(t)), Eq(Derivative(y(t), t), x(t) + 13*y(t) + 9*z(t)),
- Eq(Derivative(z(t), t), 32*x(t) + 41*y(t) + 11*z(t)))
- sol14 = {'no_of_equation': 3, 'eq': (
- Eq(Derivative(x(t), t), 4 * x(t) + 5 * y(t) + 2 * z(t)), Eq(Derivative(y(t), t), x(t) + 13 * y(t) + 9 * z(t)),
- Eq(Derivative(z(t), t), 32 * x(t) + 41 * y(t) + 11 * z(t))), 'func': [x(t), y(t), z(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [-4, -5, -2],
- [-1, -13, -9],
- [-32, -41, -11]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq14, [x(t), y(t), z(t)], t) == sol14
- eq15 = (Eq(3*Derivative(x(t), t), 20*y(t) - 20*z(t)), Eq(4*Derivative(y(t), t), -15*x(t) + 15*z(t)),
- Eq(5*Derivative(z(t), t), 12*x(t) - 12*y(t)))
- sol15 = {'no_of_equation': 3, 'eq': (
- Eq(3 * Derivative(x(t), t), 20 * y(t) - 20 * z(t)), Eq(4 * Derivative(y(t), t), -15 * x(t) + 15 * z(t)),
- Eq(5 * Derivative(z(t), t), 12 * x(t) - 12 * y(t))), 'func': [x(t), y(t), z(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [0, Rational(-20, 3), Rational(20, 3)],
- [Rational(15, 4), 0, Rational(-15, 4)],
- [Rational(-12, 5), Rational(12, 5), 0]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq15, [x(t), y(t), z(t)], t) == sol15
- # Constant coefficient homogeneous ODEs
- eq1 = (Eq(diff(x(t), t), x(t) + y(t) + 9), Eq(diff(y(t), t), 2*x(t) + 5*y(t) + 23))
- sol1 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), x(t) + y(t) + 9),
- Eq(Derivative(y(t), t), 2*x(t) + 5*y(t) + 23)), 'func': [x(t), y(t)],
- 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': False, 'is_general': True,
- 'func_coeff': -Matrix([[-1, -1], [-2, -5]]), 'rhs': Matrix([[ 9], [23]]), 'type_of_equation': 'type2'}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- # Non constant coefficient homogeneous ODEs
- eq1 = (Eq(diff(x(t), t), 5*t*x(t) + 2*y(t)), Eq(diff(y(t), t), 2*x(t) + 5*t*y(t)))
- sol1 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), 5*t*x(t) + 2*y(t)), Eq(Derivative(y(t), t), 5*t*y(t) + 2*x(t))),
- 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': False,
- 'is_homogeneous': True, 'func_coeff': -Matrix([ [-5*t, -2], [ -2, -5*t]]), 'commutative_antiderivative': Matrix([
- [5*t**2/2, 2*t], [ 2*t, 5*t**2/2]]), 'type_of_equation': 'type3', 'is_general': True}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- # Non constant coefficient non-homogeneous ODEs
- eq1 = [Eq(x1, x(t) + t*y(t) + t), Eq(y1, t*x(t) + y(t))]
- sol1 = {'no_of_equation': 2, 'eq': [Eq(Derivative(x(t), t), t*y(t) + t + x(t)), Eq(Derivative(y(t), t),
- t*x(t) + y(t))], 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True,
- 'is_constant': False, 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-1, -t],
- [-t, -1]]), 'commutative_antiderivative': Matrix([ [ t, t**2/2], [t**2/2, t]]), 'rhs':
- Matrix([ [t], [0]]), 'type_of_equation': 'type4'}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- eq2 = [Eq(x1, t*x(t) + t*y(t) + t), Eq(y1, t*x(t) + t*y(t) + cos(t))]
- sol2 = {'no_of_equation': 2, 'eq': [Eq(Derivative(x(t), t), t*x(t) + t*y(t) + t), Eq(Derivative(y(t), t),
- t*x(t) + t*y(t) + cos(t))], 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True,
- 'is_homogeneous': False, 'is_general': True, 'rhs': Matrix([ [ t], [cos(t)]]), 'func_coeff':
- Matrix([ [t, t], [t, t]]), 'is_constant': False, 'type_of_equation': 'type4',
- 'commutative_antiderivative': Matrix([ [t**2/2, t**2/2], [t**2/2, t**2/2]])}
- assert _classify_linear_system(eq2, funcs, t) == sol2
- eq3 = [Eq(x1, t*(x(t) + y(t) + z(t) + 1)), Eq(y1, t*(x(t) + y(t) + z(t))), Eq(z1, t*(x(t) + y(t) + z(t)))]
- sol3 = {'no_of_equation': 3, 'eq': [Eq(Derivative(x(t), t), t*(x(t) + y(t) + z(t) + 1)),
- Eq(Derivative(y(t), t), t*(x(t) + y(t) + z(t))), Eq(Derivative(z(t), t), t*(x(t) + y(t) + z(t)))],
- 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant':
- False, 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-t, -t, -t], [-t, -t,
- -t], [-t, -t, -t]]), 'commutative_antiderivative': Matrix([ [t**2/2, t**2/2, t**2/2], [t**2/2,
- t**2/2, t**2/2], [t**2/2, t**2/2, t**2/2]]), 'rhs': Matrix([ [t], [0], [0]]), 'type_of_equation':
- 'type4'}
- assert _classify_linear_system(eq3, funcs_2[:-1], t) == sol3
- eq4 = [Eq(x1, x(t) + y(t) + t*z(t) + 1), Eq(y1, x(t) + t*y(t) + z(t) + 10), Eq(z1, t*x(t) + y(t) + z(t) + t)]
- sol4 = {'no_of_equation': 3, 'eq': [Eq(Derivative(x(t), t), t*z(t) + x(t) + y(t) + 1), Eq(Derivative(y(t),
- t), t*y(t) + x(t) + z(t) + 10), Eq(Derivative(z(t), t), t*x(t) + t + y(t) + z(t))], 'func': [x(t),
- y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': False,
- 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-1, -1, -t], [-1, -t, -1], [-t,
- -1, -1]]), 'commutative_antiderivative': Matrix([ [ t, t, t**2/2], [ t, t**2/2,
- t], [t**2/2, t, t]]), 'rhs': Matrix([ [ 1], [10], [ t]]), 'type_of_equation': 'type4'}
- assert _classify_linear_system(eq4, funcs_2[:-1], t) == sol4
- sum_terms = t*(x(t) + y(t) + z(t) + w(t))
- eq5 = [Eq(x1, sum_terms), Eq(y1, sum_terms), Eq(z1, sum_terms + 1), Eq(w1, sum_terms)]
- sol5 = {'no_of_equation': 4, 'eq': [Eq(Derivative(x(t), t), t*(w(t) + x(t) + y(t) + z(t))),
- Eq(Derivative(y(t), t), t*(w(t) + x(t) + y(t) + z(t))), Eq(Derivative(z(t), t), t*(w(t) + x(t) +
- y(t) + z(t)) + 1), Eq(Derivative(w(t), t), t*(w(t) + x(t) + y(t) + z(t)))], 'func': [x(t), y(t),
- z(t), w(t)], 'order': {x(t): 1, y(t): 1, z(t): 1, w(t): 1}, 'is_linear': True, 'is_constant': False,
- 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-t, -t, -t, -t], [-t, -t, -t,
- -t], [-t, -t, -t, -t], [-t, -t, -t, -t]]), 'commutative_antiderivative': Matrix([ [t**2/2, t**2/2,
- t**2/2, t**2/2], [t**2/2, t**2/2, t**2/2, t**2/2], [t**2/2, t**2/2, t**2/2, t**2/2], [t**2/2,
- t**2/2, t**2/2, t**2/2]]), 'rhs': Matrix([ [0], [0], [1], [0]]), 'type_of_equation': 'type4'}
- assert _classify_linear_system(eq5, funcs_2, t) == sol5
- # Second Order
- t_ = symbols("t_")
- eq1 = (Eq(9*x(t) + 7*y(t) + 4*Derivative(x(t), t) + Derivative(x(t), (t, 2)) + 3*Derivative(y(t), t), 11*exp(I*t)),
- Eq(3*x(t) + 12*y(t) + 5*Derivative(x(t), t) + 8*Derivative(y(t), t) + Derivative(y(t), (t, 2)), 2*exp(I*t)))
- sol1 = {'no_of_equation': 2, 'eq': (Eq(9*x(t) + 7*y(t) + 4*Derivative(x(t), t) + Derivative(x(t), (t, 2)) +
- 3*Derivative(y(t), t), 11*exp(I*t)), Eq(3*x(t) + 12*y(t) + 5*Derivative(x(t), t) +
- 8*Derivative(y(t), t) + Derivative(y(t), (t, 2)), 2*exp(I*t))), 'func': [x(t), y(t)], 'order':
- {x(t): 2, y(t): 2}, 'is_linear': True, 'is_homogeneous': False, 'is_general': True, 'rhs': Matrix([
- [11*exp(I*t)], [ 2*exp(I*t)]]), 'type_of_equation': 'type0', 'is_second_order': True,
- 'is_higher_order': True}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- eq2 = (Eq((4*t**2 + 7*t + 1)**2*Derivative(x(t), (t, 2)), 5*x(t) + 35*y(t)),
- Eq((4*t**2 + 7*t + 1)**2*Derivative(y(t), (t, 2)), x(t) + 9*y(t)))
- sol2 = {'no_of_equation': 2, 'eq': (Eq((4*t**2 + 7*t + 1)**2*Derivative(x(t), (t, 2)), 5*x(t) + 35*y(t)),
- Eq((4*t**2 + 7*t + 1)**2*Derivative(y(t), (t, 2)), x(t) + 9*y(t))), 'func': [x(t), y(t)], 'order':
- {x(t): 2, y(t): 2}, 'is_linear': True, 'is_homogeneous': True, 'is_general': True,
- 'type_of_equation': 'type2', 'A0': Matrix([ [Rational(53, 4), 35], [ 1, Rational(69, 4)]]), 'g(t)': sqrt(4*t**2 + 7*t
- + 1), 'tau': sqrt(33)*log(t - sqrt(33)/8 + Rational(7, 8))/33 - sqrt(33)*log(t + sqrt(33)/8 + Rational(7, 8))/33,
- 'is_transformed': True, 't_': t_, 'is_second_order': True, 'is_higher_order': True}
- assert _classify_linear_system(eq2, funcs, t) == sol2
- eq3 = ((t*Derivative(x(t), t) - x(t))*log(t) + (t*Derivative(y(t), t) - y(t))*exp(t) + Derivative(x(t), (t, 2)),
- t**2*(t*Derivative(x(t), t) - x(t)) + t*(t*Derivative(y(t), t) - y(t)) + Derivative(y(t), (t, 2)))
- sol3 = {'no_of_equation': 2, 'eq': ((t*Derivative(x(t), t) - x(t))*log(t) + (t*Derivative(y(t), t) -
- y(t))*exp(t) + Derivative(x(t), (t, 2)), t**2*(t*Derivative(x(t), t) - x(t)) + t*(t*Derivative(y(t),
- t) - y(t)) + Derivative(y(t), (t, 2))), 'func': [x(t), y(t)], 'order': {x(t): 2, y(t): 2},
- 'is_linear': True, 'is_homogeneous': True, 'is_general': True, 'type_of_equation': 'type1', 'A1':
- Matrix([ [-t*log(t), -t*exp(t)], [ -t**3, -t**2]]), 'is_second_order': True,
- 'is_higher_order': True}
- assert _classify_linear_system(eq3, funcs, t) == sol3
- eq4 = (Eq(x2, k*x(t) - l*y1), Eq(y2, l*x1 + k*y(t)))
- sol4 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), (t, 2)), k*x(t) - l*Derivative(y(t), t)),
- Eq(Derivative(y(t), (t, 2)), k*y(t) + l*Derivative(x(t), t))), 'func': [x(t), y(t)], 'order': {x(t):
- 2, y(t): 2}, 'is_linear': True, 'is_homogeneous': True, 'is_general': True, 'type_of_equation':
- 'type0', 'is_second_order': True, 'is_higher_order': True}
- assert _classify_linear_system(eq4, funcs, t) == sol4
- # Multiple matches
- f, g = symbols("f g", cls=Function)
- y, t_ = symbols("y t_")
- funcs = [f(t), g(t)]
- eq1 = [Eq(Derivative(f(t), t)**2 - 2*Derivative(f(t), t) + 1, 4),
- Eq(-y*f(t) + Derivative(g(t), t), 0)]
- sol1 = {'is_implicit': True,
- 'canon_eqs': [[Eq(Derivative(f(t), t), -1), Eq(Derivative(g(t), t), y*f(t))],
- [Eq(Derivative(f(t), t), 3), Eq(Derivative(g(t), t), y*f(t))]]}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- raises(ValueError, lambda: _classify_linear_system(eq1, funcs[:1], t))
- eq2 = [Eq(Derivative(f(t), t), (2*f(t) + g(t) + 1)/t), Eq(Derivative(g(t), t), (f(t) + 2*g(t))/t)]
- sol2 = {'no_of_equation': 2, 'eq': [Eq(Derivative(f(t), t), (2*f(t) + g(t) + 1)/t), Eq(Derivative(g(t), t),
- (f(t) + 2*g(t))/t)], 'func': [f(t), g(t)], 'order': {f(t): 1, g(t): 1}, 'is_linear': True,
- 'is_homogeneous': False, 'is_general': True, 'rhs': Matrix([ [1], [0]]), 'func_coeff': Matrix([ [2,
- 1], [1, 2]]), 'is_constant': False, 'type_of_equation': 'type6', 't_': t_, 'tau': log(t),
- 'commutative_antiderivative': Matrix([ [2*log(t), log(t)], [ log(t), 2*log(t)]])}
- assert _classify_linear_system(eq2, funcs, t) == sol2
- eq3 = [Eq(Derivative(f(t), t), (2*f(t) + g(t))/t), Eq(Derivative(g(t), t), (f(t) + 2*g(t))/t)]
- sol3 = {'no_of_equation': 2, 'eq': [Eq(Derivative(f(t), t), (2*f(t) + g(t))/t), Eq(Derivative(g(t), t),
- (f(t) + 2*g(t))/t)], 'func': [f(t), g(t)], 'order': {f(t): 1, g(t): 1}, 'is_linear': True,
- 'is_homogeneous': True, 'is_general': True, 'func_coeff': Matrix([ [2, 1], [1, 2]]), 'is_constant':
- False, 'type_of_equation': 'type5', 't_': t_, 'rhs': Matrix([ [0], [0]]), 'tau': log(t),
- 'commutative_antiderivative': Matrix([ [2*log(t), log(t)], [ log(t), 2*log(t)]])}
- assert _classify_linear_system(eq3, funcs, t) == sol3
- def test_matrix_exp():
- from sympy.matrices.dense import Matrix, eye, zeros
- from sympy.solvers.ode.systems import matrix_exp
- t = Symbol('t')
- for n in range(1, 6+1):
- assert matrix_exp(zeros(n), t) == eye(n)
- for n in range(1, 6+1):
- A = eye(n)
- expAt = exp(t) * eye(n)
- assert matrix_exp(A, t) == expAt
- for n in range(1, 6+1):
- A = Matrix(n, n, lambda i,j: i+1 if i==j else 0)
- expAt = Matrix(n, n, lambda i,j: exp((i+1)*t) if i==j else 0)
- assert matrix_exp(A, t) == expAt
- A = Matrix([[0, 1], [-1, 0]])
- expAt = Matrix([[cos(t), sin(t)], [-sin(t), cos(t)]])
- assert matrix_exp(A, t) == expAt
- A = Matrix([[2, -5], [2, -4]])
- expAt = Matrix([
- [3*exp(-t)*sin(t) + exp(-t)*cos(t), -5*exp(-t)*sin(t)],
- [2*exp(-t)*sin(t), -3*exp(-t)*sin(t) + exp(-t)*cos(t)]
- ])
- assert matrix_exp(A, t) == expAt
- A = Matrix([[21, 17, 6], [-5, -1, -6], [4, 4, 16]])
- # TO update this.
- # expAt = Matrix([
- # [(8*t*exp(12*t) + 5*exp(12*t) - 1)*exp(4*t)/4,
- # (8*t*exp(12*t) + 5*exp(12*t) - 5)*exp(4*t)/4,
- # (exp(12*t) - 1)*exp(4*t)/2],
- # [(-8*t*exp(12*t) - exp(12*t) + 1)*exp(4*t)/4,
- # (-8*t*exp(12*t) - exp(12*t) + 5)*exp(4*t)/4,
- # (-exp(12*t) + 1)*exp(4*t)/2],
- # [4*t*exp(16*t), 4*t*exp(16*t), exp(16*t)]])
- expAt = Matrix([
- [2*t*exp(16*t) + 5*exp(16*t)/4 - exp(4*t)/4, 2*t*exp(16*t) + 5*exp(16*t)/4 - 5*exp(4*t)/4, exp(16*t)/2 - exp(4*t)/2],
- [ -2*t*exp(16*t) - exp(16*t)/4 + exp(4*t)/4, -2*t*exp(16*t) - exp(16*t)/4 + 5*exp(4*t)/4, -exp(16*t)/2 + exp(4*t)/2],
- [ 4*t*exp(16*t), 4*t*exp(16*t), exp(16*t)]
- ])
- assert matrix_exp(A, t) == expAt
- A = Matrix([[1, 1, 0, 0],
- [0, 1, 1, 0],
- [0, 0, 1, -S(1)/8],
- [0, 0, S(1)/2, S(1)/2]])
- expAt = Matrix([
- [exp(t), t*exp(t), 4*t*exp(3*t/4) + 8*t*exp(t) + 48*exp(3*t/4) - 48*exp(t),
- -2*t*exp(3*t/4) - 2*t*exp(t) - 16*exp(3*t/4) + 16*exp(t)],
- [0, exp(t), -t*exp(3*t/4) - 8*exp(3*t/4) + 8*exp(t), t*exp(3*t/4)/2 + 2*exp(3*t/4) - 2*exp(t)],
- [0, 0, t*exp(3*t/4)/4 + exp(3*t/4), -t*exp(3*t/4)/8],
- [0, 0, t*exp(3*t/4)/2, -t*exp(3*t/4)/4 + exp(3*t/4)]
- ])
- assert matrix_exp(A, t) == expAt
- A = Matrix([
- [ 0, 1, 0, 0],
- [-1, 0, 0, 0],
- [ 0, 0, 0, 1],
- [ 0, 0, -1, 0]])
- expAt = Matrix([
- [ cos(t), sin(t), 0, 0],
- [-sin(t), cos(t), 0, 0],
- [ 0, 0, cos(t), sin(t)],
- [ 0, 0, -sin(t), cos(t)]])
- assert matrix_exp(A, t) == expAt
- A = Matrix([
- [ 0, 1, 1, 0],
- [-1, 0, 0, 1],
- [ 0, 0, 0, 1],
- [ 0, 0, -1, 0]])
- expAt = Matrix([
- [ cos(t), sin(t), t*cos(t), t*sin(t)],
- [-sin(t), cos(t), -t*sin(t), t*cos(t)],
- [ 0, 0, cos(t), sin(t)],
- [ 0, 0, -sin(t), cos(t)]])
- assert matrix_exp(A, t) == expAt
- # This case is unacceptably slow right now but should be solvable...
- #a, b, c, d, e, f = symbols('a b c d e f')
- #A = Matrix([
- #[-a, b, c, d],
- #[ a, -b, e, 0],
- #[ 0, 0, -c - e - f, 0],
- #[ 0, 0, f, -d]])
- A = Matrix([[0, I], [I, 0]])
- expAt = Matrix([
- [exp(I*t)/2 + exp(-I*t)/2, exp(I*t)/2 - exp(-I*t)/2],
- [exp(I*t)/2 - exp(-I*t)/2, exp(I*t)/2 + exp(-I*t)/2]])
- assert matrix_exp(A, t) == expAt
- # Testing Errors
- M = Matrix([[1, 2, 3], [4, 5, 6], [7, 7, 7]])
- M1 = Matrix([[t, 1], [1, 1]])
- raises(ValueError, lambda: matrix_exp(M[:, :2], t))
- raises(ValueError, lambda: matrix_exp(M[:2, :], t))
- raises(ValueError, lambda: matrix_exp(M1, t))
- raises(ValueError, lambda: matrix_exp(M1[:1, :1], t))
- def test_canonical_odes():
- f, g, h = symbols('f g h', cls=Function)
- x = symbols('x')
- funcs = [f(x), g(x), h(x)]
- eqs1 = [Eq(f(x).diff(x, x), f(x) + 2*g(x)), Eq(g(x) + 1, g(x).diff(x) + f(x))]
- sol1 = [[Eq(Derivative(f(x), (x, 2)), f(x) + 2*g(x)), Eq(Derivative(g(x), x), -f(x) + g(x) + 1)]]
- assert canonical_odes(eqs1, funcs[:2], x) == sol1
- eqs2 = [Eq(f(x).diff(x), h(x).diff(x) + f(x)), Eq(g(x).diff(x)**2, f(x) + h(x)), Eq(h(x).diff(x), f(x))]
- sol2 = [[Eq(Derivative(f(x), x), 2*f(x)), Eq(Derivative(g(x), x), -sqrt(f(x) + h(x))), Eq(Derivative(h(x), x), f(x))],
- [Eq(Derivative(f(x), x), 2*f(x)), Eq(Derivative(g(x), x), sqrt(f(x) + h(x))), Eq(Derivative(h(x), x), f(x))]]
- assert canonical_odes(eqs2, funcs, x) == sol2
- def test_sysode_linear_neq_order1_type1():
- f, g, x, y, h = symbols('f g x y h', cls=Function)
- a, b, c, t = symbols('a b c t')
- eqs1 = [Eq(Derivative(x(t), t), x(t)),
- Eq(Derivative(y(t), t), y(t))]
- sol1 = [Eq(x(t), C1*exp(t)),
- Eq(y(t), C2*exp(t))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(Derivative(x(t), t), 2*x(t)),
- Eq(Derivative(y(t), t), 3*y(t))]
- sol2 = [Eq(x(t), C1*exp(2*t)),
- Eq(y(t), C2*exp(3*t))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(x(t), t), a*x(t)),
- Eq(Derivative(y(t), t), a*y(t))]
- sol3 = [Eq(x(t), C1*exp(a*t)),
- Eq(y(t), C2*exp(a*t))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- # Regression test case for issue #15474
- # https://github.com/sympy/sympy/issues/15474
- eqs4 = [Eq(Derivative(x(t), t), a*x(t)),
- Eq(Derivative(y(t), t), b*y(t))]
- sol4 = [Eq(x(t), C1*exp(a*t)),
- Eq(y(t), C2*exp(b*t))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- eqs5 = [Eq(Derivative(x(t), t), -y(t)),
- Eq(Derivative(y(t), t), x(t))]
- sol5 = [Eq(x(t), -C1*sin(t) - C2*cos(t)),
- Eq(y(t), C1*cos(t) - C2*sin(t))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- eqs6 = [Eq(Derivative(x(t), t), -2*y(t)),
- Eq(Derivative(y(t), t), 2*x(t))]
- sol6 = [Eq(x(t), -C1*sin(2*t) - C2*cos(2*t)),
- Eq(y(t), C1*cos(2*t) - C2*sin(2*t))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0])
- eqs7 = [Eq(Derivative(x(t), t), I*y(t)),
- Eq(Derivative(y(t), t), I*x(t))]
- sol7 = [Eq(x(t), -C1*exp(-I*t) + C2*exp(I*t)),
- Eq(y(t), C1*exp(-I*t) + C2*exp(I*t))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- eqs8 = [Eq(Derivative(x(t), t), -a*y(t)),
- Eq(Derivative(y(t), t), a*x(t))]
- sol8 = [Eq(x(t), -I*C1*exp(-I*a*t) + I*C2*exp(I*a*t)),
- Eq(y(t), C1*exp(-I*a*t) + C2*exp(I*a*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- eqs9 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), x(t) - y(t))]
- sol9 = [Eq(x(t), C1*(1 - sqrt(2))*exp(-sqrt(2)*t) + C2*(1 + sqrt(2))*exp(sqrt(2)*t)),
- Eq(y(t), C1*exp(-sqrt(2)*t) + C2*exp(sqrt(2)*t))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9, sol9) == (True, [0, 0])
- eqs10 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), x(t) + y(t))]
- sol10 = [Eq(x(t), -C1 + C2*exp(2*t)),
- Eq(y(t), C1 + C2*exp(2*t))]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0])
- eqs11 = [Eq(Derivative(x(t), t), 2*x(t) + y(t)),
- Eq(Derivative(y(t), t), -x(t) + 2*y(t))]
- sol11 = [Eq(x(t), C1*exp(2*t)*sin(t) + C2*exp(2*t)*cos(t)),
- Eq(y(t), C1*exp(2*t)*cos(t) - C2*exp(2*t)*sin(t))]
- assert dsolve(eqs11) == sol11
- assert checksysodesol(eqs11, sol11) == (True, [0, 0])
- eqs12 = [Eq(Derivative(x(t), t), x(t) + 2*y(t)),
- Eq(Derivative(y(t), t), 2*x(t) + y(t))]
- sol12 = [Eq(x(t), -C1*exp(-t) + C2*exp(3*t)),
- Eq(y(t), C1*exp(-t) + C2*exp(3*t))]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0])
- eqs13 = [Eq(Derivative(x(t), t), 4*x(t) + y(t)),
- Eq(Derivative(y(t), t), -x(t) + 2*y(t))]
- sol13 = [Eq(x(t), C2*t*exp(3*t) + (C1 + C2)*exp(3*t)),
- Eq(y(t), -C1*exp(3*t) - C2*t*exp(3*t))]
- assert dsolve(eqs13) == sol13
- assert checksysodesol(eqs13, sol13) == (True, [0, 0])
- eqs14 = [Eq(Derivative(x(t), t), a*y(t)),
- Eq(Derivative(y(t), t), a*x(t))]
- sol14 = [Eq(x(t), -C1*exp(-a*t) + C2*exp(a*t)),
- Eq(y(t), C1*exp(-a*t) + C2*exp(a*t))]
- assert dsolve(eqs14) == sol14
- assert checksysodesol(eqs14, sol14) == (True, [0, 0])
- eqs15 = [Eq(Derivative(x(t), t), a*y(t)),
- Eq(Derivative(y(t), t), b*x(t))]
- sol15 = [Eq(x(t), -C1*a*exp(-t*sqrt(a*b))/sqrt(a*b) + C2*a*exp(t*sqrt(a*b))/sqrt(a*b)),
- Eq(y(t), C1*exp(-t*sqrt(a*b)) + C2*exp(t*sqrt(a*b)))]
- assert dsolve(eqs15) == sol15
- assert checksysodesol(eqs15, sol15) == (True, [0, 0])
- eqs16 = [Eq(Derivative(x(t), t), a*x(t) + b*y(t)),
- Eq(Derivative(y(t), t), c*x(t))]
- sol16 = [Eq(x(t), -2*C1*b*exp(t*(a + sqrt(a**2 + 4*b*c))/2)/(a - sqrt(a**2 + 4*b*c)) - 2*C2*b*exp(t*(a -
- sqrt(a**2 + 4*b*c))/2)/(a + sqrt(a**2 + 4*b*c))),
- Eq(y(t), C1*exp(t*(a + sqrt(a**2 + 4*b*c))/2) + C2*exp(t*(a - sqrt(a**2 + 4*b*c))/2))]
- assert dsolve(eqs16) == sol16
- assert checksysodesol(eqs16, sol16) == (True, [0, 0])
- # Regression test case for issue #18562
- # https://github.com/sympy/sympy/issues/18562
- eqs17 = [Eq(Derivative(x(t), t), a*y(t) + x(t)),
- Eq(Derivative(y(t), t), a*x(t) - y(t))]
- sol17 = [Eq(x(t), C1*a*exp(t*sqrt(a**2 + 1))/(sqrt(a**2 + 1) - 1) - C2*a*exp(-t*sqrt(a**2 + 1))/(sqrt(a**2 +
- 1) + 1)),
- Eq(y(t), C1*exp(t*sqrt(a**2 + 1)) + C2*exp(-t*sqrt(a**2 + 1)))]
- assert dsolve(eqs17) == sol17
- assert checksysodesol(eqs17, sol17) == (True, [0, 0])
- eqs18 = [Eq(Derivative(x(t), t), 0),
- Eq(Derivative(y(t), t), 0)]
- sol18 = [Eq(x(t), C1),
- Eq(y(t), C2)]
- assert dsolve(eqs18) == sol18
- assert checksysodesol(eqs18, sol18) == (True, [0, 0])
- eqs19 = [Eq(Derivative(x(t), t), 2*x(t) - y(t)),
- Eq(Derivative(y(t), t), x(t))]
- sol19 = [Eq(x(t), C2*t*exp(t) + (C1 + C2)*exp(t)),
- Eq(y(t), C1*exp(t) + C2*t*exp(t))]
- assert dsolve(eqs19) == sol19
- assert checksysodesol(eqs19, sol19) == (True, [0, 0])
- eqs20 = [Eq(Derivative(x(t), t), x(t)),
- Eq(Derivative(y(t), t), x(t) + y(t))]
- sol20 = [Eq(x(t), C1*exp(t)),
- Eq(y(t), C1*t*exp(t) + C2*exp(t))]
- assert dsolve(eqs20) == sol20
- assert checksysodesol(eqs20, sol20) == (True, [0, 0])
- eqs21 = [Eq(Derivative(x(t), t), 3*x(t)),
- Eq(Derivative(y(t), t), x(t) + y(t))]
- sol21 = [Eq(x(t), 2*C1*exp(3*t)),
- Eq(y(t), C1*exp(3*t) + C2*exp(t))]
- assert dsolve(eqs21) == sol21
- assert checksysodesol(eqs21, sol21) == (True, [0, 0])
- eqs22 = [Eq(Derivative(x(t), t), 3*x(t)),
- Eq(Derivative(y(t), t), y(t))]
- sol22 = [Eq(x(t), C1*exp(3*t)),
- Eq(y(t), C2*exp(t))]
- assert dsolve(eqs22) == sol22
- assert checksysodesol(eqs22, sol22) == (True, [0, 0])
- @slow
- def test_sysode_linear_neq_order1_type1_slow():
- t = Symbol('t')
- Z0 = Function('Z0')
- Z1 = Function('Z1')
- Z2 = Function('Z2')
- Z3 = Function('Z3')
- k01, k10, k20, k21, k23, k30 = symbols('k01 k10 k20 k21 k23 k30')
- eqs1 = [Eq(Derivative(Z0(t), t), -k01*Z0(t) + k10*Z1(t) + k20*Z2(t) + k30*Z3(t)),
- Eq(Derivative(Z1(t), t), k01*Z0(t) - k10*Z1(t) + k21*Z2(t)),
- Eq(Derivative(Z2(t), t), (-k20 - k21 - k23)*Z2(t)),
- Eq(Derivative(Z3(t), t), k23*Z2(t) - k30*Z3(t))]
- sol1 = [Eq(Z0(t), C1*k10/k01 - C2*(k10 - k30)*exp(-k30*t)/(k01 + k10 - k30) - C3*(k10*(k20 + k21 - k30) -
- k20**2 - k20*(k21 + k23 - k30) + k23*k30)*exp(-t*(k20 + k21 + k23))/(k23*(-k01 - k10 + k20 + k21 +
- k23)) - C4*exp(-t*(k01 + k10))),
- Eq(Z1(t), C1 - C2*k01*exp(-k30*t)/(k01 + k10 - k30) + C3*(-k01*(k20 + k21 - k30) + k20*k21 + k21**2
- + k21*(k23 - k30))*exp(-t*(k20 + k21 + k23))/(k23*(-k01 - k10 + k20 + k21 + k23)) + C4*exp(-t*(k01 +
- k10))),
- Eq(Z2(t), -C3*(k20 + k21 + k23 - k30)*exp(-t*(k20 + k21 + k23))/k23),
- Eq(Z3(t), C2*exp(-k30*t) + C3*exp(-t*(k20 + k21 + k23)))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0, 0, 0])
- x, y, z, u, v, w = symbols('x y z u v w', cls=Function)
- k2, k3 = symbols('k2 k3')
- a_b, a_c = symbols('a_b a_c', real=True)
- eqs2 = [Eq(Derivative(z(t), t), k2*y(t)),
- Eq(Derivative(x(t), t), k3*y(t)),
- Eq(Derivative(y(t), t), (-k2 - k3)*y(t))]
- sol2 = [Eq(z(t), C1 - C2*k2*exp(-t*(k2 + k3))/(k2 + k3)),
- Eq(x(t), -C2*k3*exp(-t*(k2 + k3))/(k2 + k3) + C3),
- Eq(y(t), C2*exp(-t*(k2 + k3)))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0, 0])
- eqs3 = [4*u(t) - v(t) - 2*w(t) + Derivative(u(t), t),
- 2*u(t) + v(t) - 2*w(t) + Derivative(v(t), t),
- 5*u(t) + v(t) - 3*w(t) + Derivative(w(t), t)]
- sol3 = [Eq(u(t), C3*exp(-2*t) + (C1/2 + sqrt(3)*C2/6)*cos(sqrt(3)*t) + sin(sqrt(3)*t)*(sqrt(3)*C1/6 +
- C2*Rational(-1, 2))),
- Eq(v(t), (C1/2 + sqrt(3)*C2/6)*cos(sqrt(3)*t) + sin(sqrt(3)*t)*(sqrt(3)*C1/6 + C2*Rational(-1, 2))),
- Eq(w(t), C1*cos(sqrt(3)*t) - C2*sin(sqrt(3)*t) + C3*exp(-2*t))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0, 0])
- eqs4 = [Eq(Derivative(x(t), t), w(t)*Rational(-2, 9) + 2*x(t) + y(t) + z(t)*Rational(-8, 9)),
- Eq(Derivative(y(t), t), w(t)*Rational(4, 9) + 2*y(t) + z(t)*Rational(16, 9)),
- Eq(Derivative(z(t), t), w(t)*Rational(-2, 9) + z(t)*Rational(37, 9)),
- Eq(Derivative(w(t), t), w(t)*Rational(44, 9) + z(t)*Rational(-4, 9))]
- sol4 = [Eq(x(t), C1*exp(2*t) + C2*t*exp(2*t)),
- Eq(y(t), C2*exp(2*t) + 2*C3*exp(4*t)),
- Eq(z(t), 2*C3*exp(4*t) + C4*exp(5*t)*Rational(-1, 4)),
- Eq(w(t), C3*exp(4*t) + C4*exp(5*t))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0, 0])
- # Regression test case for issue #15574
- # https://github.com/sympy/sympy/issues/15574
- eq5 = [Eq(x(t).diff(t), x(t)), Eq(y(t).diff(t), y(t)), Eq(z(t).diff(t), z(t)), Eq(w(t).diff(t), w(t))]
- sol5 = [Eq(x(t), C1*exp(t)), Eq(y(t), C2*exp(t)), Eq(z(t), C3*exp(t)), Eq(w(t), C4*exp(t))]
- assert dsolve(eq5) == sol5
- assert checksysodesol(eq5, sol5) == (True, [0, 0, 0, 0])
- eqs6 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), y(t) + z(t)),
- Eq(Derivative(z(t), t), w(t)*Rational(-1, 8) + z(t)),
- Eq(Derivative(w(t), t), w(t)/2 + z(t)/2)]
- sol6 = [Eq(x(t), C1*exp(t) + C2*t*exp(t) + 4*C4*t*exp(t*Rational(3, 4)) + (4*C3 + 48*C4)*exp(t*Rational(3,
- 4))),
- Eq(y(t), C2*exp(t) - C4*t*exp(t*Rational(3, 4)) - (C3 + 8*C4)*exp(t*Rational(3, 4))),
- Eq(z(t), C4*t*exp(t*Rational(3, 4))/4 + (C3/4 + C4)*exp(t*Rational(3, 4))),
- Eq(w(t), C3*exp(t*Rational(3, 4))/2 + C4*t*exp(t*Rational(3, 4))/2)]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0, 0])
- # Regression test case for issue #15574
- # https://github.com/sympy/sympy/issues/15574
- eq7 = [Eq(Derivative(x(t), t), x(t)), Eq(Derivative(y(t), t), y(t)), Eq(Derivative(z(t), t), z(t)),
- Eq(Derivative(w(t), t), w(t)), Eq(Derivative(u(t), t), u(t))]
- sol7 = [Eq(x(t), C1*exp(t)), Eq(y(t), C2*exp(t)), Eq(z(t), C3*exp(t)), Eq(w(t), C4*exp(t)),
- Eq(u(t), C5*exp(t))]
- assert dsolve(eq7) == sol7
- assert checksysodesol(eq7, sol7) == (True, [0, 0, 0, 0, 0])
- eqs8 = [Eq(Derivative(x(t), t), 2*x(t) + y(t)),
- Eq(Derivative(y(t), t), 2*y(t)),
- Eq(Derivative(z(t), t), 4*z(t)),
- Eq(Derivative(w(t), t), u(t) + 5*w(t)),
- Eq(Derivative(u(t), t), 5*u(t))]
- sol8 = [Eq(x(t), C1*exp(2*t) + C2*t*exp(2*t)),
- Eq(y(t), C2*exp(2*t)),
- Eq(z(t), C3*exp(4*t)),
- Eq(w(t), C4*exp(5*t) + C5*t*exp(5*t)),
- Eq(u(t), C5*exp(5*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0, 0, 0, 0])
- # Regression test case for issue #15574
- # https://github.com/sympy/sympy/issues/15574
- eq9 = [Eq(Derivative(x(t), t), x(t)), Eq(Derivative(y(t), t), y(t)), Eq(Derivative(z(t), t), z(t))]
- sol9 = [Eq(x(t), C1*exp(t)), Eq(y(t), C2*exp(t)), Eq(z(t), C3*exp(t))]
- assert dsolve(eq9) == sol9
- assert checksysodesol(eq9, sol9) == (True, [0, 0, 0])
- # Regression test case for issue #15407
- # https://github.com/sympy/sympy/issues/15407
- eqs10 = [Eq(Derivative(x(t), t), (-a_b - a_c)*x(t)),
- Eq(Derivative(y(t), t), a_b*y(t)),
- Eq(Derivative(z(t), t), a_c*x(t))]
- sol10 = [Eq(x(t), -C1*(a_b + a_c)*exp(-t*(a_b + a_c))/a_c),
- Eq(y(t), C2*exp(a_b*t)),
- Eq(z(t), C1*exp(-t*(a_b + a_c)) + C3)]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0, 0])
- # Regression test case for issue #14312
- # https://github.com/sympy/sympy/issues/14312
- eqs11 = [Eq(Derivative(x(t), t), k3*y(t)),
- Eq(Derivative(y(t), t), (-k2 - k3)*y(t)),
- Eq(Derivative(z(t), t), k2*y(t))]
- sol11 = [Eq(x(t), C1 + C2*k3*exp(-t*(k2 + k3))/k2),
- Eq(y(t), -C2*(k2 + k3)*exp(-t*(k2 + k3))/k2),
- Eq(z(t), C2*exp(-t*(k2 + k3)) + C3)]
- assert dsolve(eqs11) == sol11
- assert checksysodesol(eqs11, sol11) == (True, [0, 0, 0])
- # Regression test case for issue #14312
- # https://github.com/sympy/sympy/issues/14312
- eqs12 = [Eq(Derivative(z(t), t), k2*y(t)),
- Eq(Derivative(x(t), t), k3*y(t)),
- Eq(Derivative(y(t), t), (-k2 - k3)*y(t))]
- sol12 = [Eq(z(t), C1 - C2*k2*exp(-t*(k2 + k3))/(k2 + k3)),
- Eq(x(t), -C2*k3*exp(-t*(k2 + k3))/(k2 + k3) + C3),
- Eq(y(t), C2*exp(-t*(k2 + k3)))]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0, 0])
- f, g, h = symbols('f, g, h', cls=Function)
- a, b, c = symbols('a, b, c')
- # Regression test case for issue #15474
- # https://github.com/sympy/sympy/issues/15474
- eqs13 = [Eq(Derivative(f(t), t), 2*f(t) + g(t)),
- Eq(Derivative(g(t), t), a*f(t))]
- sol13 = [Eq(f(t), C1*exp(t*(sqrt(a + 1) + 1))/(sqrt(a + 1) - 1) - C2*exp(-t*(sqrt(a + 1) - 1))/(sqrt(a + 1) +
- 1)),
- Eq(g(t), C1*exp(t*(sqrt(a + 1) + 1)) + C2*exp(-t*(sqrt(a + 1) - 1)))]
- assert dsolve(eqs13) == sol13
- assert checksysodesol(eqs13, sol13) == (True, [0, 0])
- eqs14 = [Eq(Derivative(f(t), t), 2*g(t) - 3*h(t)),
- Eq(Derivative(g(t), t), -2*f(t) + 4*h(t)),
- Eq(Derivative(h(t), t), 3*f(t) - 4*g(t))]
- sol14 = [Eq(f(t), 2*C1 - sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(3, 25) + C3*Rational(-8, 25)) -
- cos(sqrt(29)*t)*(C2*Rational(8, 25) + sqrt(29)*C3*Rational(3, 25))),
- Eq(g(t), C1*Rational(3, 2) + sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(4, 25) + C3*Rational(6, 25)) -
- cos(sqrt(29)*t)*(C2*Rational(6, 25) + sqrt(29)*C3*Rational(-4, 25))),
- Eq(h(t), C1 + C2*cos(sqrt(29)*t) - C3*sin(sqrt(29)*t))]
- assert dsolve(eqs14) == sol14
- assert checksysodesol(eqs14, sol14) == (True, [0, 0, 0])
- eqs15 = [Eq(2*Derivative(f(t), t), 12*g(t) - 12*h(t)),
- Eq(3*Derivative(g(t), t), -8*f(t) + 8*h(t)),
- Eq(4*Derivative(h(t), t), 6*f(t) - 6*g(t))]
- sol15 = [Eq(f(t), C1 - sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(6, 13) + C3*Rational(-16, 13)) -
- cos(sqrt(29)*t)*(C2*Rational(16, 13) + sqrt(29)*C3*Rational(6, 13))),
- Eq(g(t), C1 + sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(8, 39) + C3*Rational(16, 13)) -
- cos(sqrt(29)*t)*(C2*Rational(16, 13) + sqrt(29)*C3*Rational(-8, 39))),
- Eq(h(t), C1 + C2*cos(sqrt(29)*t) - C3*sin(sqrt(29)*t))]
- assert dsolve(eqs15) == sol15
- assert checksysodesol(eqs15, sol15) == (True, [0, 0, 0])
- eq16 = (Eq(diff(x(t), t), 21*x(t)), Eq(diff(y(t), t), 17*x(t) + 3*y(t)),
- Eq(diff(z(t), t), 5*x(t) + 7*y(t) + 9*z(t)))
- sol16 = [Eq(x(t), 216*C1*exp(21*t)/209),
- Eq(y(t), 204*C1*exp(21*t)/209 - 6*C2*exp(3*t)/7),
- Eq(z(t), C1*exp(21*t) + C2*exp(3*t) + C3*exp(9*t))]
- assert dsolve(eq16) == sol16
- assert checksysodesol(eq16, sol16) == (True, [0, 0, 0])
- eqs17 = [Eq(Derivative(x(t), t), 3*y(t) - 11*z(t)),
- Eq(Derivative(y(t), t), -3*x(t) + 7*z(t)),
- Eq(Derivative(z(t), t), 11*x(t) - 7*y(t))]
- sol17 = [Eq(x(t), C1*Rational(7, 3) - sin(sqrt(179)*t)*(sqrt(179)*C2*Rational(11, 170) + C3*Rational(-21,
- 170)) - cos(sqrt(179)*t)*(C2*Rational(21, 170) + sqrt(179)*C3*Rational(11, 170))),
- Eq(y(t), C1*Rational(11, 3) + sin(sqrt(179)*t)*(sqrt(179)*C2*Rational(7, 170) + C3*Rational(33,
- 170)) - cos(sqrt(179)*t)*(C2*Rational(33, 170) + sqrt(179)*C3*Rational(-7, 170))),
- Eq(z(t), C1 + C2*cos(sqrt(179)*t) - C3*sin(sqrt(179)*t))]
- assert dsolve(eqs17) == sol17
- assert checksysodesol(eqs17, sol17) == (True, [0, 0, 0])
- eqs18 = [Eq(3*Derivative(x(t), t), 20*y(t) - 20*z(t)),
- Eq(4*Derivative(y(t), t), -15*x(t) + 15*z(t)),
- Eq(5*Derivative(z(t), t), 12*x(t) - 12*y(t))]
- sol18 = [Eq(x(t), C1 - sin(5*sqrt(2)*t)*(sqrt(2)*C2*Rational(4, 3) - C3) - cos(5*sqrt(2)*t)*(C2 +
- sqrt(2)*C3*Rational(4, 3))),
- Eq(y(t), C1 + sin(5*sqrt(2)*t)*(sqrt(2)*C2*Rational(3, 4) + C3) - cos(5*sqrt(2)*t)*(C2 +
- sqrt(2)*C3*Rational(-3, 4))),
- Eq(z(t), C1 + C2*cos(5*sqrt(2)*t) - C3*sin(5*sqrt(2)*t))]
- assert dsolve(eqs18) == sol18
- assert checksysodesol(eqs18, sol18) == (True, [0, 0, 0])
- eqs19 = [Eq(Derivative(x(t), t), 4*x(t) - z(t)),
- Eq(Derivative(y(t), t), 2*x(t) + 2*y(t) - z(t)),
- Eq(Derivative(z(t), t), 3*x(t) + y(t))]
- sol19 = [Eq(x(t), C2*t**2*exp(2*t)/2 + t*(2*C2 + C3)*exp(2*t) + (C1 + C2 + 2*C3)*exp(2*t)),
- Eq(y(t), C2*t**2*exp(2*t)/2 + t*(2*C2 + C3)*exp(2*t) + (C1 + 2*C3)*exp(2*t)),
- Eq(z(t), C2*t**2*exp(2*t) + t*(3*C2 + 2*C3)*exp(2*t) + (2*C1 + 3*C3)*exp(2*t))]
- assert dsolve(eqs19) == sol19
- assert checksysodesol(eqs19, sol19) == (True, [0, 0, 0])
- eqs20 = [Eq(Derivative(x(t), t), 4*x(t) - y(t) - 2*z(t)),
- Eq(Derivative(y(t), t), 2*x(t) + y(t) - 2*z(t)),
- Eq(Derivative(z(t), t), 5*x(t) - 3*z(t))]
- sol20 = [Eq(x(t), C1*exp(2*t) - sin(t)*(C2*Rational(3, 5) + C3/5) - cos(t)*(C2/5 + C3*Rational(-3, 5))),
- Eq(y(t), -sin(t)*(C2*Rational(3, 5) + C3/5) - cos(t)*(C2/5 + C3*Rational(-3, 5))),
- Eq(z(t), C1*exp(2*t) - C2*sin(t) + C3*cos(t))]
- assert dsolve(eqs20) == sol20
- assert checksysodesol(eqs20, sol20) == (True, [0, 0, 0])
- eq21 = (Eq(diff(x(t), t), 9*y(t)), Eq(diff(y(t), t), 12*x(t)))
- sol21 = [Eq(x(t), -sqrt(3)*C1*exp(-6*sqrt(3)*t)/2 + sqrt(3)*C2*exp(6*sqrt(3)*t)/2),
- Eq(y(t), C1*exp(-6*sqrt(3)*t) + C2*exp(6*sqrt(3)*t))]
- assert dsolve(eq21) == sol21
- assert checksysodesol(eq21, sol21) == (True, [0, 0])
- eqs22 = [Eq(Derivative(x(t), t), 2*x(t) + 4*y(t)),
- Eq(Derivative(y(t), t), 12*x(t) + 41*y(t))]
- sol22 = [Eq(x(t), C1*(39 - sqrt(1713))*exp(t*(sqrt(1713) + 43)/2)*Rational(-1, 24) + C2*(39 +
- sqrt(1713))*exp(t*(43 - sqrt(1713))/2)*Rational(-1, 24)),
- Eq(y(t), C1*exp(t*(sqrt(1713) + 43)/2) + C2*exp(t*(43 - sqrt(1713))/2))]
- assert dsolve(eqs22) == sol22
- assert checksysodesol(eqs22, sol22) == (True, [0, 0])
- eqs23 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), -2*x(t) + 2*y(t))]
- sol23 = [Eq(x(t), (C1/4 + sqrt(7)*C2/4)*cos(sqrt(7)*t/2)*exp(t*Rational(3, 2)) +
- sin(sqrt(7)*t/2)*(sqrt(7)*C1/4 + C2*Rational(-1, 4))*exp(t*Rational(3, 2))),
- Eq(y(t), C1*cos(sqrt(7)*t/2)*exp(t*Rational(3, 2)) - C2*sin(sqrt(7)*t/2)*exp(t*Rational(3, 2)))]
- assert dsolve(eqs23) == sol23
- assert checksysodesol(eqs23, sol23) == (True, [0, 0])
- # Regression test case for issue #15474
- # https://github.com/sympy/sympy/issues/15474
- a = Symbol("a", real=True)
- eq24 = [x(t).diff(t) - a*y(t), y(t).diff(t) + a*x(t)]
- sol24 = [Eq(x(t), C1*sin(a*t) + C2*cos(a*t)), Eq(y(t), C1*cos(a*t) - C2*sin(a*t))]
- assert dsolve(eq24) == sol24
- assert checksysodesol(eq24, sol24) == (True, [0, 0])
- # Regression test case for issue #19150
- # https://github.com/sympy/sympy/issues/19150
- eqs25 = [Eq(Derivative(f(t), t), 0),
- Eq(Derivative(g(t), t), (f(t) - 2*g(t) + x(t))/(b*c)),
- Eq(Derivative(x(t), t), (g(t) - 2*x(t) + y(t))/(b*c)),
- Eq(Derivative(y(t), t), (h(t) + x(t) - 2*y(t))/(b*c)),
- Eq(Derivative(h(t), t), 0)]
- sol25 = [Eq(f(t), -3*C1 + 4*C2),
- Eq(g(t), -2*C1 + 3*C2 - C3*exp(-2*t/(b*c)) + C4*exp(-t*(sqrt(2) + 2)/(b*c)) + C5*exp(-t*(2 -
- sqrt(2))/(b*c))),
- Eq(x(t), -C1 + 2*C2 - sqrt(2)*C4*exp(-t*(sqrt(2) + 2)/(b*c)) + sqrt(2)*C5*exp(-t*(2 -
- sqrt(2))/(b*c))),
- Eq(y(t), C2 + C3*exp(-2*t/(b*c)) + C4*exp(-t*(sqrt(2) + 2)/(b*c)) + C5*exp(-t*(2 - sqrt(2))/(b*c))),
- Eq(h(t), C1)]
- assert dsolve(eqs25) == sol25
- assert checksysodesol(eqs25, sol25) == (True, [0, 0, 0, 0, 0])
- eq26 = [Eq(Derivative(f(t), t), 2*f(t)), Eq(Derivative(g(t), t), 3*f(t) + 7*g(t))]
- sol26 = [Eq(f(t), -5*C1*exp(2*t)/3), Eq(g(t), C1*exp(2*t) + C2*exp(7*t))]
- assert dsolve(eq26) == sol26
- assert checksysodesol(eq26, sol26) == (True, [0, 0])
- eq27 = [Eq(Derivative(f(t), t), -9*I*f(t) - 4*g(t)), Eq(Derivative(g(t), t), -4*I*g(t))]
- sol27 = [Eq(f(t), 4*I*C1*exp(-4*I*t)/5 + C2*exp(-9*I*t)), Eq(g(t), C1*exp(-4*I*t))]
- assert dsolve(eq27) == sol27
- assert checksysodesol(eq27, sol27) == (True, [0, 0])
- eq28 = [Eq(Derivative(f(t), t), -9*I*f(t)), Eq(Derivative(g(t), t), -4*I*g(t))]
- sol28 = [Eq(f(t), C1*exp(-9*I*t)), Eq(g(t), C2*exp(-4*I*t))]
- assert dsolve(eq28) == sol28
- assert checksysodesol(eq28, sol28) == (True, [0, 0])
- eq29 = [Eq(Derivative(f(t), t), 0), Eq(Derivative(g(t), t), 0)]
- sol29 = [Eq(f(t), C1), Eq(g(t), C2)]
- assert dsolve(eq29) == sol29
- assert checksysodesol(eq29, sol29) == (True, [0, 0])
- eq30 = [Eq(Derivative(f(t), t), f(t)), Eq(Derivative(g(t), t), 0)]
- sol30 = [Eq(f(t), C1*exp(t)), Eq(g(t), C2)]
- assert dsolve(eq30) == sol30
- assert checksysodesol(eq30, sol30) == (True, [0, 0])
- eq31 = [Eq(Derivative(f(t), t), g(t)), Eq(Derivative(g(t), t), 0)]
- sol31 = [Eq(f(t), C1 + C2*t), Eq(g(t), C2)]
- assert dsolve(eq31) == sol31
- assert checksysodesol(eq31, sol31) == (True, [0, 0])
- eq32 = [Eq(Derivative(f(t), t), 0), Eq(Derivative(g(t), t), f(t))]
- sol32 = [Eq(f(t), C1), Eq(g(t), C1*t + C2)]
- assert dsolve(eq32) == sol32
- assert checksysodesol(eq32, sol32) == (True, [0, 0])
- eq33 = [Eq(Derivative(f(t), t), 0), Eq(Derivative(g(t), t), g(t))]
- sol33 = [Eq(f(t), C1), Eq(g(t), C2*exp(t))]
- assert dsolve(eq33) == sol33
- assert checksysodesol(eq33, sol33) == (True, [0, 0])
- eq34 = [Eq(Derivative(f(t), t), f(t)), Eq(Derivative(g(t), t), I*g(t))]
- sol34 = [Eq(f(t), C1*exp(t)), Eq(g(t), C2*exp(I*t))]
- assert dsolve(eq34) == sol34
- assert checksysodesol(eq34, sol34) == (True, [0, 0])
- eq35 = [Eq(Derivative(f(t), t), I*f(t)), Eq(Derivative(g(t), t), -I*g(t))]
- sol35 = [Eq(f(t), C1*exp(I*t)), Eq(g(t), C2*exp(-I*t))]
- assert dsolve(eq35) == sol35
- assert checksysodesol(eq35, sol35) == (True, [0, 0])
- eq36 = [Eq(Derivative(f(t), t), I*g(t)), Eq(Derivative(g(t), t), 0)]
- sol36 = [Eq(f(t), I*C1 + I*C2*t), Eq(g(t), C2)]
- assert dsolve(eq36) == sol36
- assert checksysodesol(eq36, sol36) == (True, [0, 0])
- eq37 = [Eq(Derivative(f(t), t), I*g(t)), Eq(Derivative(g(t), t), I*f(t))]
- sol37 = [Eq(f(t), -C1*exp(-I*t) + C2*exp(I*t)), Eq(g(t), C1*exp(-I*t) + C2*exp(I*t))]
- assert dsolve(eq37) == sol37
- assert checksysodesol(eq37, sol37) == (True, [0, 0])
- # Multiple systems
- eq1 = [Eq(Derivative(f(t), t)**2, g(t)**2), Eq(-f(t) + Derivative(g(t), t), 0)]
- sol1 = [[Eq(f(t), -C1*sin(t) - C2*cos(t)),
- Eq(g(t), C1*cos(t) - C2*sin(t))],
- [Eq(f(t), -C1*exp(-t) + C2*exp(t)),
- Eq(g(t), C1*exp(-t) + C2*exp(t))]]
- assert dsolve(eq1) == sol1
- for sol in sol1:
- assert checksysodesol(eq1, sol) == (True, [0, 0])
- def test_sysode_linear_neq_order1_type2():
- f, g, h, k = symbols('f g h k', cls=Function)
- x, t, a, b, c, d, y = symbols('x t a b c d y')
- k1, k2 = symbols('k1 k2')
- eqs1 = [Eq(Derivative(f(x), x), f(x) + g(x) + 5),
- Eq(Derivative(g(x), x), -f(x) - g(x) + 7)]
- sol1 = [Eq(f(x), C1 + C2 + 6*x**2 + x*(C2 + 5)),
- Eq(g(x), -C1 - 6*x**2 - x*(C2 - 7))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(Derivative(f(x), x), f(x) + g(x) + 5),
- Eq(Derivative(g(x), x), f(x) + g(x) + 7)]
- sol2 = [Eq(f(x), -C1 + C2*exp(2*x) - x - 3),
- Eq(g(x), C1 + C2*exp(2*x) + x - 3)]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(f(x), x), f(x) + 5),
- Eq(Derivative(g(x), x), f(x) + 7)]
- sol3 = [Eq(f(x), C1*exp(x) - 5),
- Eq(g(x), C1*exp(x) + C2 + 2*x - 5)]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- eqs4 = [Eq(Derivative(f(x), x), f(x) + exp(x)),
- Eq(Derivative(g(x), x), x*exp(x) + f(x) + g(x))]
- sol4 = [Eq(f(x), C1*exp(x) + x*exp(x)),
- Eq(g(x), C1*x*exp(x) + C2*exp(x) + x**2*exp(x))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- eqs5 = [Eq(Derivative(f(x), x), 5*x + f(x) + g(x)),
- Eq(Derivative(g(x), x), f(x) - g(x))]
- sol5 = [Eq(f(x), C1*(1 + sqrt(2))*exp(sqrt(2)*x) + C2*(1 - sqrt(2))*exp(-sqrt(2)*x) + x*Rational(-5, 2) +
- Rational(-5, 2)),
- Eq(g(x), C1*exp(sqrt(2)*x) + C2*exp(-sqrt(2)*x) + x*Rational(-5, 2))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- eqs6 = [Eq(Derivative(f(x), x), -9*f(x) - 4*g(x)),
- Eq(Derivative(g(x), x), -4*g(x)),
- Eq(Derivative(h(x), x), h(x) + exp(x))]
- sol6 = [Eq(f(x), C2*exp(-4*x)*Rational(-4, 5) + C1*exp(-9*x)),
- Eq(g(x), C2*exp(-4*x)),
- Eq(h(x), C3*exp(x) + x*exp(x))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0])
- # Regression test case for issue #8859
- # https://github.com/sympy/sympy/issues/8859
- eqs7 = [Eq(Derivative(f(t), t), 3*t + f(t)),
- Eq(Derivative(g(t), t), g(t))]
- sol7 = [Eq(f(t), C1*exp(t) - 3*t - 3),
- Eq(g(t), C2*exp(t))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- # Regression test case for issue #8567
- # https://github.com/sympy/sympy/issues/8567
- eqs8 = [Eq(Derivative(f(t), t), f(t) + 2*g(t)),
- Eq(Derivative(g(t), t), -2*f(t) + g(t) + 2*exp(t))]
- sol8 = [Eq(f(t), C1*exp(t)*sin(2*t) + C2*exp(t)*cos(2*t)
- + exp(t)*sin(2*t)**2 + exp(t)*cos(2*t)**2),
- Eq(g(t), C1*exp(t)*cos(2*t) - C2*exp(t)*sin(2*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- # Regression test case for issue #19150
- # https://github.com/sympy/sympy/issues/19150
- eqs9 = [Eq(Derivative(f(t), t), (c - 2*f(t) + g(t))/(a*b)),
- Eq(Derivative(g(t), t), (f(t) - 2*g(t) + h(t))/(a*b)),
- Eq(Derivative(h(t), t), (d + g(t) - 2*h(t))/(a*b))]
- sol9 = [Eq(f(t), -C1*exp(-2*t/(a*b)) + C2*exp(-t*(sqrt(2) + 2)/(a*b)) + C3*exp(-t*(2 - sqrt(2))/(a*b)) +
- Mul(Rational(1, 4), 3*c + d, evaluate=False)),
- Eq(g(t), -sqrt(2)*C2*exp(-t*(sqrt(2) + 2)/(a*b)) + sqrt(2)*C3*exp(-t*(2 - sqrt(2))/(a*b)) +
- Mul(Rational(1, 2), c + d, evaluate=False)),
- Eq(h(t), C1*exp(-2*t/(a*b)) + C2*exp(-t*(sqrt(2) + 2)/(a*b)) + C3*exp(-t*(2 - sqrt(2))/(a*b)) +
- Mul(Rational(1, 4), c + 3*d, evaluate=False))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9, sol9) == (True, [0, 0, 0])
- # Regression test case for issue #16635
- # https://github.com/sympy/sympy/issues/16635
- eqs10 = [Eq(Derivative(f(t), t), 15*t + f(t) - g(t) - 10),
- Eq(Derivative(g(t), t), -15*t + f(t) - g(t) - 5)]
- sol10 = [Eq(f(t), C1 + C2 + 5*t**3 + 5*t**2 + t*(C2 - 10)),
- Eq(g(t), C1 + 5*t**3 - 10*t**2 + t*(C2 - 5))]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0])
- # Multiple solutions
- eqs11 = [Eq(Derivative(f(t), t)**2 - 2*Derivative(f(t), t) + 1, 4),
- Eq(-y*f(t) + Derivative(g(t), t), 0)]
- sol11 = [[Eq(f(t), C1 - t), Eq(g(t), C1*t*y + C2*y + t**2*y*Rational(-1, 2))],
- [Eq(f(t), C1 + 3*t), Eq(g(t), C1*t*y + C2*y + t**2*y*Rational(3, 2))]]
- assert dsolve(eqs11) == sol11
- for s11 in sol11:
- assert checksysodesol(eqs11, s11) == (True, [0, 0])
- # test case for issue #19831
- # https://github.com/sympy/sympy/issues/19831
- n = symbols('n', positive=True)
- x0 = symbols('x_0')
- t0 = symbols('t_0')
- x_0 = symbols('x_0')
- t_0 = symbols('t_0')
- t = symbols('t')
- x = Function('x')
- y = Function('y')
- T = symbols('T')
- eqs12 = [Eq(Derivative(y(t), t), x(t)),
- Eq(Derivative(x(t), t), n*(y(t) + 1))]
- sol12 = [Eq(y(t), C1*exp(sqrt(n)*t)*n**Rational(-1, 2) - C2*exp(-sqrt(n)*t)*n**Rational(-1, 2) - 1),
- Eq(x(t), C1*exp(sqrt(n)*t) + C2*exp(-sqrt(n)*t))]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0])
- sol12b = [
- Eq(y(t), (T*exp(-sqrt(n)*t_0)/2 + exp(-sqrt(n)*t_0)/2 +
- x_0*exp(-sqrt(n)*t_0)/(2*sqrt(n)))*exp(sqrt(n)*t) +
- (T*exp(sqrt(n)*t_0)/2 + exp(sqrt(n)*t_0)/2 -
- x_0*exp(sqrt(n)*t_0)/(2*sqrt(n)))*exp(-sqrt(n)*t) - 1),
- Eq(x(t), (T*sqrt(n)*exp(-sqrt(n)*t_0)/2 + sqrt(n)*exp(-sqrt(n)*t_0)/2
- + x_0*exp(-sqrt(n)*t_0)/2)*exp(sqrt(n)*t)
- - (T*sqrt(n)*exp(sqrt(n)*t_0)/2 + sqrt(n)*exp(sqrt(n)*t_0)/2 -
- x_0*exp(sqrt(n)*t_0)/2)*exp(-sqrt(n)*t))
- ]
- assert dsolve(eqs12, ics={y(t0): T, x(t0): x0}) == sol12b
- assert checksysodesol(eqs12, sol12b) == (True, [0, 0])
- #Test cases added for the issue 19763
- #https://github.com/sympy/sympy/issues/19763
- eq13 = [Eq(Derivative(f(t), t), f(t) + g(t) + 9),
- Eq(Derivative(g(t), t), 2*f(t) + 5*g(t) + 23)]
- sol13 = [Eq(f(t), -C1*(2 + sqrt(6))*exp(t*(3 - sqrt(6)))/2 - C2*(2 - sqrt(6))*exp(t*(sqrt(6) + 3))/2 -
- Rational(22,3)),
- Eq(g(t), C1*exp(t*(3 - sqrt(6))) + C2*exp(t*(sqrt(6) + 3)) - Rational(5,3))]
- assert dsolve(eq13) == sol13
- assert checksysodesol(eq13, sol13) == (True, [0, 0])
- eq14 = [Eq(Derivative(f(t), t), f(t) + g(t) + 81),
- Eq(Derivative(g(t), t), -2*f(t) + g(t) + 23)]
- sol14 = [Eq(f(t), sqrt(2)*C1*exp(t)*sin(sqrt(2)*t)/2
- + sqrt(2)*C2*exp(t)*cos(sqrt(2)*t)/2
- - 58*sin(sqrt(2)*t)**2/3 - 58*cos(sqrt(2)*t)**2/3),
- Eq(g(t), C1*exp(t)*cos(sqrt(2)*t) - C2*exp(t)*sin(sqrt(2)*t)
- - 185*sin(sqrt(2)*t)**2/3 - 185*cos(sqrt(2)*t)**2/3)]
- assert dsolve(eq14) == sol14
- assert checksysodesol(eq14, sol14) == (True, [0,0])
- eq15 = [Eq(Derivative(f(t), t), f(t) + 2*g(t) + k1),
- Eq(Derivative(g(t), t), 3*f(t) + 4*g(t) + k2)]
- sol15 = [Eq(f(t), -C1*(3 - sqrt(33))*exp(t*(5 + sqrt(33))/2)/6 -
- C2*(3 + sqrt(33))*exp(t*(5 - sqrt(33))/2)/6 + 2*k1 - k2),
- Eq(g(t), C1*exp(t*(5 + sqrt(33))/2) + C2*exp(t*(5 - sqrt(33))/2) -
- Mul(Rational(1,2), 3*k1 - k2, evaluate = False))]
- assert dsolve(eq15) == sol15
- assert checksysodesol(eq15, sol15) == (True, [0,0])
- eq16 = [Eq(Derivative(f(t), t), k1),
- Eq(Derivative(g(t), t), k2)]
- sol16 = [Eq(f(t), C1 + k1*t),
- Eq(g(t), C2 + k2*t)]
- assert dsolve(eq16) == sol16
- assert checksysodesol(eq16, sol16) == (True, [0,0])
- eq17 = [Eq(Derivative(f(t), t), 0),
- Eq(Derivative(g(t), t), c*f(t) + k2)]
- sol17 = [Eq(f(t), C1),
- Eq(g(t), C2*c + t*(C1*c + k2))]
- assert dsolve(eq17) == sol17
- assert checksysodesol(eq17 , sol17) == (True , [0,0])
- eq18 = [Eq(Derivative(f(t), t), k1),
- Eq(Derivative(g(t), t), f(t) + k2)]
- sol18 = [Eq(f(t), C1 + k1*t),
- Eq(g(t), C2 + k1*t**2/2 + t*(C1 + k2))]
- assert dsolve(eq18) == sol18
- assert checksysodesol(eq18 , sol18) == (True , [0,0])
- eq19 = [Eq(Derivative(f(t), t), k1),
- Eq(Derivative(g(t), t), f(t) + 2*g(t) + k2)]
- sol19 = [Eq(f(t), -2*C1 + k1*t),
- Eq(g(t), C1 + C2*exp(2*t) - k1*t/2 - Mul(Rational(1,4), k1 + 2*k2 , evaluate = False))]
- assert dsolve(eq19) == sol19
- assert checksysodesol(eq19 , sol19) == (True , [0,0])
- eq20 = [Eq(diff(f(t), t), f(t) + k1),
- Eq(diff(g(t), t), k2)]
- sol20 = [Eq(f(t), C1*exp(t) - k1),
- Eq(g(t), C2 + k2*t)]
- assert dsolve(eq20) == sol20
- assert checksysodesol(eq20 , sol20) == (True , [0,0])
- eq21 = [Eq(diff(f(t), t), g(t) + k1),
- Eq(diff(g(t), t), 0)]
- sol21 = [Eq(f(t), C1 + t*(C2 + k1)),
- Eq(g(t), C2)]
- assert dsolve(eq21) == sol21
- assert checksysodesol(eq21 , sol21) == (True , [0,0])
- eq22 = [Eq(Derivative(f(t), t), f(t) + 2*g(t) + k1),
- Eq(Derivative(g(t), t), k2)]
- sol22 = [Eq(f(t), -2*C1 + C2*exp(t) - k1 - 2*k2*t - 2*k2),
- Eq(g(t), C1 + k2*t)]
- assert dsolve(eq22) == sol22
- assert checksysodesol(eq22 , sol22) == (True , [0,0])
- eq23 = [Eq(Derivative(f(t), t), g(t) + k1),
- Eq(Derivative(g(t), t), 2*g(t) + k2)]
- sol23 = [Eq(f(t), C1 + C2*exp(2*t)/2 - k2/4 + t*(2*k1 - k2)/2),
- Eq(g(t), C2*exp(2*t) - k2/2)]
- assert dsolve(eq23) == sol23
- assert checksysodesol(eq23 , sol23) == (True , [0,0])
- eq24 = [Eq(Derivative(f(t), t), f(t) + k1),
- Eq(Derivative(g(t), t), 2*f(t) + k2)]
- sol24 = [Eq(f(t), C1*exp(t)/2 - k1),
- Eq(g(t), C1*exp(t) + C2 - 2*k1 - t*(2*k1 - k2))]
- assert dsolve(eq24) == sol24
- assert checksysodesol(eq24 , sol24) == (True , [0,0])
- eq25 = [Eq(Derivative(f(t), t), f(t) + 2*g(t) + k1),
- Eq(Derivative(g(t), t), 3*f(t) + 6*g(t) + k2)]
- sol25 = [Eq(f(t), -2*C1 + C2*exp(7*t)/3 + 2*t*(3*k1 - k2)/7 -
- Mul(Rational(1,49), k1 + 2*k2 , evaluate = False)),
- Eq(g(t), C1 + C2*exp(7*t) - t*(3*k1 - k2)/7 -
- Mul(Rational(3,49), k1 + 2*k2 , evaluate = False))]
- assert dsolve(eq25) == sol25
- assert checksysodesol(eq25 , sol25) == (True , [0,0])
- eq26 = [Eq(Derivative(f(t), t), 2*f(t) - g(t) + k1),
- Eq(Derivative(g(t), t), 4*f(t) - 2*g(t) + 2*k1)]
- sol26 = [Eq(f(t), C1 + 2*C2 + t*(2*C1 + k1)),
- Eq(g(t), 4*C2 + t*(4*C1 + 2*k1))]
- assert dsolve(eq26) == sol26
- assert checksysodesol(eq26 , sol26) == (True , [0,0])
- # Test Case added for issue #22715
- # https://github.com/sympy/sympy/issues/22715
- eq27 = [Eq(diff(x(t),t),-1*y(t)+10), Eq(diff(y(t),t),5*x(t)-2*y(t)+3)]
- sol27 = [Eq(x(t), (C1/5 - 2*C2/5)*exp(-t)*cos(2*t)
- - (2*C1/5 + C2/5)*exp(-t)*sin(2*t)
- + 17*sin(2*t)**2/5 + 17*cos(2*t)**2/5),
- Eq(y(t), C1*exp(-t)*cos(2*t) - C2*exp(-t)*sin(2*t)
- + 10*sin(2*t)**2 + 10*cos(2*t)**2)]
- assert dsolve(eq27) == sol27
- assert checksysodesol(eq27 , sol27) == (True , [0,0])
- def test_sysode_linear_neq_order1_type3():
- f, g, h, k, x0 , y0 = symbols('f g h k x0 y0', cls=Function)
- x, t, a = symbols('x t a')
- r = symbols('r', real=True)
- eqs1 = [Eq(Derivative(f(r), r), r*g(r) + f(r)),
- Eq(Derivative(g(r), r), -r*f(r) + g(r))]
- sol1 = [Eq(f(r), C1*exp(r)*sin(r**2/2) + C2*exp(r)*cos(r**2/2)),
- Eq(g(r), C1*exp(r)*cos(r**2/2) - C2*exp(r)*sin(r**2/2))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(Derivative(f(x), x), x**2*g(x) + x*f(x)),
- Eq(Derivative(g(x), x), 2*x**2*f(x) + (3*x**2 + x)*g(x))]
- sol2 = [Eq(f(x), (sqrt(17)*C1/17 + C2*(17 - 3*sqrt(17))/34)*exp(x**3*(3 + sqrt(17))/6 + x**2/2) -
- exp(x**3*(3 - sqrt(17))/6 + x**2/2)*(sqrt(17)*C1/17 + C2*(3*sqrt(17) + 17)*Rational(-1, 34))),
- Eq(g(x), exp(x**3*(3 - sqrt(17))/6 + x**2/2)*(C1*(17 - 3*sqrt(17))/34 + sqrt(17)*C2*Rational(-2,
- 17)) + exp(x**3*(3 + sqrt(17))/6 + x**2/2)*(C1*(3*sqrt(17) + 17)/34 + sqrt(17)*C2*Rational(2, 17)))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(f(x).diff(x), x*f(x) + g(x)),
- Eq(g(x).diff(x), -f(x) + x*g(x))]
- sol3 = [Eq(f(x), (C1/2 + I*C2/2)*exp(x**2/2 - I*x) + exp(x**2/2 + I*x)*(C1/2 + I*C2*Rational(-1, 2))),
- Eq(g(x), (I*C1/2 + C2/2)*exp(x**2/2 + I*x) - exp(x**2/2 - I*x)*(I*C1/2 + C2*Rational(-1, 2)))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- eqs4 = [Eq(f(x).diff(x), x*(f(x) + g(x) + h(x))), Eq(g(x).diff(x), x*(f(x) + g(x) + h(x))),
- Eq(h(x).diff(x), x*(f(x) + g(x) + h(x)))]
- sol4 = [Eq(f(x), -C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2)),
- Eq(g(x), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2)),
- Eq(h(x), -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0])
- eqs5 = [Eq(f(x).diff(x), x**2*(f(x) + g(x) + h(x))), Eq(g(x).diff(x), x**2*(f(x) + g(x) + h(x))),
- Eq(h(x).diff(x), x**2*(f(x) + g(x) + h(x)))]
- sol5 = [Eq(f(x), -C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 + C3/3)*exp(x**3)),
- Eq(g(x), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(x**3)),
- Eq(h(x), -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(x**3))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0, 0])
- eqs6 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x) + k(x))),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x) + k(x))),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x) + k(x))),
- Eq(Derivative(k(x), x), x*(f(x) + g(x) + h(x) + k(x)))]
- sol6 = [Eq(f(x), -C1/4 - C2/4 - C3/4 + 3*C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2)),
- Eq(g(x), 3*C1/4 - C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2)),
- Eq(h(x), -C1/4 + 3*C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2)),
- Eq(k(x), -C1/4 - C2/4 + 3*C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0, 0])
- y = symbols("y", real=True)
- eqs7 = [Eq(Derivative(f(y), y), y*f(y) + g(y)),
- Eq(Derivative(g(y), y), y*g(y) - f(y))]
- sol7 = [Eq(f(y), C1*exp(y**2/2)*sin(y) + C2*exp(y**2/2)*cos(y)),
- Eq(g(y), C1*exp(y**2/2)*cos(y) - C2*exp(y**2/2)*sin(y))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- #Test cases added for the issue 19763
- #https://github.com/sympy/sympy/issues/19763
- eqs8 = [Eq(Derivative(f(t), t), 5*t*f(t) + 2*h(t)),
- Eq(Derivative(h(t), t), 2*f(t) + 5*t*h(t))]
- sol8 = [Eq(f(t), Mul(-1, (C1/2 - C2/2), evaluate = False)*exp(5*t**2/2 - 2*t) + (C1/2 + C2/2)*exp(5*t**2/2 + 2*t)),
- Eq(h(t), (C1/2 - C2/2)*exp(5*t**2/2 - 2*t) + (C1/2 + C2/2)*exp(5*t**2/2 + 2*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- eqs9 = [Eq(diff(f(t), t), 5*t*f(t) + t**2*g(t)),
- Eq(diff(g(t), t), -t**2*f(t) + 5*t*g(t))]
- sol9 = [Eq(f(t), (C1/2 - I*C2/2)*exp(I*t**3/3 + 5*t**2/2) + (C1/2 + I*C2/2)*exp(-I*t**3/3 + 5*t**2/2)),
- Eq(g(t), Mul(-1, (I*C1/2 - C2/2) , evaluate = False)*exp(-I*t**3/3 + 5*t**2/2) + (I*C1/2 + C2/2)*exp(I*t**3/3 + 5*t**2/2))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9 , sol9) == (True , [0,0])
- eqs10 = [Eq(diff(f(t), t), t**2*g(t) + 5*t*f(t)),
- Eq(diff(g(t), t), -t**2*f(t) + (9*t**2 + 5*t)*g(t))]
- sol10 = [Eq(f(t), (C1*(77 - 9*sqrt(77))/154 + sqrt(77)*C2/77)*exp(t**3*(sqrt(77) + 9)/6 + 5*t**2/2) + (C1*(77 + 9*sqrt(77))/154 - sqrt(77)*C2/77)*exp(t**3*(9 - sqrt(77))/6 + 5*t**2/2)),
- Eq(g(t), (sqrt(77)*C1/77 + C2*(77 - 9*sqrt(77))/154)*exp(t**3*(9 - sqrt(77))/6 + 5*t**2/2) - (sqrt(77)*C1/77 - C2*(77 + 9*sqrt(77))/154)*exp(t**3*(sqrt(77) + 9)/6 + 5*t**2/2))]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10 , sol10) == (True , [0,0])
- eqs11 = [Eq(diff(f(t), t), 5*t*f(t) + t**2*g(t)),
- Eq(diff(g(t), t), (1-t**2)*f(t) + (5*t + 9*t**2)*g(t))]
- sol11 = [Eq(f(t), C1*x0(t) + C2*x0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t)),
- Eq(g(t), C1*y0(t) + C2*(y0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t) + exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)))]
- assert dsolve(eqs11) == sol11
- @slow
- def test_sysode_linear_neq_order1_type4():
- f, g, h, k = symbols('f g h k', cls=Function)
- x, t, a = symbols('x t a')
- r = symbols('r', real=True)
- eqs1 = [Eq(diff(f(r), r), f(r) + r*g(r) + r**2), Eq(diff(g(r), r), -r*f(r) + g(r) + r)]
- sol1 = [Eq(f(r), C1*exp(r)*sin(r**2/2) + C2*exp(r)*cos(r**2/2) + exp(r)*sin(r**2/2)*Integral(r**2*exp(-r)*sin(r**2/2) +
- r*exp(-r)*cos(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r**2*exp(-r)*cos(r**2/2) - r*exp(-r)*sin(r**2/2), r)),
- Eq(g(r), C1*exp(r)*cos(r**2/2) - C2*exp(r)*sin(r**2/2) - exp(r)*sin(r**2/2)*Integral(r**2*exp(-r)*cos(r**2/2) -
- r*exp(-r)*sin(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r**2*exp(-r)*sin(r**2/2) + r*exp(-r)*cos(r**2/2), r))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(diff(f(r), r), f(r) + r*g(r) + r), Eq(diff(g(r), r), -r*f(r) + g(r) + log(r))]
- sol2 = [Eq(f(r), C1*exp(r)*sin(r**2/2) + C2*exp(r)*cos(r**2/2) + exp(r)*sin(r**2/2)*Integral(r*exp(-r)*sin(r**2/2) +
- exp(-r)*log(r)*cos(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r*exp(-r)*cos(r**2/2) - exp(-r)*log(r)*sin(
- r**2/2), r)),
- Eq(g(r), C1*exp(r)*cos(r**2/2) - C2*exp(r)*sin(r**2/2) - exp(r)*sin(r**2/2)*Integral(r*exp(-r)*cos(r**2/2) -
- exp(-r)*log(r)*sin(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r*exp(-r)*sin(r**2/2) + exp(-r)*log(r)*cos(
- r**2/2), r))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs2, simplify=False, doit=False) == [sol2]
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x)) + x),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x)) + x),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x)) + 1)]
- sol3 = [Eq(f(x), C1*Rational(-1, 3) + C2*Rational(-1, 3) + C3*Rational(2, 3) + x**2/6 + x*Rational(-1, 3) +
- (C1/3 + C2/3 + C3/3)*exp(x**2*Rational(3, 2)) +
- sqrt(6)*sqrt(pi)*erf(sqrt(6)*x/2)*exp(x**2*Rational(3, 2))/18 + Rational(-2, 9)),
- Eq(g(x), C1*Rational(2, 3) + C2*Rational(-1, 3) + C3*Rational(-1, 3) + x**2/6 + x*Rational(-1, 3) +
- (C1/3 + C2/3 + C3/3)*exp(x**2*Rational(3, 2)) +
- sqrt(6)*sqrt(pi)*erf(sqrt(6)*x/2)*exp(x**2*Rational(3, 2))/18 + Rational(-2, 9)),
- Eq(h(x), C1*Rational(-1, 3) + C2*Rational(2, 3) + C3*Rational(-1, 3) + x**2*Rational(-1, 3) +
- x*Rational(2, 3) + (C1/3 + C2/3 + C3/3)*exp(x**2*Rational(3, 2)) +
- sqrt(6)*sqrt(pi)*erf(sqrt(6)*x/2)*exp(x**2*Rational(3, 2))/18 + Rational(-2, 9))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0, 0])
- eqs4 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x)) + sin(x)),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x)) + sin(x)),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x)) + sin(x))]
- sol4 = [Eq(f(x), C1*Rational(-1, 3) + C2*Rational(-1, 3) + C3*Rational(2, 3) + (C1/3 + C2/3 +
- C3/3)*exp(x**2*Rational(3, 2)) + Integral(sin(x)*exp(x**2*Rational(-3, 2)), x)*exp(x**2*Rational(3,
- 2))),
- Eq(g(x), C1*Rational(2, 3) + C2*Rational(-1, 3) + C3*Rational(-1, 3) + (C1/3 + C2/3 +
- C3/3)*exp(x**2*Rational(3, 2)) + Integral(sin(x)*exp(x**2*Rational(-3, 2)), x)*exp(x**2*Rational(3,
- 2))),
- Eq(h(x), C1*Rational(-1, 3) + C2*Rational(2, 3) + C3*Rational(-1, 3) + (C1/3 + C2/3 +
- C3/3)*exp(x**2*Rational(3, 2)) + Integral(sin(x)*exp(x**2*Rational(-3, 2)), x)*exp(x**2*Rational(3,
- 2)))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0])
- eqs5 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(k(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1))]
- sol5 = [Eq(f(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(3, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4)),
- Eq(g(x), C1*Rational(3, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4)),
- Eq(h(x), C1*Rational(-1, 4) + C2*Rational(3, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4)),
- Eq(k(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(3, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0, 0, 0])
- eqs6 = [Eq(Derivative(f(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(g(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(h(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(k(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1))]
- sol6 = [Eq(f(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(3, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4)),
- Eq(g(x), C1*Rational(3, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4)),
- Eq(h(x), C1*Rational(-1, 4) + C2*Rational(3, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4)),
- Eq(k(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(3, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0, 0])
- eqs7 = [Eq(Derivative(f(x), x), (f(x) + g(x) + h(x))*log(x) + sin(x)), Eq(Derivative(g(x), x), (f(x) + g(x)
- + h(x))*log(x) + sin(x)), Eq(Derivative(h(x), x), (f(x) + g(x) + h(x))*log(x) + sin(x))]
- sol7 = [Eq(f(x), -C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 +
- C3/3)*exp(x*(3*log(x) - 3)) + exp(x*(3*log(x) -
- 3))*Integral(exp(3*x)*exp(-3*x*log(x))*sin(x), x)),
- Eq(g(x), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 +
- C3/3)*exp(x*(3*log(x) - 3)) + exp(x*(3*log(x) -
- 3))*Integral(exp(3*x)*exp(-3*x*log(x))*sin(x), x)),
- Eq(h(x), -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 +
- C3/3)*exp(x*(3*log(x) - 3)) + exp(x*(3*log(x) -
- 3))*Integral(exp(3*x)*exp(-3*x*log(x))*sin(x), x))]
- with dotprodsimp(True):
- assert dsolve(eqs7, simplify=False, doit=False) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0, 0])
- eqs8 = [Eq(Derivative(f(x), x), (f(x) + g(x) + h(x) + k(x))*log(x) + sin(x)), Eq(Derivative(g(x), x), (f(x)
- + g(x) + h(x) + k(x))*log(x) + sin(x)), Eq(Derivative(h(x), x), (f(x) + g(x) + h(x) + k(x))*log(x) +
- sin(x)), Eq(Derivative(k(x), x), (f(x) + g(x) + h(x) + k(x))*log(x) + sin(x))]
- sol8 = [Eq(f(x), -C1/4 - C2/4 - C3/4 + 3*C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x)),
- Eq(g(x), 3*C1/4 - C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x)),
- Eq(h(x), -C1/4 + 3*C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x)),
- Eq(k(x), -C1/4 - C2/4 + 3*C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x))]
- with dotprodsimp(True):
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0, 0, 0])
- def test_sysode_linear_neq_order1_type5_type6():
- f, g = symbols("f g", cls=Function)
- x, x_ = symbols("x x_")
- # Type 5
- eqs1 = [Eq(Derivative(f(x), x), (2*f(x) + g(x))/x), Eq(Derivative(g(x), x), (f(x) + 2*g(x))/x)]
- sol1 = [Eq(f(x), -C1*x + C2*x**3), Eq(g(x), C1*x + C2*x**3)]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- # Type 6
- eqs2 = [Eq(Derivative(f(x), x), (2*f(x) + g(x) + 1)/x),
- Eq(Derivative(g(x), x), (x + f(x) + 2*g(x))/x)]
- sol2 = [Eq(f(x), C2*x**3 - x*(C1 + Rational(1, 4)) + x*log(x)*Rational(-1, 2) + Rational(-2, 3)),
- Eq(g(x), C2*x**3 + x*log(x)/2 + x*(C1 + Rational(-1, 4)) + Rational(1, 3))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- def test_higher_order_to_first_order():
- f, g = symbols('f g', cls=Function)
- x = symbols('x')
- eqs1 = [Eq(Derivative(f(x), (x, 2)), 2*f(x) + g(x)),
- Eq(Derivative(g(x), (x, 2)), -f(x))]
- sol1 = [Eq(f(x), -C2*x*exp(-x) + C3*x*exp(x) - (C1 - C2)*exp(-x) + (C3 + C4)*exp(x)),
- Eq(g(x), C2*x*exp(-x) - C3*x*exp(x) + (C1 + C2)*exp(-x) + (C3 - C4)*exp(x))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(f(x).diff(x, 2), 0), Eq(g(x).diff(x, 2), f(x))]
- sol2 = [Eq(f(x), C1 + C2*x), Eq(g(x), C1*x**2/2 + C2*x**3/6 + C3 + C4*x)]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(f(x), (x, 2)), 2*f(x)),
- Eq(Derivative(g(x), (x, 2)), -f(x) + 2*g(x))]
- sol3 = [Eq(f(x), 4*C1*exp(-sqrt(2)*x) + 4*C2*exp(sqrt(2)*x)),
- Eq(g(x), sqrt(2)*C1*x*exp(-sqrt(2)*x) - sqrt(2)*C2*x*exp(sqrt(2)*x) + (C1 +
- sqrt(2)*C4)*exp(-sqrt(2)*x) + (C2 - sqrt(2)*C3)*exp(sqrt(2)*x))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- eqs4 = [Eq(Derivative(f(x), (x, 2)), 2*f(x) + g(x)),
- Eq(Derivative(g(x), (x, 2)), 2*g(x))]
- sol4 = [Eq(f(x), C1*x*exp(sqrt(2)*x)/4 + C3*x*exp(-sqrt(2)*x)/4 + (C2/4 + sqrt(2)*C3/8)*exp(-sqrt(2)*x) -
- exp(sqrt(2)*x)*(sqrt(2)*C1/8 + C4*Rational(-1, 4))),
- Eq(g(x), sqrt(2)*C1*exp(sqrt(2)*x)/2 + sqrt(2)*C3*exp(-sqrt(2)*x)*Rational(-1, 2))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- eqs5 = [Eq(f(x).diff(x, 2), f(x)), Eq(g(x).diff(x, 2), f(x))]
- sol5 = [Eq(f(x), -C1*exp(-x) + C2*exp(x)), Eq(g(x), -C1*exp(-x) + C2*exp(x) + C3 + C4*x)]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- eqs6 = [Eq(Derivative(f(x), (x, 2)), f(x) + g(x)),
- Eq(Derivative(g(x), (x, 2)), -f(x) - g(x))]
- sol6 = [Eq(f(x), C1 + C2*x**2/2 + C2 + C4*x**3/6 + x*(C3 + C4)),
- Eq(g(x), -C1 + C2*x**2*Rational(-1, 2) - C3*x + C4*x**3*Rational(-1, 6))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0])
- eqs7 = [Eq(Derivative(f(x), (x, 2)), f(x) + g(x) + 1),
- Eq(Derivative(g(x), (x, 2)), f(x) + g(x) + 1)]
- sol7 = [Eq(f(x), -C1 - C2*x + sqrt(2)*C3*exp(sqrt(2)*x)/2 + sqrt(2)*C4*exp(-sqrt(2)*x)*Rational(-1, 2) +
- Rational(-1, 2)),
- Eq(g(x), C1 + C2*x + sqrt(2)*C3*exp(sqrt(2)*x)/2 + sqrt(2)*C4*exp(-sqrt(2)*x)*Rational(-1, 2) +
- Rational(-1, 2))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- eqs8 = [Eq(Derivative(f(x), (x, 2)), f(x) + g(x) + 1),
- Eq(Derivative(g(x), (x, 2)), -f(x) - g(x) + 1)]
- sol8 = [Eq(f(x), C1 + C2 + C4*x**3/6 + x**4/12 + x**2*(C2/2 + Rational(1, 2)) + x*(C3 + C4)),
- Eq(g(x), -C1 - C3*x + C4*x**3*Rational(-1, 6) + x**4*Rational(-1, 12) - x**2*(C2/2 + Rational(-1,
- 2)))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- x, y = symbols('x, y', cls=Function)
- t, l = symbols('t, l')
- eqs10 = [Eq(Derivative(x(t), (t, 2)), 5*x(t) + 43*y(t)),
- Eq(Derivative(y(t), (t, 2)), x(t) + 9*y(t))]
- sol10 = [Eq(x(t), C1*(61 - 9*sqrt(47))*sqrt(sqrt(47) + 7)*exp(-t*sqrt(sqrt(47) + 7))/2 + C2*sqrt(7 -
- sqrt(47))*(61 + 9*sqrt(47))*exp(-t*sqrt(7 - sqrt(47)))/2 + C3*(61 - 9*sqrt(47))*sqrt(sqrt(47) +
- 7)*exp(t*sqrt(sqrt(47) + 7))*Rational(-1, 2) + C4*sqrt(7 - sqrt(47))*(61 + 9*sqrt(47))*exp(t*sqrt(7
- - sqrt(47)))*Rational(-1, 2)),
- Eq(y(t), C1*(7 - sqrt(47))*sqrt(sqrt(47) + 7)*exp(-t*sqrt(sqrt(47) + 7))*Rational(-1, 2) + C2*sqrt(7
- - sqrt(47))*(sqrt(47) + 7)*exp(-t*sqrt(7 - sqrt(47)))*Rational(-1, 2) + C3*(7 -
- sqrt(47))*sqrt(sqrt(47) + 7)*exp(t*sqrt(sqrt(47) + 7))/2 + C4*sqrt(7 - sqrt(47))*(sqrt(47) +
- 7)*exp(t*sqrt(7 - sqrt(47)))/2)]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0])
- eqs11 = [Eq(7*x(t) + Derivative(x(t), (t, 2)) - 9*Derivative(y(t), t), 0),
- Eq(7*y(t) + 9*Derivative(x(t), t) + Derivative(y(t), (t, 2)), 0)]
- sol11 = [Eq(y(t), C1*(9 - sqrt(109))*sin(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)/14 + C2*(9 -
- sqrt(109))*cos(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)*Rational(-1, 14) + C3*(9 +
- sqrt(109))*sin(sqrt(2)*t*sqrt(95 - 9*sqrt(109))/2)/14 + C4*(9 + sqrt(109))*cos(sqrt(2)*t*sqrt(95 -
- 9*sqrt(109))/2)*Rational(-1, 14)),
- Eq(x(t), C1*(9 - sqrt(109))*cos(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)*Rational(-1, 14) + C2*(9 -
- sqrt(109))*sin(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)*Rational(-1, 14) + C3*(9 +
- sqrt(109))*cos(sqrt(2)*t*sqrt(95 - 9*sqrt(109))/2)/14 + C4*(9 + sqrt(109))*sin(sqrt(2)*t*sqrt(95 -
- 9*sqrt(109))/2)/14)]
- assert dsolve(eqs11) == sol11
- assert checksysodesol(eqs11, sol11) == (True, [0, 0])
- # Euler Systems
- # Note: To add examples of euler systems solver with non-homogeneous term.
- eqs13 = [Eq(Derivative(f(t), (t, 2)), Derivative(f(t), t)/t + f(t)/t**2 + g(t)/t**2),
- Eq(Derivative(g(t), (t, 2)), g(t)/t**2)]
- sol13 = [Eq(f(t), C1*(sqrt(5) + 3)*Rational(-1, 2)*t**(Rational(1, 2) +
- sqrt(5)*Rational(-1, 2)) + C2*t**(Rational(1, 2) +
- sqrt(5)/2)*(3 - sqrt(5))*Rational(-1, 2) - C3*t**(1 -
- sqrt(2))*(1 + sqrt(2)) - C4*t**(1 + sqrt(2))*(1 - sqrt(2))),
- Eq(g(t), C1*(1 + sqrt(5))*Rational(-1, 2)*t**(Rational(1, 2) +
- sqrt(5)*Rational(-1, 2)) + C2*t**(Rational(1, 2) +
- sqrt(5)/2)*(1 - sqrt(5))*Rational(-1, 2))]
- assert dsolve(eqs13) == sol13
- assert checksysodesol(eqs13, sol13) == (True, [0, 0])
- # Solving systems using dsolve separately
- eqs14 = [Eq(Derivative(f(t), (t, 2)), t*f(t)),
- Eq(Derivative(g(t), (t, 2)), t*g(t))]
- sol14 = [Eq(f(t), C1*airyai(t) + C2*airybi(t)),
- Eq(g(t), C3*airyai(t) + C4*airybi(t))]
- assert dsolve(eqs14) == sol14
- assert checksysodesol(eqs14, sol14) == (True, [0, 0])
- eqs15 = [Eq(Derivative(x(t), (t, 2)), t*(4*Derivative(x(t), t) + 8*Derivative(y(t), t))),
- Eq(Derivative(y(t), (t, 2)), t*(12*Derivative(x(t), t) - 6*Derivative(y(t), t)))]
- sol15 = [Eq(x(t), C1 - erf(sqrt(6)*t)*(sqrt(6)*sqrt(pi)*C2/33 + sqrt(6)*sqrt(pi)*C3*Rational(-1, 44)) +
- erfi(sqrt(5)*t)*(sqrt(5)*sqrt(pi)*C2*Rational(2, 55) + sqrt(5)*sqrt(pi)*C3*Rational(4, 55))),
- Eq(y(t), C4 + erf(sqrt(6)*t)*(sqrt(6)*sqrt(pi)*C2*Rational(2, 33) + sqrt(6)*sqrt(pi)*C3*Rational(-1,
- 22)) + erfi(sqrt(5)*t)*(sqrt(5)*sqrt(pi)*C2*Rational(3, 110) + sqrt(5)*sqrt(pi)*C3*Rational(3, 55)))]
- assert dsolve(eqs15) == sol15
- assert checksysodesol(eqs15, sol15) == (True, [0, 0])
- @slow
- def test_higher_order_to_first_order_9():
- f, g = symbols('f g', cls=Function)
- x = symbols('x')
- eqs9 = [f(x) + g(x) - 2*exp(I*x) + 2*Derivative(f(x), x) + Derivative(f(x), (x, 2)),
- f(x) + g(x) - 2*exp(I*x) + 2*Derivative(g(x), x) + Derivative(g(x), (x, 2))]
- sol9 = [Eq(f(x), -C1 + C4*exp(-2*x)/2 - (C2/2 - C3/2)*exp(-x)*cos(x)
- + (C2/2 + C3/2)*exp(-x)*sin(x) + 2*((1 - 2*I)*exp(I*x)*sin(x)**2/5)
- + 2*((1 - 2*I)*exp(I*x)*cos(x)**2/5)),
- Eq(g(x), C1 - C4*exp(-2*x)/2 - (C2/2 - C3/2)*exp(-x)*cos(x)
- + (C2/2 + C3/2)*exp(-x)*sin(x) + 2*((1 - 2*I)*exp(I*x)*sin(x)**2/5)
- + 2*((1 - 2*I)*exp(I*x)*cos(x)**2/5))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9, sol9) == (True, [0, 0])
- def test_higher_order_to_first_order_12():
- f, g = symbols('f g', cls=Function)
- x = symbols('x')
- x, y = symbols('x, y', cls=Function)
- t, l = symbols('t, l')
- eqs12 = [Eq(4*x(t) + Derivative(x(t), (t, 2)) + 8*Derivative(y(t), t), 0),
- Eq(4*y(t) - 8*Derivative(x(t), t) + Derivative(y(t), (t, 2)), 0)]
- sol12 = [Eq(y(t), C1*(2 - sqrt(5))*sin(2*t*sqrt(4*sqrt(5) + 9))*Rational(-1, 2) + C2*(2 -
- sqrt(5))*cos(2*t*sqrt(4*sqrt(5) + 9))/2 + C3*(2 + sqrt(5))*sin(2*t*sqrt(9 - 4*sqrt(5)))*Rational(-1,
- 2) + C4*(2 + sqrt(5))*cos(2*t*sqrt(9 - 4*sqrt(5)))/2),
- Eq(x(t), C1*(2 - sqrt(5))*cos(2*t*sqrt(4*sqrt(5) + 9))*Rational(-1, 2) + C2*(2 -
- sqrt(5))*sin(2*t*sqrt(4*sqrt(5) + 9))*Rational(-1, 2) + C3*(2 + sqrt(5))*cos(2*t*sqrt(9 -
- 4*sqrt(5)))/2 + C4*(2 + sqrt(5))*sin(2*t*sqrt(9 - 4*sqrt(5)))/2)]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0])
- def test_second_order_to_first_order_2():
- f, g = symbols("f g", cls=Function)
- x, t, x_, t_, d, a, m = symbols("x t x_ t_ d a m")
- eqs2 = [Eq(f(x).diff(x, 2), 2*(x*g(x).diff(x) - g(x))),
- Eq(g(x).diff(x, 2),-2*(x*f(x).diff(x) - f(x)))]
- sol2 = [Eq(f(x), C1*x + x*Integral(C2*exp(-x_)*exp(I*exp(2*x_))/2 + C2*exp(-x_)*exp(-I*exp(2*x_))/2 -
- I*C3*exp(-x_)*exp(I*exp(2*x_))/2 + I*C3*exp(-x_)*exp(-I*exp(2*x_))/2, (x_, log(x)))),
- Eq(g(x), C4*x + x*Integral(I*C2*exp(-x_)*exp(I*exp(2*x_))/2 - I*C2*exp(-x_)*exp(-I*exp(2*x_))/2 +
- C3*exp(-x_)*exp(I*exp(2*x_))/2 + C3*exp(-x_)*exp(-I*exp(2*x_))/2, (x_, log(x))))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs2, simplify=False, doit=False) == [sol2]
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = (Eq(diff(f(t),t,t), 9*t*diff(g(t),t)-9*g(t)), Eq(diff(g(t),t,t),7*t*diff(f(t),t)-7*f(t)))
- sol3 = [Eq(f(t), C1*t + t*Integral(C2*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/2 + C2*exp(-t_)*
- exp(-3*sqrt(7)*exp(2*t_)/2)/2 + 3*sqrt(7)*C3*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/14 -
- 3*sqrt(7)*C3*exp(-t_)*exp(-3*sqrt(7)*exp(2*t_)/2)/14, (t_, log(t)))),
- Eq(g(t), C4*t + t*Integral(sqrt(7)*C2*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/6 - sqrt(7)*C2*exp(-t_)*
- exp(-3*sqrt(7)*exp(2*t_)/2)/6 + C3*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/2 + C3*exp(-t_)*exp(-3*sqrt(7)*
- exp(2*t_)/2)/2, (t_, log(t))))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs3, simplify=False, doit=False) == [sol3]
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- # Regression Test case for sympy#19238
- # https://github.com/sympy/sympy/issues/19238
- # Note: When the doit method is removed, these particular types of systems
- # can be divided first so that we have lesser number of big matrices.
- eqs5 = [Eq(Derivative(g(t), (t, 2)), a*m),
- Eq(Derivative(f(t), (t, 2)), 0)]
- sol5 = [Eq(g(t), C1 + C2*t + a*m*t**2/2),
- Eq(f(t), C3 + C4*t)]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- # Type 2
- eqs6 = [Eq(Derivative(f(t), (t, 2)), f(t)/t**4),
- Eq(Derivative(g(t), (t, 2)), d*g(t)/t**4)]
- sol6 = [Eq(f(t), C1*sqrt(t**2)*exp(-1/t) - C2*sqrt(t**2)*exp(1/t)),
- Eq(g(t), C3*sqrt(t**2)*exp(-sqrt(d)/t)*d**Rational(-1, 2) -
- C4*sqrt(t**2)*exp(sqrt(d)/t)*d**Rational(-1, 2))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0])
- @slow
- def test_second_order_to_first_order_slow1():
- f, g = symbols("f g", cls=Function)
- x, t, x_, t_, d, a, m = symbols("x t x_ t_ d a m")
- # Type 1
- eqs1 = [Eq(f(x).diff(x, 2), 2/x *(x*g(x).diff(x) - g(x))),
- Eq(g(x).diff(x, 2),-2/x *(x*f(x).diff(x) - f(x)))]
- sol1 = [Eq(f(x), C1*x + 2*C2*x*Ci(2*x) - C2*sin(2*x) - 2*C3*x*Si(2*x) - C3*cos(2*x)),
- Eq(g(x), -2*C2*x*Si(2*x) - C2*cos(2*x) - 2*C3*x*Ci(2*x) + C3*sin(2*x) + C4*x)]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- def test_second_order_to_first_order_slow4():
- f, g = symbols("f g", cls=Function)
- x, t, x_, t_, d, a, m = symbols("x t x_ t_ d a m")
- eqs4 = [Eq(Derivative(f(t), (t, 2)), t*sin(t)*Derivative(g(t), t) - g(t)*sin(t)),
- Eq(Derivative(g(t), (t, 2)), t*sin(t)*Derivative(f(t), t) - f(t)*sin(t))]
- sol4 = [Eq(f(t), C1*t + t*Integral(C2*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*exp(-sin(exp(t_)))/2 +
- C2*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2 - C3*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*
- exp(-sin(exp(t_)))/2 +
- C3*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2, (t_, log(t)))),
- Eq(g(t), C4*t + t*Integral(-C2*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*exp(-sin(exp(t_)))/2 +
- C2*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2 + C3*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*
- exp(-sin(exp(t_)))/2 + C3*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2, (t_, log(t))))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs4, simplify=False, doit=False) == [sol4]
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- def test_component_division():
- f, g, h, k = symbols('f g h k', cls=Function)
- x = symbols("x")
- funcs = [f(x), g(x), h(x), k(x)]
- eqs1 = [Eq(Derivative(f(x), x), 2*f(x)),
- Eq(Derivative(g(x), x), f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), h(x)**4 + k(x))]
- sol1 = [Eq(f(x), 2*C1*exp(2*x)),
- Eq(g(x), C1*exp(2*x) + C2),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C3**4*exp(4*x)/3 + C4*exp(x))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0, 0, 0])
- components1 = {((Eq(Derivative(f(x), x), 2*f(x)),), (Eq(Derivative(g(x), x), f(x)),)),
- ((Eq(Derivative(h(x), x), h(x)),), (Eq(Derivative(k(x), x), h(x)**4 + k(x)),))}
- eqsdict1 = ({f(x): set(), g(x): {f(x)}, h(x): set(), k(x): {h(x)}},
- {f(x): Eq(Derivative(f(x), x), 2*f(x)),
- g(x): Eq(Derivative(g(x), x), f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), h(x)**4 + k(x))})
- graph1 = [{f(x), g(x), h(x), k(x)}, {(g(x), f(x)), (k(x), h(x))}]
- assert {tuple(tuple(scc) for scc in wcc) for wcc in _component_division(eqs1, funcs, x)} == components1
- assert _eqs2dict(eqs1, funcs) == eqsdict1
- assert [set(element) for element in _dict2graph(eqsdict1[0])] == graph1
- eqs2 = [Eq(Derivative(f(x), x), 2*f(x)),
- Eq(Derivative(g(x), x), f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol2 = [Eq(f(x), C1*exp(2*x)),
- Eq(g(x), C1*exp(2*x)/2 + C2),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C1**4*exp(8*x)/7 + C4*exp(x))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0, 0, 0])
- components2 = {frozenset([(Eq(Derivative(f(x), x), 2*f(x)),),
- (Eq(Derivative(g(x), x), f(x)),),
- (Eq(Derivative(k(x), x), f(x)**4 + k(x)),)]),
- frozenset([(Eq(Derivative(h(x), x), h(x)),)])}
- eqsdict2 = ({f(x): set(), g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), 2*f(x)),
- g(x): Eq(Derivative(g(x), x), f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph2 = [{f(x), g(x), h(x), k(x)}, {(g(x), f(x)), (k(x), f(x))}]
- assert {frozenset(tuple(scc) for scc in wcc) for wcc in _component_division(eqs2, funcs, x)} == components2
- assert _eqs2dict(eqs2, funcs) == eqsdict2
- assert [set(element) for element in _dict2graph(eqsdict2[0])] == graph2
- eqs3 = [Eq(Derivative(f(x), x), 2*f(x)),
- Eq(Derivative(g(x), x), x + f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol3 = [Eq(f(x), C1*exp(2*x)),
- Eq(g(x), C1*exp(2*x)/2 + C2 + x**2/2),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C1**4*exp(8*x)/7 + C4*exp(x))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0, 0, 0])
- components3 = {frozenset([(Eq(Derivative(f(x), x), 2*f(x)),),
- (Eq(Derivative(g(x), x), x + f(x)),),
- (Eq(Derivative(k(x), x), f(x)**4 + k(x)),)]),
- frozenset([(Eq(Derivative(h(x), x), h(x)),),])}
- eqsdict3 = ({f(x): set(), g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), 2*f(x)),
- g(x): Eq(Derivative(g(x), x), x + f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph3 = [{f(x), g(x), h(x), k(x)}, {(g(x), f(x)), (k(x), f(x))}]
- assert {frozenset(tuple(scc) for scc in wcc) for wcc in _component_division(eqs3, funcs, x)} == components3
- assert _eqs2dict(eqs3, funcs) == eqsdict3
- assert [set(l) for l in _dict2graph(eqsdict3[0])] == graph3
- # Note: To be uncommented when the default option to call dsolve first for
- # single ODE system can be rearranged. This can be done after the doit
- # option in dsolve is made False by default.
- eqs4 = [Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), f(x) + x*g(x) + x),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol4 = [Eq(f(x), (C1/2 - sqrt(2)*C2/2 - sqrt(2)*Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 +\
- sqrt(2)*x)/2, x)/2 + Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 - sqrt(2)*x*exp(-x**2/2 +\
- sqrt(2)*x)/2, x)/2)*exp(x**2/2 - sqrt(2)*x) + (C1/2 + sqrt(2)*C2/2 + sqrt(2)*Integral(x*exp(-x**2/2
- - sqrt(2)*x)/2 + x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 + Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2
- - sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2)*exp(x**2/2 + sqrt(2)*x)),
- Eq(g(x), (-sqrt(2)*C1/4 + C2/2 + Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 -\
- sqrt(2)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 - sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2,
- x)/4)*exp(x**2/2 - sqrt(2)*x) + (sqrt(2)*C1/4 + C2/2 + Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 +
- x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 + sqrt(2)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 -
- sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2, x)/4)*exp(x**2/2 + sqrt(2)*x)),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C4*exp(x) + exp(x)*Integral((C1*exp(x**2/2 - sqrt(2)*x)/2 + C1*exp(x**2/2 + sqrt(2)*x)/2 -
- sqrt(2)*C2*exp(x**2/2 - sqrt(2)*x)/2 + sqrt(2)*C2*exp(x**2/2 + sqrt(2)*x)/2 - sqrt(2)*exp(x**2/2 -
- sqrt(2)*x)*Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 + exp(x**2/2 -
- sqrt(2)*x)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 - sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2,
- x)/2 + sqrt(2)*exp(x**2/2 + sqrt(2)*x)*Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 +
- sqrt(2)*x)/2, x)/2 + exp(x**2/2 + sqrt(2)*x)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 -
- sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2)**4*exp(-x), x))]
- components4 = {(frozenset([Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), x*g(x) + x + f(x))]),
- frozenset([Eq(Derivative(k(x), x), f(x)**4 + k(x)),])),
- (frozenset([Eq(Derivative(h(x), x), h(x)),]),)}
- eqsdict4 = ({f(x): {g(x)}, g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- g(x): Eq(Derivative(g(x), x), x*g(x) + x + f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph4 = [{f(x), g(x), h(x), k(x)}, {(f(x), g(x)), (g(x), f(x)), (k(x), f(x))}]
- assert {tuple(frozenset(scc) for scc in wcc) for wcc in _component_division(eqs4, funcs, x)} == components4
- assert _eqs2dict(eqs4, funcs) == eqsdict4
- assert [set(element) for element in _dict2graph(eqsdict4[0])] == graph4
- # XXX: dsolve hangs in integration here:
- assert dsolve_system(eqs4, simplify=False, doit=False) == [sol4]
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0, 0])
- eqs5 = [Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), x*g(x) + f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol5 = [Eq(f(x), (C1/2 - sqrt(2)*C2/2)*exp(x**2/2 - sqrt(2)*x) + (C1/2 + sqrt(2)*C2/2)*exp(x**2/2 + sqrt(2)*x)),
- Eq(g(x), (-sqrt(2)*C1/4 + C2/2)*exp(x**2/2 - sqrt(2)*x) + (sqrt(2)*C1/4 + C2/2)*exp(x**2/2 + sqrt(2)*x)),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C4*exp(x) + exp(x)*Integral((C1*exp(x**2/2 - sqrt(2)*x)/2 + C1*exp(x**2/2 + sqrt(2)*x)/2 -
- sqrt(2)*C2*exp(x**2/2 - sqrt(2)*x)/2 + sqrt(2)*C2*exp(x**2/2 + sqrt(2)*x)/2)**4*exp(-x), x))]
- components5 = {(frozenset([Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), x*g(x) + f(x))]),
- frozenset([Eq(Derivative(k(x), x), f(x)**4 + k(x)),])),
- (frozenset([Eq(Derivative(h(x), x), h(x)),]),)}
- eqsdict5 = ({f(x): {g(x)}, g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- g(x): Eq(Derivative(g(x), x), x*g(x) + f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph5 = [{f(x), g(x), h(x), k(x)}, {(f(x), g(x)), (g(x), f(x)), (k(x), f(x))}]
- assert {tuple(frozenset(scc) for scc in wcc) for wcc in _component_division(eqs5, funcs, x)} == components5
- assert _eqs2dict(eqs5, funcs) == eqsdict5
- assert [set(element) for element in _dict2graph(eqsdict5[0])] == graph5
- # XXX: dsolve hangs in integration here:
- assert dsolve_system(eqs5, simplify=False, doit=False) == [sol5]
- assert checksysodesol(eqs5, sol5) == (True, [0, 0, 0, 0])
- def test_linodesolve():
- t, x, a = symbols("t x a")
- f, g, h = symbols("f g h", cls=Function)
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(1, t))
- raises(ValueError, lambda: linodesolve(a, t))
- A1 = Matrix([[1, 2], [2, 4], [4, 6]])
- raises(NonSquareMatrixError, lambda: linodesolve(A1, t))
- A2 = Matrix([[1, 2, 1], [3, 1, 2]])
- raises(NonSquareMatrixError, lambda: linodesolve(A2, t))
- # Testing auto functionality
- func = [f(t), g(t)]
- eq = [Eq(f(t).diff(t) + g(t).diff(t), g(t)), Eq(g(t).diff(t), f(t))]
- ceq = canonical_odes(eq, func, t)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, t, 1)
- A = A0
- sol = [C1*(-Rational(1, 2) + sqrt(5)/2)*exp(t*(-Rational(1, 2) + sqrt(5)/2)) + C2*(-sqrt(5)/2 - Rational(1, 2))*
- exp(t*(-sqrt(5)/2 - Rational(1, 2))),
- C1*exp(t*(-Rational(1, 2) + sqrt(5)/2)) + C2*exp(t*(-sqrt(5)/2 - Rational(1, 2)))]
- assert constant_renumber(linodesolve(A, t), variables=Tuple(*eq).free_symbols) == sol
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(1, t, b=Matrix([t+1])))
- raises(ValueError, lambda: linodesolve(a, t, b=Matrix([log(t) + sin(t)])))
- raises(ValueError, lambda: linodesolve(Matrix([7]), t, b=t**2))
- raises(ValueError, lambda: linodesolve(Matrix([a+10]), t, b=log(t)*cos(t)))
- raises(ValueError, lambda: linodesolve(7, t, b=t**2))
- raises(ValueError, lambda: linodesolve(a, t, b=log(t) + sin(t)))
- A1 = Matrix([[1, 2], [2, 4], [4, 6]])
- b1 = Matrix([t, 1, t**2])
- raises(NonSquareMatrixError, lambda: linodesolve(A1, t, b=b1))
- A2 = Matrix([[1, 2, 1], [3, 1, 2]])
- b2 = Matrix([t, t**2])
- raises(NonSquareMatrixError, lambda: linodesolve(A2, t, b=b2))
- raises(ValueError, lambda: linodesolve(A1[:2, :], t, b=b1))
- raises(ValueError, lambda: linodesolve(A1[:2, :], t, b=b1[:1]))
- # DOIT check
- A1 = Matrix([[1, -1], [1, -1]])
- b1 = Matrix([15*t - 10, -15*t - 5])
- sol1 = [C1 + C2*t + C2 - 10*t**3 + 10*t**2 + t*(15*t**2 - 5*t) - 10*t,
- C1 + C2*t - 10*t**3 - 5*t**2 + t*(15*t**2 - 5*t) - 5*t]
- assert constant_renumber(linodesolve(A1, t, b=b1, type="type2", doit=True),
- variables=[t]) == sol1
- # Testing auto functionality
- func = [f(t), g(t)]
- eq = [Eq(f(t).diff(t) + g(t).diff(t), g(t) + t), Eq(g(t).diff(t), f(t))]
- ceq = canonical_odes(eq, func, t)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, t, 1)
- A = A0
- sol = [-C1*exp(-t/2 + sqrt(5)*t/2)/2 + sqrt(5)*C1*exp(-t/2 + sqrt(5)*t/2)/2 - sqrt(5)*C2*exp(-sqrt(5)*t/2 -
- t/2)/2 - C2*exp(-sqrt(5)*t/2 - t/2)/2 - exp(-t/2 + sqrt(5)*t/2)*Integral(t*exp(-sqrt(5)*t/2 +
- t/2)/(-5 + sqrt(5)) - sqrt(5)*t*exp(-sqrt(5)*t/2 + t/2)/(-5 + sqrt(5)), t)/2 + sqrt(5)*exp(-t/2 +
- sqrt(5)*t/2)*Integral(t*exp(-sqrt(5)*t/2 + t/2)/(-5 + sqrt(5)) - sqrt(5)*t*exp(-sqrt(5)*t/2 +
- t/2)/(-5 + sqrt(5)), t)/2 - sqrt(5)*exp(-sqrt(5)*t/2 - t/2)*Integral(-sqrt(5)*t*exp(t/2 +
- sqrt(5)*t/2)/5, t)/2 - exp(-sqrt(5)*t/2 - t/2)*Integral(-sqrt(5)*t*exp(t/2 + sqrt(5)*t/2)/5, t)/2,
- C1*exp(-t/2 + sqrt(5)*t/2) + C2*exp(-sqrt(5)*t/2 - t/2) + exp(-t/2 +
- sqrt(5)*t/2)*Integral(t*exp(-sqrt(5)*t/2 + t/2)/(-5 + sqrt(5)) - sqrt(5)*t*exp(-sqrt(5)*t/2 +
- t/2)/(-5 + sqrt(5)), t) + exp(-sqrt(5)*t/2 -
- t/2)*Integral(-sqrt(5)*t*exp(t/2 + sqrt(5)*t/2)/5, t)]
- assert constant_renumber(linodesolve(A, t, b=b), variables=[t]) == sol
- # non-homogeneous term assumed to be 0
- sol1 = [-C1*exp(-t/2 + sqrt(5)*t/2)/2 + sqrt(5)*C1*exp(-t/2 + sqrt(5)*t/2)/2 - sqrt(5)*C2*exp(-sqrt(5)*t/2
- - t/2)/2 - C2*exp(-sqrt(5)*t/2 - t/2)/2,
- C1*exp(-t/2 + sqrt(5)*t/2) + C2*exp(-sqrt(5)*t/2 - t/2)]
- assert constant_renumber(linodesolve(A, t, type="type2"), variables=[t]) == sol1
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(t+10, t))
- raises(ValueError, lambda: linodesolve(a*t, t))
- A1 = Matrix([[1, t], [-t, 1]])
- B1, _ = _is_commutative_anti_derivative(A1, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A1[:, :1], t, B=B1))
- raises(ValueError, lambda: linodesolve(A1, t, B=1))
- A2 = Matrix([[t, t, t], [t, t, t], [t, t, t]])
- B2, _ = _is_commutative_anti_derivative(A2, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A2, t, B=B2[:2, :]))
- raises(ValueError, lambda: linodesolve(A2, t, B=2))
- raises(ValueError, lambda: linodesolve(A2, t, B=B2, type="type31"))
- raises(ValueError, lambda: linodesolve(A1, t, B=B2))
- raises(ValueError, lambda: linodesolve(A2, t, B=B1))
- # Testing auto functionality
- func = [f(t), g(t)]
- eq = [Eq(f(t).diff(t), f(t) + t*g(t)), Eq(g(t).diff(t), -t*f(t) + g(t))]
- ceq = canonical_odes(eq, func, t)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, t, 1)
- A = A0
- sol = [(C1/2 - I*C2/2)*exp(I*t**2/2 + t) + (C1/2 + I*C2/2)*exp(-I*t**2/2 + t),
- (-I*C1/2 + C2/2)*exp(-I*t**2/2 + t) + (I*C1/2 + C2/2)*exp(I*t**2/2 + t)]
- assert constant_renumber(linodesolve(A, t), variables=Tuple(*eq).free_symbols) == sol
- assert constant_renumber(linodesolve(A, t, type="type3"), variables=Tuple(*eq).free_symbols) == sol
- A1 = Matrix([[t, 1], [t, -1]])
- raises(NotImplementedError, lambda: linodesolve(A1, t))
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(t+10, t, b=Matrix([t+1])))
- raises(ValueError, lambda: linodesolve(a*t, t, b=Matrix([log(t) + sin(t)])))
- raises(ValueError, lambda: linodesolve(Matrix([7*t]), t, b=t**2))
- raises(ValueError, lambda: linodesolve(Matrix([a + 10*log(t)]), t, b=log(t)*cos(t)))
- raises(ValueError, lambda: linodesolve(7*t, t, b=t**2))
- raises(ValueError, lambda: linodesolve(a*t**2, t, b=log(t) + sin(t)))
- A1 = Matrix([[1, t], [-t, 1]])
- b1 = Matrix([t, t ** 2])
- B1, _ = _is_commutative_anti_derivative(A1, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A1[:, :1], t, b=b1))
- A2 = Matrix([[t, t, t], [t, t, t], [t, t, t]])
- b2 = Matrix([t, 1, t**2])
- B2, _ = _is_commutative_anti_derivative(A2, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A2[:2, :], t, b=b2))
- raises(ValueError, lambda: linodesolve(A1, t, b=b2))
- raises(ValueError, lambda: linodesolve(A2, t, b=b1))
- raises(ValueError, lambda: linodesolve(A1, t, b=b1, B=B2))
- raises(ValueError, lambda: linodesolve(A2, t, b=b2, B=B1))
- # Testing auto functionality
- func = [f(x), g(x), h(x)]
- eq = [Eq(f(x).diff(x), x*(f(x) + g(x) + h(x)) + x),
- Eq(g(x).diff(x), x*(f(x) + g(x) + h(x)) + x),
- Eq(h(x).diff(x), x*(f(x) + g(x) + h(x)) + 1)]
- ceq = canonical_odes(eq, func, x)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, x, 1)
- A = A0
- _x1 = exp(-3*x**2/2)
- _x2 = exp(3*x**2/2)
- _x3 = Integral(2*_x1*x/3 + _x1/3 + x/3 - Rational(1, 3), x)
- _x4 = 2*_x2*_x3/3
- _x5 = Integral(2*_x1*x/3 + _x1/3 - 2*x/3 + Rational(2, 3), x)
- sol = [
- C1*_x2/3 - C1/3 + C2*_x2/3 - C2/3 + C3*_x2/3 + 2*C3/3 + _x2*_x5/3 + _x3/3 + _x4 - _x5/3,
- C1*_x2/3 + 2*C1/3 + C2*_x2/3 - C2/3 + C3*_x2/3 - C3/3 + _x2*_x5/3 + _x3/3 + _x4 - _x5/3,
- C1*_x2/3 - C1/3 + C2*_x2/3 + 2*C2/3 + C3*_x2/3 - C3/3 + _x2*_x5/3 - 2*_x3/3 + _x4 + 2*_x5/3,
- ]
- assert constant_renumber(linodesolve(A, x, b=b), variables=Tuple(*eq).free_symbols) == sol
- assert constant_renumber(linodesolve(A, x, b=b, type="type4"),
- variables=Tuple(*eq).free_symbols) == sol
- A1 = Matrix([[t, 1], [t, -1]])
- raises(NotImplementedError, lambda: linodesolve(A1, t, b=b1))
- # non-homogeneous term not passed
- sol1 = [-C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2),
- -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2)]
- assert constant_renumber(linodesolve(A, x, type="type4", doit=True), variables=Tuple(*eq).free_symbols) == sol1
- @slow
- def test_linear_3eq_order1_type4_slow():
- x, y, z = symbols('x, y, z', cls=Function)
- t = Symbol('t')
- f = t ** 3 + log(t)
- g = t ** 2 + sin(t)
- eq1 = (Eq(diff(x(t), t), (4 * f + g) * x(t) - f * y(t) - 2 * f * z(t)),
- Eq(diff(y(t), t), 2 * f * x(t) + (f + g) * y(t) - 2 * f * z(t)), Eq(diff(z(t), t), 5 * f * x(t) + f * y(
- t) + (-3 * f + g) * z(t)))
- with dotprodsimp(True):
- dsolve(eq1)
- @slow
- def test_linear_neq_order1_type2_slow1():
- i, r1, c1, r2, c2, t = symbols('i, r1, c1, r2, c2, t')
- x1 = Function('x1')
- x2 = Function('x2')
- eq1 = r1*c1*Derivative(x1(t), t) + x1(t) - x2(t) - r1*i
- eq2 = r2*c1*Derivative(x1(t), t) + r2*c2*Derivative(x2(t), t) + x2(t) - r2*i
- eq = [eq1, eq2]
- # XXX: Solution is too complicated
- [sol] = dsolve_system(eq, simplify=False, doit=False)
- assert checksysodesol(eq, sol) == (True, [0, 0])
- # Regression test case for issue #9204
- # https://github.com/sympy/sympy/issues/9204
- @tooslow
- def test_linear_new_order1_type2_de_lorentz_slow_check():
- m = Symbol("m", real=True)
- q = Symbol("q", real=True)
- t = Symbol("t", real=True)
- e1, e2, e3 = symbols("e1:4", real=True)
- b1, b2, b3 = symbols("b1:4", real=True)
- v1, v2, v3 = symbols("v1:4", cls=Function, real=True)
- eqs = [
- -e1*q + m*Derivative(v1(t), t) - q*(-b2*v3(t) + b3*v2(t)),
- -e2*q + m*Derivative(v2(t), t) - q*(b1*v3(t) - b3*v1(t)),
- -e3*q + m*Derivative(v3(t), t) - q*(-b1*v2(t) + b2*v1(t))
- ]
- sol = dsolve(eqs)
- assert checksysodesol(eqs, sol) == (True, [0, 0, 0])
- # Regression test case for issue #14001
- # https://github.com/sympy/sympy/issues/14001
- @slow
- def test_linear_neq_order1_type2_slow_check():
- RC, t, C, Vs, L, R1, V0, I0 = symbols("RC t C Vs L R1 V0 I0")
- V = Function("V")
- I = Function("I")
- system = [Eq(V(t).diff(t), -1/RC*V(t) + I(t)/C), Eq(I(t).diff(t), -R1/L*I(t) - 1/L*V(t) + Vs/L)]
- [sol] = dsolve_system(system, simplify=False, doit=False)
- assert checksysodesol(system, sol) == (True, [0, 0])
- def _linear_3eq_order1_type4_long():
- x, y, z = symbols('x, y, z', cls=Function)
- t = Symbol('t')
- f = t ** 3 + log(t)
- g = t ** 2 + sin(t)
- eq1 = (Eq(diff(x(t), t), (4*f + g)*x(t) - f*y(t) - 2*f*z(t)),
- Eq(diff(y(t), t), 2*f*x(t) + (f + g)*y(t) - 2*f*z(t)), Eq(diff(z(t), t), 5*f*x(t) + f*y(
- t) + (-3*f + g)*z(t)))
- dsolve_sol = dsolve(eq1)
- dsolve_sol1 = [_simpsol(sol) for sol in dsolve_sol]
- x_1 = sqrt(-t**6 - 8*t**3*log(t) + 8*t**3 - 16*log(t)**2 + 32*log(t) - 16)
- x_2 = sqrt(3)
- x_3 = 8324372644*C1*x_1*x_2 + 4162186322*C2*x_1*x_2 - 8324372644*C3*x_1*x_2
- x_4 = 1 / (1903457163*t**3 + 3825881643*x_1*x_2 + 7613828652*log(t) - 7613828652)
- x_5 = exp(t**3/3 + t*x_1*x_2/4 - cos(t))
- x_6 = exp(t**3/3 - t*x_1*x_2/4 - cos(t))
- x_7 = exp(t**4/2 + t**3/3 + 2*t*log(t) - 2*t - cos(t))
- x_8 = 91238*C1*x_1*x_2 + 91238*C2*x_1*x_2 - 91238*C3*x_1*x_2
- x_9 = 1 / (66049*t**3 - 50629*x_1*x_2 + 264196*log(t) - 264196)
- x_10 = 50629 * C1 / 25189 + 37909*C2/25189 - 50629*C3/25189 - x_3*x_4
- x_11 = -50629*C1/25189 - 12720*C2/25189 + 50629*C3/25189 + x_3*x_4
- sol = [Eq(x(t), x_10*x_5 + x_11*x_6 + x_7*(C1 - C2)), Eq(y(t), x_10*x_5 + x_11*x_6), Eq(z(t), x_5*(
- -424*C1/257 - 167*C2/257 + 424*C3/257 - x_8*x_9) + x_6*(167*C1/257 + 424*C2/257 -
- 167*C3/257 + x_8*x_9) + x_7*(C1 - C2))]
- assert dsolve_sol1 == sol
- assert checksysodesol(eq1, dsolve_sol1) == (True, [0, 0, 0])
- @slow
- def test_neq_order1_type4_slow_check1():
- f, g = symbols("f g", cls=Function)
- x = symbols("x")
- eqs = [Eq(diff(f(x), x), x*f(x) + x**2*g(x) + x),
- Eq(diff(g(x), x), 2*x**2*f(x) + (x + 3*x**2)*g(x) + 1)]
- sol = dsolve(eqs)
- assert checksysodesol(eqs, sol) == (True, [0, 0])
- @slow
- def test_neq_order1_type4_slow_check2():
- f, g, h = symbols("f, g, h", cls=Function)
- x = Symbol("x")
- eqs = [
- Eq(Derivative(f(x), x), x*h(x) + f(x) + g(x) + 1),
- Eq(Derivative(g(x), x), x*g(x) + f(x) + h(x) + 10),
- Eq(Derivative(h(x), x), x*f(x) + x + g(x) + h(x))
- ]
- with dotprodsimp(True):
- sol = dsolve(eqs)
- assert checksysodesol(eqs, sol) == (True, [0, 0, 0])
- def _neq_order1_type4_slow3():
- f, g = symbols("f g", cls=Function)
- x = symbols("x")
- eqs = [
- Eq(Derivative(f(x), x), x*f(x) + g(x) + sin(x)),
- Eq(Derivative(g(x), x), x**2 + x*g(x) - f(x))
- ]
- sol = [
- Eq(f(x), (C1/2 - I*C2/2 - I*Integral(x**2*exp(-x**2/2 - I*x)/2 +
- x**2*exp(-x**2/2 + I*x)/2 + I*exp(-x**2/2 - I*x)*sin(x)/2 -
- I*exp(-x**2/2 + I*x)*sin(x)/2, x)/2 + Integral(-I*x**2*exp(-x**2/2
- - I*x)/2 + I*x**2*exp(-x**2/2 + I*x)/2 + exp(-x**2/2 -
- I*x)*sin(x)/2 + exp(-x**2/2 + I*x)*sin(x)/2, x)/2)*exp(x**2/2 +
- I*x) + (C1/2 + I*C2/2 + I*Integral(x**2*exp(-x**2/2 - I*x)/2 +
- x**2*exp(-x**2/2 + I*x)/2 + I*exp(-x**2/2 - I*x)*sin(x)/2 -
- I*exp(-x**2/2 + I*x)*sin(x)/2, x)/2 + Integral(-I*x**2*exp(-x**2/2
- - I*x)/2 + I*x**2*exp(-x**2/2 + I*x)/2 + exp(-x**2/2 -
- I*x)*sin(x)/2 + exp(-x**2/2 + I*x)*sin(x)/2, x)/2)*exp(x**2/2 -
- I*x)),
- Eq(g(x), (-I*C1/2 + C2/2 + Integral(x**2*exp(-x**2/2 - I*x)/2 +
- x**2*exp(-x**2/2 + I*x)/2 + I*exp(-x**2/2 - I*x)*sin(x)/2 -
- I*exp(-x**2/2 + I*x)*sin(x)/2, x)/2 -
- I*Integral(-I*x**2*exp(-x**2/2 - I*x)/2 + I*x**2*exp(-x**2/2 +
- I*x)/2 + exp(-x**2/2 - I*x)*sin(x)/2 + exp(-x**2/2 +
- I*x)*sin(x)/2, x)/2)*exp(x**2/2 - I*x) + (I*C1/2 + C2/2 +
- Integral(x**2*exp(-x**2/2 - I*x)/2 + x**2*exp(-x**2/2 + I*x)/2 +
- I*exp(-x**2/2 - I*x)*sin(x)/2 - I*exp(-x**2/2 + I*x)*sin(x)/2,
- x)/2 + I*Integral(-I*x**2*exp(-x**2/2 - I*x)/2 +
- I*x**2*exp(-x**2/2 + I*x)/2 + exp(-x**2/2 - I*x)*sin(x)/2 +
- exp(-x**2/2 + I*x)*sin(x)/2, x)/2)*exp(x**2/2 + I*x))
- ]
- return eqs, sol
- def test_neq_order1_type4_slow3():
- eqs, sol = _neq_order1_type4_slow3()
- assert dsolve_system(eqs, simplify=False, doit=False) == [sol]
- # XXX: dsolve gives an error in integration:
- # assert dsolve(eqs) == sol
- # https://github.com/sympy/sympy/issues/20155
- @slow
- def test_neq_order1_type4_slow_check3():
- eqs, sol = _neq_order1_type4_slow3()
- assert checksysodesol(eqs, sol) == (True, [0, 0])
- @tooslow
- @XFAIL
- def test_linear_3eq_order1_type4_long_dsolve_slow_xfail():
- eq, sol = _linear_3eq_order1_type4_long()
- dsolve_sol = dsolve(eq)
- dsolve_sol1 = [_simpsol(sol) for sol in dsolve_sol]
- assert dsolve_sol1 == sol
- @tooslow
- def test_linear_3eq_order1_type4_long_dsolve_dotprodsimp():
- eq, sol = _linear_3eq_order1_type4_long()
- # XXX: Only works with dotprodsimp see
- # test_linear_3eq_order1_type4_long_dsolve_slow_xfail which is too slow
- with dotprodsimp(True):
- dsolve_sol = dsolve(eq)
- dsolve_sol1 = [_simpsol(sol) for sol in dsolve_sol]
- assert dsolve_sol1 == sol
- @tooslow
- def test_linear_3eq_order1_type4_long_check():
- eq, sol = _linear_3eq_order1_type4_long()
- assert checksysodesol(eq, sol) == (True, [0, 0, 0])
- def test_dsolve_system():
- f, g = symbols("f g", cls=Function)
- x = symbols("x")
- eqs = [Eq(f(x).diff(x), f(x) + g(x)), Eq(g(x).diff(x), f(x) + g(x))]
- funcs = [f(x), g(x)]
- sol = [[Eq(f(x), -C1 + C2*exp(2*x)), Eq(g(x), C1 + C2*exp(2*x))]]
- assert dsolve_system(eqs, funcs=funcs, t=x, doit=True) == sol
- raises(ValueError, lambda: dsolve_system(1))
- raises(ValueError, lambda: dsolve_system(eqs, 1))
- raises(ValueError, lambda: dsolve_system(eqs, funcs, 1))
- raises(ValueError, lambda: dsolve_system(eqs, funcs[:1], x))
- eq = (Eq(f(x).diff(x), 12 * f(x) - 6 * g(x)), Eq(g(x).diff(x) ** 2, 11 * f(x) + 3 * g(x)))
- raises(NotImplementedError, lambda: dsolve_system(eq) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)]) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)], t=x) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)], t=x, ics={f(0): 1, g(0): 1}) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, t=x, ics={f(0): 1, g(0): 1}) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, ics={f(0): 1, g(0): 1}) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)], ics={f(0): 1, g(0): 1}) == ([], []))
- def test_dsolve():
- f, g = symbols('f g', cls=Function)
- x, y = symbols('x y')
- eqs = [f(x).diff(x) - x, f(x).diff(x) + x]
- with raises(ValueError):
- dsolve(eqs)
- eqs = [f(x, y).diff(x)]
- with raises(ValueError):
- dsolve(eqs)
- eqs = [f(x, y).diff(x)+g(x).diff(x), g(x).diff(x)]
- with raises(ValueError):
- dsolve(eqs)
- @slow
- def test_higher_order1_slow1():
- x, y = symbols("x y", cls=Function)
- t = symbols("t")
- eq = [
- Eq(diff(x(t),t,t), (log(t)+t**2)*diff(x(t),t)+(log(t)+t**2)*3*diff(y(t),t)),
- Eq(diff(y(t),t,t), (log(t)+t**2)*2*diff(x(t),t)+(log(t)+t**2)*9*diff(y(t),t))
- ]
- sol, = dsolve_system(eq, simplify=False, doit=False)
- # The solution is too long to write out explicitly and checkodesol is too
- # slow so we test for particular values of t:
- for e in eq:
- res = (e.lhs - e.rhs).subs({sol[0].lhs:sol[0].rhs, sol[1].lhs:sol[1].rhs})
- res = res.subs({d: d.doit(deep=False) for d in res.atoms(Derivative)})
- assert ratsimp(res.subs(t, 1)) == 0
- def test_second_order_type2_slow1():
- x, y, z = symbols('x, y, z', cls=Function)
- t, l = symbols('t, l')
- eqs1 = [Eq(Derivative(x(t), (t, 2)), t*(2*x(t) + y(t))),
- Eq(Derivative(y(t), (t, 2)), t*(-x(t) + 2*y(t)))]
- sol1 = [Eq(x(t), I*C1*airyai(t*(2 - I)**(S(1)/3)) + I*C2*airybi(t*(2 - I)**(S(1)/3)) - I*C3*airyai(t*(2 +
- I)**(S(1)/3)) - I*C4*airybi(t*(2 + I)**(S(1)/3))),
- Eq(y(t), C1*airyai(t*(2 - I)**(S(1)/3)) + C2*airybi(t*(2 - I)**(S(1)/3)) + C3*airyai(t*(2 + I)**(S(1)/3)) +
- C4*airybi(t*(2 + I)**(S(1)/3)))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- @tooslow
- @XFAIL
- def test_nonlinear_3eq_order1_type1():
- a, b, c = symbols('a b c')
- eqs = [
- a * f(x).diff(x) - (b - c) * g(x) * h(x),
- b * g(x).diff(x) - (c - a) * h(x) * f(x),
- c * h(x).diff(x) - (a - b) * f(x) * g(x),
- ]
- assert dsolve(eqs) # NotImplementedError
- @XFAIL
- def test_nonlinear_3eq_order1_type4():
- eqs = [
- Eq(f(x).diff(x), (2*h(x)*g(x) - 3*g(x)*h(x))),
- Eq(g(x).diff(x), (4*f(x)*h(x) - 2*h(x)*f(x))),
- Eq(h(x).diff(x), (3*g(x)*f(x) - 4*f(x)*g(x))),
- ]
- dsolve(eqs) # KeyError when matching
- # sol = ?
- # assert dsolve_sol == sol
- # assert checksysodesol(eqs, dsolve_sol) == (True, [0, 0, 0])
- @tooslow
- @XFAIL
- def test_nonlinear_3eq_order1_type3():
- eqs = [
- Eq(f(x).diff(x), (2*f(x)**2 - 3 )),
- Eq(g(x).diff(x), (4 - 2*h(x) )),
- Eq(h(x).diff(x), (3*h(x) - 4*f(x)**2)),
- ]
- dsolve(eqs) # Not sure if this finishes...
- # sol = ?
- # assert dsolve_sol == sol
- # assert checksysodesol(eqs, dsolve_sol) == (True, [0, 0, 0])
- @XFAIL
- def test_nonlinear_3eq_order1_type5():
- eqs = [
- Eq(f(x).diff(x), f(x)*(2*f(x) - 3*g(x))),
- Eq(g(x).diff(x), g(x)*(4*g(x) - 2*h(x))),
- Eq(h(x).diff(x), h(x)*(3*h(x) - 4*f(x))),
- ]
- dsolve(eqs) # KeyError
- # sol = ?
- # assert dsolve_sol == sol
- # assert checksysodesol(eqs, dsolve_sol) == (True, [0, 0, 0])
- def test_linear_2eq_order1():
- x, y, z = symbols('x, y, z', cls=Function)
- k, l, m, n = symbols('k, l, m, n', Integer=True)
- t = Symbol('t')
- x0, y0 = symbols('x0, y0', cls=Function)
- eq1 = (Eq(diff(x(t),t), x(t) + y(t) + 9), Eq(diff(y(t),t), 2*x(t) + 5*y(t) + 23))
- sol1 = [Eq(x(t), C1*exp(t*(sqrt(6) + 3)) + C2*exp(t*(-sqrt(6) + 3)) - Rational(22, 3)), \
- Eq(y(t), C1*(2 + sqrt(6))*exp(t*(sqrt(6) + 3)) + C2*(-sqrt(6) + 2)*exp(t*(-sqrt(6) + 3)) - Rational(5, 3))]
- assert checksysodesol(eq1, sol1) == (True, [0, 0])
- eq2 = (Eq(diff(x(t),t), x(t) + y(t) + 81), Eq(diff(y(t),t), -2*x(t) + y(t) + 23))
- sol2 = [Eq(x(t), (C1*cos(sqrt(2)*t) + C2*sin(sqrt(2)*t))*exp(t) - Rational(58, 3)), \
- Eq(y(t), (-sqrt(2)*C1*sin(sqrt(2)*t) + sqrt(2)*C2*cos(sqrt(2)*t))*exp(t) - Rational(185, 3))]
- assert checksysodesol(eq2, sol2) == (True, [0, 0])
- eq3 = (Eq(diff(x(t),t), 5*t*x(t) + 2*y(t)), Eq(diff(y(t),t), 2*x(t) + 5*t*y(t)))
- sol3 = [Eq(x(t), (C1*exp(2*t) + C2*exp(-2*t))*exp(Rational(5, 2)*t**2)), \
- Eq(y(t), (C1*exp(2*t) - C2*exp(-2*t))*exp(Rational(5, 2)*t**2))]
- assert checksysodesol(eq3, sol3) == (True, [0, 0])
- eq4 = (Eq(diff(x(t),t), 5*t*x(t) + t**2*y(t)), Eq(diff(y(t),t), -t**2*x(t) + 5*t*y(t)))
- sol4 = [Eq(x(t), (C1*cos((t**3)/3) + C2*sin((t**3)/3))*exp(Rational(5, 2)*t**2)), \
- Eq(y(t), (-C1*sin((t**3)/3) + C2*cos((t**3)/3))*exp(Rational(5, 2)*t**2))]
- assert checksysodesol(eq4, sol4) == (True, [0, 0])
- eq5 = (Eq(diff(x(t),t), 5*t*x(t) + t**2*y(t)), Eq(diff(y(t),t), -t**2*x(t) + (5*t+9*t**2)*y(t)))
- sol5 = [Eq(x(t), (C1*exp((sqrt(77)/2 + Rational(9, 2))*(t**3)/3) + \
- C2*exp((-sqrt(77)/2 + Rational(9, 2))*(t**3)/3))*exp(Rational(5, 2)*t**2)), \
- Eq(y(t), (C1*(sqrt(77)/2 + Rational(9, 2))*exp((sqrt(77)/2 + Rational(9, 2))*(t**3)/3) + \
- C2*(-sqrt(77)/2 + Rational(9, 2))*exp((-sqrt(77)/2 + Rational(9, 2))*(t**3)/3))*exp(Rational(5, 2)*t**2))]
- assert checksysodesol(eq5, sol5) == (True, [0, 0])
- eq6 = (Eq(diff(x(t),t), 5*t*x(t) + t**2*y(t)), Eq(diff(y(t),t), (1-t**2)*x(t) + (5*t+9*t**2)*y(t)))
- sol6 = [Eq(x(t), C1*x0(t) + C2*x0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t)), \
- Eq(y(t), C1*y0(t) + C2*(y0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t) + \
- exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)))]
- s = dsolve(eq6)
- assert s == sol6 # too complicated to test with subs and simplify
- # assert checksysodesol(eq10, sol10) == (True, [0, 0]) # this one fails
- def test_nonlinear_2eq_order1():
- x, y, z = symbols('x, y, z', cls=Function)
- t = Symbol('t')
- eq1 = (Eq(diff(x(t),t),x(t)*y(t)**3), Eq(diff(y(t),t),y(t)**5))
- sol1 = [
- Eq(x(t), C1*exp((-1/(4*C2 + 4*t))**(Rational(-1, 4)))),
- Eq(y(t), -(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), C1*exp(-1/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), (-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), C1*exp(-I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), -I*(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), C1*exp(I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), I*(-1/(4*C2 + 4*t))**Rational(1, 4))]
- assert dsolve(eq1) == sol1
- assert checksysodesol(eq1, sol1) == (True, [0, 0])
- eq2 = (Eq(diff(x(t),t), exp(3*x(t))*y(t)**3),Eq(diff(y(t),t), y(t)**5))
- sol2 = [
- Eq(x(t), -log(C1 - 3/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), -(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), -log(C1 + 3/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), (-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), -log(C1 + 3*I/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), -I*(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), -log(C1 - 3*I/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), I*(-1/(4*C2 + 4*t))**Rational(1, 4))]
- assert dsolve(eq2) == sol2
- assert checksysodesol(eq2, sol2) == (True, [0, 0])
- eq3 = (Eq(diff(x(t),t), y(t)*x(t)), Eq(diff(y(t),t), x(t)**3))
- tt = Rational(2, 3)
- sol3 = [
- Eq(x(t), 6**tt/(6*(-sinh(sqrt(C1)*(C2 + t)/2)/sqrt(C1))**tt)),
- Eq(y(t), sqrt(C1 + C1/sinh(sqrt(C1)*(C2 + t)/2)**2)/3)]
- assert dsolve(eq3) == sol3
- # FIXME: assert checksysodesol(eq3, sol3) == (True, [0, 0])
- eq4 = (Eq(diff(x(t),t),x(t)*y(t)*sin(t)**2), Eq(diff(y(t),t),y(t)**2*sin(t)**2))
- sol4 = {Eq(x(t), -2*exp(C1)/(C2*exp(C1) + t - sin(2*t)/2)), Eq(y(t), -2/(C1 + t - sin(2*t)/2))}
- assert dsolve(eq4) == sol4
- # FIXME: assert checksysodesol(eq4, sol4) == (True, [0, 0])
- eq5 = (Eq(x(t),t*diff(x(t),t)+diff(x(t),t)*diff(y(t),t)), Eq(y(t),t*diff(y(t),t)+diff(y(t),t)**2))
- sol5 = {Eq(x(t), C1*C2 + C1*t), Eq(y(t), C2**2 + C2*t)}
- assert dsolve(eq5) == sol5
- assert checksysodesol(eq5, sol5) == (True, [0, 0])
- eq6 = (Eq(diff(x(t),t),x(t)**2*y(t)**3), Eq(diff(y(t),t),y(t)**5))
- sol6 = [
- Eq(x(t), 1/(C1 - 1/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), -(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), 1/(C1 + (-1/(4*C2 + 4*t))**(Rational(-1, 4)))),
- Eq(y(t), (-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), 1/(C1 + I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), -I*(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), 1/(C1 - I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), I*(-1/(4*C2 + 4*t))**Rational(1, 4))]
- assert dsolve(eq6) == sol6
- assert checksysodesol(eq6, sol6) == (True, [0, 0])
- @slow
- def test_nonlinear_3eq_order1():
- x, y, z = symbols('x, y, z', cls=Function)
- t, u = symbols('t u')
- eq1 = (4*diff(x(t),t) + 2*y(t)*z(t), 3*diff(y(t),t) - z(t)*x(t), 5*diff(z(t),t) - x(t)*y(t))
- sol1 = [Eq(4*Integral(1/(sqrt(-4*u**2 - 3*C1 + C2)*sqrt(-4*u**2 + 5*C1 - C2)), (u, x(t))),
- C3 - sqrt(15)*t/15), Eq(3*Integral(1/(sqrt(-6*u**2 - C1 + 5*C2)*sqrt(3*u**2 + C1 - 4*C2)),
- (u, y(t))), C3 + sqrt(5)*t/10), Eq(5*Integral(1/(sqrt(-10*u**2 - 3*C1 + C2)*
- sqrt(5*u**2 + 4*C1 - C2)), (u, z(t))), C3 + sqrt(3)*t/6)]
- assert [i.dummy_eq(j) for i, j in zip(dsolve(eq1), sol1)]
- # FIXME: assert checksysodesol(eq1, sol1) == (True, [0, 0, 0])
- eq2 = (4*diff(x(t),t) + 2*y(t)*z(t)*sin(t), 3*diff(y(t),t) - z(t)*x(t)*sin(t), 5*diff(z(t),t) - x(t)*y(t)*sin(t))
- sol2 = [Eq(3*Integral(1/(sqrt(-6*u**2 - C1 + 5*C2)*sqrt(3*u**2 + C1 - 4*C2)), (u, x(t))), C3 +
- sqrt(5)*cos(t)/10), Eq(4*Integral(1/(sqrt(-4*u**2 - 3*C1 + C2)*sqrt(-4*u**2 + 5*C1 - C2)),
- (u, y(t))), C3 - sqrt(15)*cos(t)/15), Eq(5*Integral(1/(sqrt(-10*u**2 - 3*C1 + C2)*
- sqrt(5*u**2 + 4*C1 - C2)), (u, z(t))), C3 + sqrt(3)*cos(t)/6)]
- assert [i.dummy_eq(j) for i, j in zip(dsolve(eq2), sol2)]
- # FIXME: assert checksysodesol(eq2, sol2) == (True, [0, 0, 0])
- def test_C1_function_9239():
- t = Symbol('t')
- C1 = Function('C1')
- C2 = Function('C2')
- C3 = Symbol('C3')
- C4 = Symbol('C4')
- eq = (Eq(diff(C1(t), t), 9*C2(t)), Eq(diff(C2(t), t), 12*C1(t)))
- sol = [Eq(C1(t), 9*C3*exp(6*sqrt(3)*t) + 9*C4*exp(-6*sqrt(3)*t)),
- Eq(C2(t), 6*sqrt(3)*C3*exp(6*sqrt(3)*t) - 6*sqrt(3)*C4*exp(-6*sqrt(3)*t))]
- assert checksysodesol(eq, sol) == (True, [0, 0])
- def test_dsolve_linsystem_symbol():
- eps = Symbol('epsilon', positive=True)
- eq1 = (Eq(diff(f(x), x), -eps*g(x)), Eq(diff(g(x), x), eps*f(x)))
- sol1 = [Eq(f(x), -C1*eps*cos(eps*x) - C2*eps*sin(eps*x)),
- Eq(g(x), -C1*eps*sin(eps*x) + C2*eps*cos(eps*x))]
- assert checksysodesol(eq1, sol1) == (True, [0, 0])
|