首页
学院
直播
问答
悬赏
全部悬赏
发布悬赏
专家入驻
会议
社区
CAE工程师认证
CAE服务
搜索
发布
注册
/
登录
注册领
666
大礼包
大家有什么有限元法解常微分方程的程序(最好用MATLAB编),贴上来讨论一下.
浏览:376742
回答:3
matlab里面的Ode45或者Ode23里面有,看看它的源程序,不详细.
MATLAB
CAE
科学计算及数学建模
计算机辅助系统有几项?分别是什么?
solidworks 能进行有限元分析吗?
关注问题
邀请回答
我来回答
全部回答
(3)
默认
最新
malong
关注
这个问题是不是重复发了啊!
转:
Re:求有限元法解常微分方程的程序(MATLAB编)
euler法---------y(n+1)=yn+h*f(xn,yn)--->显式计算公式
xn=0:.1:1;
y0=1; %赋初值
y_n_plus1=[];
for i=1:length(xn)-1
y_n_plus1=[y_n_plus1;y0+diff(xn([1:2]))*(y0-2*xn(i)/y0)];
y0=y_n_plus1(end);
end
y_n_plus1;
%method2:后退euler法---------y(n+1)=yn+h*f(x(n+1),y(n+1))--->隐式计算公式
xn1=0:.1:1;
y01=1; %赋初值
y_n2=[];
for i=1:length(xn1)-1
y02=y01+diff(xn1([1:2]))*(y01-2*xn1(i)/y01);
y_n2=[y_n2;y01+diff(xn1([1:2]))*(y02-2*xn1(i+1)/y02)];
y01=y_n2(end);
end
%上述两种方法的局部截断误差分别约为h^2*y''(xn)/2,-h^2*y''(xn)/2
%利用中心差分公式的梯形公式可以得到更好的精度
xn2=0:.1:1;
y11=1;
y_n3=[];
for i=1:length(xn2)-1
y03=y11+diff(xn2([1:2]))*(y11-2*xn2(i)/y11);
y_n3=[y_n3;y11+.5*diff(xn2([1:2]))*(y11-2*xn2(i)/y11+y03-2*xn2(i+1)/y03)];
y11=y_n3(end);
end
%建立预测-校正系统的改进euler公式
xnp=0:.1:1;
y21=1;
y_n4=[];
for i=1:length(xnp)-1
y04=y21+diff(xnp([1:2]))*(y21-2*xnp(i)/y21);
y_n4=[y_n4;y21+.5*diff(xnp([1:2]))*(y21-2*xnp(i)/y21+y04-2*xnp(i+1)/y04)];
y21=y_n4(end);
end
%精确的解析解
dy=dsolve('Dy=y-2*x/y','y(0)=1','x');
y_exact=subs(dy,'x',{.1:.1:1});
%ode45的解
f=inline('x-2*t/x','t','x');
[t,Y]=ode45(f,[0,1],1);
cc=flipdim(Y([end:-4:1]),1)';
y_ode=cc([2:end]);
%精度比较
y_compare=[y_n_plus1';y_n2';y_n3';y_n4';y_ode;y_exact];
y_compare_minor=[y_compare(6,:)-y_compare(1,:);...
y_compare(6,:)-y_compare(2,:);y_compare(6,:)-y_compare(3,:);...
y_compare(6,:)-y_compare(4,:);y_compare(6,:)-y_compare(5,:)];
var_y=var(y_compare_minor');
2006年8月23日
评论
点赞
starliu
关注
楼主的提议很好,建议大家讨论一下啊,有机会研究一下ode45和23的源程序。
2006年8月13日
评论
点赞
IF_THEN
关注
由于偏微分方程在理论和实践上的重要性,它的数值解法,长期以来吸引着数学家、物理学家和工程师们的注意。一种数值方法包括它的数学基础和它的实现,都紧紧地依赖与理论数学的发展和计算手段的改善。计算机科学的发展,现代大型高速电子计算机的出现,对数值方法冲击之大,是历史从来未有过的。作为求解偏分方程的一个强有力的手段--有限元方法,正是电子计算机时代的产物。 有限元方法摈弃了刻划自然规律中局部的、瞬时的数学描述,而以大范围的、全过程的数学分析作为自己的出发点。局部和整体,瞬时和全过程,只是以两种不同的角度来描述自然现象。一个过程,既可以被微分方程所描述,又服从相应的变分原理,方法虽然不同,但却从两个不同的侧面来反映同一自然规律。
2006年8月4日
评论
点赞
没解决?试试专家一对一服务
换一批
推荐阅读
手把手教你ABAQUS耗能钢节点建模与分析
1点
¥169
STKO 助力 OpenSEES系列:平面混凝土框架cyclic pushover 分析
OpenSEES抗震笔记
免费
基于fluent汽车TWC自然对流换热仿真(无声视频)
Natural Awakening、
¥5
Isigh中试验设计与近似模型在优化设计中的应用
TreatLee
¥55
[免费案例]Ensight案例教程分享
Oler
免费
Altair solidThinking认证教育合作计划-学生案例大赛即将开启!
ALTAIR
免费
SPEOS室内照明品质分析【微信公众号:艾迪捷】
IDAJ中国
¥99
半小时搞定复杂钢结构仿真
技术邻直播
免费
3D打印技术带来的设计和生产变革
ALTAIR
免费
CVPR2020自动驾驶拓展会议——端到端深度学习的自动驾驶
Hollis张
免费
无CAE经验工程师如何快速完成行星架仿真分析
技术邻直播
免费
刹车盘热应力分析
笛声
¥23
湖南大学结构力学考研初试重点视频课程
hnu
¥500
WORKBENCH_Dyna 钢管冲击刚性墙
吴文泽
免费
UG技巧教学(提高班)
UG设计大咖
免费
Mathcad基本操作
HYT
¥89
网架设计之SFCAD第六节加工图下
高工
¥128
遗传算法解决(TSP)商旅问题matlab代码超详细解说(适用于新手)
活泼可男_matlab教学
¥10
汽车仪表模具模流分析的实战讲解
北卡
免费
Altair基于仿真驱动的制造工艺解决方案
ALTAIR
免费
技术邻APP
工程师
必备
项目客服
培训客服
平台客服
TOP
Re:求有限元法解常微分方程的程序(MATLAB编)
xn=0:.1:1;
y0=1; %赋初值
y_n_plus1=[];
for i=1:length(xn)-1
y_n_plus1=[y_n_plus1;y0+diff(xn([1:2]))*(y0-2*xn(i)/y0)];
y0=y_n_plus1(end);
end
y_n_plus1;
%method2:后退euler法---------y(n+1)=yn+h*f(x(n+1),y(n+1))--->隐式计算公式
xn1=0:.1:1;
y01=1; %赋初值
y_n2=[];
for i=1:length(xn1)-1
y02=y01+diff(xn1([1:2]))*(y01-2*xn1(i)/y01);
y_n2=[y_n2;y01+diff(xn1([1:2]))*(y02-2*xn1(i+1)/y02)];
y01=y_n2(end);
end
%上述两种方法的局部截断误差分别约为h^2*y''(xn)/2,-h^2*y''(xn)/2
%利用中心差分公式的梯形公式可以得到更好的精度
xn2=0:.1:1;
y11=1;
y_n3=[];
for i=1:length(xn2)-1
y03=y11+diff(xn2([1:2]))*(y11-2*xn2(i)/y11);
y_n3=[y_n3;y11+.5*diff(xn2([1:2]))*(y11-2*xn2(i)/y11+y03-2*xn2(i+1)/y03)];
y11=y_n3(end);
end
%建立预测-校正系统的改进euler公式
xnp=0:.1:1;
y21=1;
y_n4=[];
for i=1:length(xnp)-1
y04=y21+diff(xnp([1:2]))*(y21-2*xnp(i)/y21);
y_n4=[y_n4;y21+.5*diff(xnp([1:2]))*(y21-2*xnp(i)/y21+y04-2*xnp(i+1)/y04)];
y21=y_n4(end);
end
%精确的解析解
dy=dsolve('Dy=y-2*x/y','y(0)=1','x');
y_exact=subs(dy,'x',{.1:.1:1});
%ode45的解
f=inline('x-2*t/x','t','x');
[t,Y]=ode45(f,[0,1],1);
cc=flipdim(Y([end:-4:1]),1)';
y_ode=cc([2:end]);
%精度比较
y_compare=[y_n_plus1';y_n2';y_n3';y_n4';y_ode;y_exact];
y_compare_minor=[y_compare(6,:)-y_compare(1,:);...
y_compare(6,:)-y_compare(2,:);y_compare(6,:)-y_compare(3,:);...
y_compare(6,:)-y_compare(4,:);y_compare(6,:)-y_compare(5,:)];
var_y=var(y_compare_minor');