dsolve Warning: Explicit solution could not be found; implicit solution returned.
古いコメントを表示
I am trying to solve three second order ODEs with initial conditions. I am using the symbolic toolbox, but the solver returns this warning: "Explicit solution could not be found; implicit solution returned. ". How can I solve this problem? Thanks! Here is the code:
-----
clear
clc
syms x1 x2 x3 y
eq1 = '500*D2x2 + 35600*Dx2 + (465000+3530)*x2 - 35600*Dx1 -465000*x1 = 0';
eq2 = '750*D2x1 + (35600+28.4)*Dx1 + (465000+137)*x1 - 35600*Dx2 - 465000*x2 - 28.4*Dx3 - 137*x3 = 0';
eq3 = '200*D2x3 + 28.4*Dx3 + 137*x3 - 28.4*Dx1 -137*x1 = 0';
IC = 'x1(0) = -0.02, Dx1(0) = -0.5, x2(0) = 0.3, Dx2(0) = 0, x3(0) = -0.01, Dx3(0) = -0.02';
%using dsolve
solution = dsolve(eq1,eq2,eq3,IC,'IgnoreAnalyticConstraints', false);
--------
3 件のコメント
Walter Roberson
2016 年 4 月 14 日
I notice that you do not give initial conditions for D2x1, D2x2, or D2x3; that would make it more difficult to find the solution.
The solution, if it exists, is a long one that would take a lot of computing.
Zhuang Li
2016 年 4 月 14 日
John D'Errico
2016 年 4 月 14 日
These are NOT higher order differential equations UNLESS you have done something that you do NOT show. As it is, they are linear ODEs, if those otherwise undefined variables are just constants.
Perhaps you intend for the variable D2x2 to be the second derivative of x2?
If so, you have not defined it, and dsolve does not automatically recognize that as you may intend.
回答 (1 件)
Walter Roberson
2016 年 4 月 15 日
Explicit solutions for this are rather difficult, if not impossible. If you dsolve using the Dx1(0) Dx2(0), Dx3(0) initial conditions, then you get out x1, x2, x3 each defined in terms of the roots of a 6th order polynomial together with 6 constants of integration.
Let
RR(K) = RootOf(750000*Z^6 + 89134900*Z^5 + 1183105830*Z^4 + 514494794*Z^3 + 4246906507*Z^2 + 638336960*Z + 2248786500)(K)
That is, RR(K) is the K'th root of that 6th order polynomial. Let C(1:6) be the constants of integration. Then
x1(t) = symsum(exp(RR(K)*t) * C(K), K, 1, 6)
x2(t) = (21607094277505075/291789001074312129402) * (symum(RR(K)^3*exp(RR(K)*t)*C[K], K, 1 ,6)) - (4745248403125675/3814235308160942868) * (symsum(RR(K)^2*exp(RR*t)*C[K], K, 1, 6)) +(81029036357728520/145894500537156064701) * (symsum(RR(K)*exp(RR(K)*t)*C[K], K, 1, 6)) +(48261432453946366625/48631500179052021567) * (symsum(exp(RR(K)*t)*C[K], K, 1, 6)) -(174680299089250/3943094609112326073) * (symsum(RR(K)^4*exp(RR(K)*t)*C[K], K, 1, 6)) -(21156103750000/48631500179052021567) * (symsum(RR(K)^5*exp(RR(K)*t)*C[K], K, 1, 6))
x3(t) = (3058395441939178258/378338126849548425) * (symsum(RR^2*exp(RR*t)*_C[_a], K, 6)) - (18273320172338572144/3405043141645935825) * (symsum(RR*exp(RR*t)*_C[_a], K, 1, 6)) + (1155961227035432123/45400575221945811) * (symsum(exp(RR*t)*_C[_a], K, 1, 6)) - (100301602102228/525875388671187) * (symsum(RR^4*exp(RR*t)*_C[_a], K, 1, 6)) - (1305188310557427992/681008628329187165) * (symsum(RR^3*exp(RR*t)*_C[_a], K, 1, 6)) - (75086319370000/45400575221945811) * (symsum(RR^5*exp(RR*t)*_C[_a], K, 1, 6))
Proceed to work on the initial conditions.
Substitute 0 for t and x1(0) becomes
symsum(C(K), K, 1, 6)
which is C(1) + C(2) + C(3) + C(4) + C(5) + C(6); and that has to equal -0.02, so the sum of the constants of integration is a known constant
x2(0) becomes
(21607094277505075/291789001074312129402) * (symsum(RR(K)^3*C(K), K, 1, 6)) - (4745248403125675/3814235308160942868) * (symsum(RR(K)^2*C(K), K, 1, 6)) + (81029036357728520/145894500537156064701) *(symsum(RR(K)*C(K), K, 1, 6)) + (48261432453946366625/48631500179052021567) *(symsum(C(K), K, 1, 6)) - (174680299089250/3943094609112326073) * (symsum(RR(K)^4*C(K), K, 1, 6)) - (21156103750000/48631500179052021567) * (symsum(RR(K)^5*C(K), K, 1, 6))
and that has to equal 0.3. But this time the sum involves multiples of the roots of the 6th order polynomial. There are no closed form solutions to that polynomial, so this is a equation that the sum of various multiples of roots that we cannot explicitly express must be a simple constant; the implication of that is that the constants of integration themselves must be similar values that cannot be explicitly expressed.
What you can do is solve the roots of the 6th order polynomial numerically, and substitute them in. With the numeric roots and the 6 constants from the initial conditions, it is possible to arrive at numeric values for the constants of integration, and from there, numeric expressions for x1(t), x2(t), x3(t). Each of the expressions will come out looking like a sum of 6 terms, each term being a complex number times exp() of a complex number times t.
If you use a placeholder for the roots, similar to the way I wrote it above, then you can solve a step at a time to find the constants of integration. The first 5 steps you get algebraic solutions with sums of constants times various of the roots multiplied together. The 6th step, I am not sure about yet, as it is taking a fair while even just to simplify the expression (with all the other substitutions done) before doing the final solve. There is the possibility that all of the constants of integration can be expressed in terms of a multinomial in the roots of the 6th degree polynomial, but I would not swear to it; it would not surprise me at all if it turned out that the last of the constants of integration required RootOf to solve (and if it does, then because of back propagation, the others will as well.)
カテゴリ
ヘルプ センター および File Exchange で Calculus についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!