- 积分
- 0
- 注册时间
- 2008-3-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2010-9-14 11:14:14
|
显示全部楼层
来自 山东济南
4# lengyunfeng
对不起,前几天太忙,现在才来回版主的帖子,我把代码贴出来
- function [E,U,G]=wuxingjie(stress,strain)
- %E:弹模,MPa
- %U:泊松比
- %G:剪切模量
- %stress:应力向量(1*6或者6*1),MPa,前三个为各面上的正应力,后三个为剪应力
- %strain:应变向量(1*6或者6*1),前三个为各面上的正应变,后三个为剪应变
- %运行环境:winxp+matlab 7.0
- %将stress与strain向量转变化列向量,以便以矩阵操作
- stress=[20.0298E-06 20.0298E-06 -145.785E-06 -14.9050E-21 -12.1764E-06 -12.1764E-06];
- strain=[-4.52486E+06 -4.52486E+06 -45.6361E+06 -1.84773E-09 -1.50947E+06 -1.50947E+06];
- if size(stress,2)==6
- stress=stress';
- end
- if size(strain,2)==6
- strain=strain';
- end
- syms e u g%定义三个未知量为字符变量
- a=(eye(3)-ones(3,3)+diag([1/u,1/u,1/u]))*u/e;%生成系数阵左上角子阵
- b=eye(3)/g;%生成系数阵右下角子阵
- c=[a,zeros(3,3);zeros(3,3),b];%生成系数阵
- d=c*stress-strain;%构建方程对应的函数
- [e1,u1]=solve(d(1),d(2));%解e和u
- g1=solve(d(4));%解g
- %将三个字符精确解转变为双精度解
- E=double(e1);
- U=double(u1);
- G=double(g1);
复制代码
以下是出错提示
- ??? Error using ==> mupadmex
- Error in MuPAD command: DOUBLE cannot convert the input expression into a double array.
- If the input expression contains a symbolic variable, use the VPA function instead.
- Error in ==> sym.sym>sym.double at 936
- Xstr = mupadmex('symobj::double', S.s, 0);
- Error in ==> strain_stress at 25
- E=double(e1);
复制代码
我的matlab版本是2010.
如果我把后三行改成:fprintf('%d %d %d','e1 u1 g1')就可以得到正确答案。 |
|