首页
学院
直播
问答
悬赏
全部悬赏
发布悬赏
专家入驻
会议
社区
CAE工程师认证
CAE服务
搜索
发布
注册
/
登录
注册领
666
大礼包
大家有什么有限元法解常微分方程的程序(最好用MATLAB编),贴上来讨论一下.
浏览:376796
回答: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日
评论
点赞
没解决?试试专家一对一服务
换一批
推荐阅读
钢结构S1 ABAQUS经典金属弹塑性本构及模拟应用
1点
¥100
BabyJade-Fluent meshing建筑外流场(SCDM建模)
Baby Jade
¥60
慧加新规范解决方案详解之大跨连续弯梁桥精细化分析(7DOF)
敦樸DUNPU
免费
B&K声级计全系列介绍及新款解密
HBK声学与振动
免费
abaqus lamb波传播分析
abaquser
¥25
人工智能工程应用实例: 发动机排放数据学习及预测
IDAJ中国
¥99
HBM单点称重传感器及其应用
HBK测试与测量
免费
七步台阶法暗挖隧道施工
一直那么好
¥8.8
workbench纯六面体网格划分
八号楼停水
¥100
基于workbench钢板弹簧的有限元分析(强度与变形)
lz1234
¥80
3D打印技术带来的设计和生产变革
ALTAIR
免费
Hypermesh二次开发系列教程_部件重命名
一段时光
免费
基于hypermesh+nastran的汽车乘员舱声腔模态分析(ppt总结及模型可下载练习巩固)
Charming
¥10
2018 OptiStruct用户大会周明博士“仿真驱动设计”演讲
ALTAIR
免费
ABAQUS钢管混凝土柱温度场及耐火性能分析(未完)
地下结构设计
¥40
想学模具设计从基础分模开始学习,零基础实体分模教程
骑猪的猪贩子
免费
Altair二次开发答疑&典型案例解读
ALTAIR
¥10
R语言绘图课程学习
hohai
¥2.7
Adams 管柱电子助力转向系统建模
y歪
¥150
向量微积分理论基础
引垂思汀
¥50
技术邻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');