solve a partial differential equation

Hi! I want to solve a second partial differential equation.
The general solution is
Which command should I use to get the general solution? I think dsolve doesn't work well. Thanks for helping me.

 採用された回答

Stephan
Stephan 2018 年 10 月 21 日

0 投票

Hi,
the following code solves the equation with the initial conditions:
y(0)=0
dy/dx(0)=0
Then it rewrites the result in terms of sin ans cos:
syms y(x) x E I N P c l Dyt(x)
eqn = E*I*diff(y,x,2)+N*y == -P*c/l*x;
[eqns, vars] = reduceDifferentialOrder(eqn,y);
conds = [y(0)==0,Dyt(0)==0];
sol = dsolve(eqns,conds);
sol_sin = simplify(rewrite(sol.y,'sin'))
I think that was the question.
Best regards
Stephan

10 件のコメント

Yuchi Kang
Yuchi Kang 2018 年 10 月 21 日
Thanks for helping me. But it seems wrong.
In addition, reduceDifferentialOrder is used here. Could you please tell me a little bit about the reason?
Best regards
Yuchi Kang
Stephan
Stephan 2018 年 10 月 21 日
For me the code runs fine. Is there a copy paste mistake? Which Release do you use?
Yuchi Kang
Yuchi Kang 2018 年 10 月 21 日
Thanks for your reply. I have checked carefully, there is no paste mistake. R2017a is used.
madhan ravi
madhan ravi 2018 年 10 月 21 日
Works for me
Stephan
Stephan 2018 年 10 月 21 日
編集済み: Stephan 2018 年 10 月 21 日
Im using R2018b - let me check this. Maybe there is a difference in dsolve.
Can you show us the result of typing this in commmand line:
eqns
vars
after executing the code ans getting the error?
Yuchi Kang
Yuchi Kang 2018 年 10 月 21 日
Here is the photo for executing the two commands.
I try to use R2018a. It does work and here is the result
sol_sin =
(N^(1/2)*P*c*x*sin((x*((-E*I*N)^(1/2)*1i + E^(1/2)*I^(1/2)*N^(1/2)))/(E*I))*1i - E^(1/2)*I^(1/2)*P*c*cos((N^(1/2)*x)/(E^(1/2)*I^(1/2)))*1i + E^(1/2)*I^(1/2)*P*c*cos((x*((-E*I*N)^(1/2)*1i + E^(1/2)*I^(1/2)*N^(1/2)))/(E*I))*1i)/(N^(3/2)*l)
Stephan
Stephan 2018 年 10 月 21 日
Nice. Problem solved?
Yuchi Kang
Yuchi Kang 2018 年 10 月 21 日
Yes. Almost done. Thanks. But I have a minor problem with the results. If I want to use this equation k^2=N/E/I to simplify my results. May I use the subs command?
Best regards Yuchi Kang
Stephan
Stephan 2018 年 10 月 21 日
編集済み: Stephan 2018 年 10 月 21 日
yes - this is what subs is for - i would suggest to this before reducing the differential order:
syms y(x) x E I N P c l Dyt(x) k
eqn = diff(y,x,2)+N/E*I*y == -P*c/(l*E*I)*x;
eqn = subs(eqn,(N/E*I),k^2)
[eqns, vars] = reduceDifferentialOrder(eqn,y);
conds = [y(0)==0,Dyt(0)==0];
sol = dsolve(eqns,conds)
sol_sin = rewrite(sol.y,'sin')
which gives:
sol_sin =
- ((P*c*1i)/(2*E*I*k^3*l) + (P*c*(- 1 + k*x*1i)*(sin(k*x)*1i - 2*sin((k*x)/2)^2 + 1)*1i)/(2*E*I*k^3*l))*(sin(k*x)*1i + 2*sin((k*x)/2)^2 - 1) - ((P*c*1i)/(2*E*I*k^3*l) + (P*c*(1 + k*x*1i)*(sin(k*x)*1i + 2*sin((k*x)/2)^2 - 1)*1i)/(2*E*I*k^3*l))*(sin(k*x)*1i - 2*sin((k*x)/2)^2 + 1)
You can also get rid of the imaginary parts of the results by making some assumptions. For example i suspect E to be youngs modul, which should be a real number and positive always:
syms y(x) x E I N P c l Dyt(x) k
eqn = diff(y,x,2)+N/E*I*y == -P*c/(l*E*I)*x;
eqn = subs(eqn,(N/E*I),k^2)
[eqns, vars] = reduceDifferentialOrder(eqn,y);
conds = [y(0)==0,Dyt(0)==0];
assume([x P c l k],'real');
assumeAlso(c>=0 & l>=0 & k>=0);
assumptions
sol = dsolve(eqns,conds)
sol_sin = rewrite(sol.y,'sin')
results in:
sol_sin =
(P*c*sin(k*x))/(E*I*k^3*l) - (P*c*x)/(E*I*k^2*l)
You should check if the assumptions i made are correct in your case and modify them if needed.
Stephan
Stephan 2018 年 10 月 21 日
If this answer was helpful to you, please accept it.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

製品

リリース

R2017a

タグ

質問済み:

2018 年 10 月 20 日

編集済み:

2018 年 10 月 21 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by