你函数定义的时候只有五个参数,调用的时候却有7个参数。
function k= Bar2D2Node_stiffness(E, A, x1, y1, alpha) 改成
function k = Bar2D2Node_stiffness(E, A, x1, y1, x2, y2, alpha)
基于有限元和MATLAB软件的结构动力学计算和它在工程数值仿真中的应用,包括有限元的基本方法和步骤、结构的动力特性和响应分析、单元的质量矩阵和刚度矩阵的建立及典型结构的动力学分析、工程应用和数值仿真等内容。
求解方法:Nastran 材料库位于Utilities _ Materials _
Material Session File Library菜单下。
选中需要的材料单击Apply按钮就会把相应的材料添加进模型材料中。
nastran是1966年美国国家航空航天局(NASA)为了满足当时航空航天
工业对结构分析的迫切需求主持开发大型应用有限元程序。
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_kuzub(a,x)
%其中a,b,c分别用a(1),a(2),a(3)代替
y=a(1)+a(2)/(x+a(3));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
以下是测试:在Matlab下面输入:
%先由已经的x和已知的a,b,c来产生y,然后通过x,y
%验证一下:能否得到我们刚才所选用的参数a,b,c
x=1:20;
a=1;
b=2;
c=3;
y=zhidao_kuzub([a,b,c],x);
[A,res]=lsqcurvefit('zhidao_kuzub',ones(1,3),x,y);
A
得到的结果:
A =
10029 19451 29007
跟a,b,c的值大致一样。
以下是你的问题:
你设好x,y后,在Matlab下输入:
[A,res]=lsqcurvefit('zhidao_kuzub',ones(1,3),x,y);
A
就可以了。
clc
clear
tic;
% n 是行与列划分的格子数,对整个[0,1][0,1]有n^2个划分,can为方程中的参数k
%这里我们用1,2,3按逆时针来表示一个三角形的各个顶点
% s是一个n^210的关联矩阵,s(i,1)表示第i个三角形,s(i,2),s(i,3),s(i,4)分别表示第i个三角形的1,2,3所对应的顶点
% s(i,5),s(i,6);s(i,7),s(i,8);s(i,9),s(i,10)分别表示顶点1,2,3所代表的坐标
%生成关联矩阵s
%A是总刚矩阵
%声明符号变量x y
n=20;
can=20;
s=zeros(2n^2,10);
h=1/n;
st=1/(2n^2);
A=zeros((n+1)^2,(n+1)^2);
syms x y;
for k=1:1:2n^2
s(k,1)=k;
q=fix(k/(2n));
r=mod(k,(2n));
if (r~=0)
r=r;
else r=2n;q=q-1;
end
if (r<=n)
s(k,2)=q(n+1)+r;
s(k,3)=q(n+1)+r+1;
s(k,4)=(q+1)(n+1)+r+1;
s(k,5)=(r-1)h;
s(k,6)=qh;
s(k,7)=rh;
%%
%
% for x = 1:10
% disp(x)
% end
%
s(k,8)=qh;
s(k,9)=rh;
s(k,10)=(q+1)h;
else
s(k,2)=q(n+1)+r-n;
s(k,3)=(q+1)(n+1)+r-n+1;
s(k,4)=(q+1)(n+1)+r-n;
s(k,5)=(r-n-1)h;
s(k,6)=qh;
s(k,7)=(r-n)h;
s(k,8)=(q+1)h;
s(k,9)=(r-n-1)h;
s(k,10)=(q+1)h;
end
end
%下面生成基函数L(i)表示第i个点顶点的基函数
%生成单刚矩阵d
%生成单刚矩阵并将其加入总纲矩阵
d=zeros(3,3);
B=zeros((n+1)^2,1);
b=zeros(3,1);
%生成A的总刚
for k=1:1:2n^2
L(1)=(1/(2st))((s(k,7)s(k,10)-s(k,9)s(k,8))+(s(k,8)-s(k,10))x+(s(k,9)-s(k,7))y);
L(2)=(1/(2st))((s(k,9)s(k,6)-s(k,5)s(k,10))+(s(k,10)-s(k,6))x+(s(k,5)-s(k,9))y);
L(3)=(1/(2st))((s(k,5)s(k,8)-s(k,7)s(k,6))+(s(k,6)-s(k,8))x+(s(k,7)-s(k,5))y);
for i=1:1:3
for j=i:3
d(i,j)=int(int(((((diff(L(i),x))(diff(L(j),x)))+((diff(L(i),y))(diff(L(j),y))))-((can^2)L(i)L(j))),x,0,1),y,0,1);
d(j,i)=d(i,j);
end
end
for i=1:1:3
for j=1:1:3
A(s(k,(i+1)),s(k,(j+1)))=A(s(k,(i+1)),s(k,(j+1)))+d(i,j);
end
end
for i=1:1:3
b(i)=int(int((L(i)),x,0,1),y,0,1);
B(s(k,(i+1)),1)=B(s(k,(i+1)),1)+b(i);
end
end
%下面根据边界条件来求解有限元方程组Mx=B,齐次边界条件约掉了很多项
M=zeros((n+1)^2,n^2);
j=n^2;
for i=(n^2+n):-1:1
if ((mod(i,(n+1)))~=1)
M(:,j)=A(:,i);
j=j-1;
else continue
end
end
%preanswer是未知点的值是(n+1)^2(n^2)的
preanswer=M\B;
%得到所有节点的值
answer=zeros((n+1)^2,1);
j=1;
for i=1:1:(n^2+n)
if ((mod(i,(n+1)))~=1)
answer(i)=preanswer(j);
j=j+1;
else answer(i)=0;
end
end
%%
%
% for x = 1:10
%
% for x = 1:10
%
% for x = 1:10
% disp(x)
% end
%
% disp(x)
% end
%
% disp(x)
% end
%
%生成求解后的图
Z=zeros((n+1),(n+1));
for i=1:1:(n+1)^2
s=fix(i/(n+1))+1;
r=mod(i,(n+1));
if(r==0)
r=n+1;
s=s-1;
else
end
Z(r,s)=answer(i);
end
[X,Y]=meshgrid(1:-h:0,0:h:1);
surf(X,Y,Z);
toc;
t=toc;
以上就是关于本人按照有限元基础教程写的matlab程序,显示too many inputs arguments,这是怎么回事儿啊全部的内容,包括:本人按照有限元基础教程写的matlab程序,显示too many inputs arguments,这是怎么回事儿啊、matlab有限元结构动力学分析与工程应用的源程序怎么用、matlab调用nastran求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)