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.
1 个评论
Upload your code
采纳的回答
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 个评论
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
For me the code runs fine. Is there a copy paste mistake? Which Release do you use?
Thanks for your reply. I have checked carefully, there is no paste mistake. R2017a is used.

Works for me
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?
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)
Nice. Problem solved?
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
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.
If this answer was helpful to you, please accept it.
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Assumptions 的更多信息
标签
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
