找回密码
 注册
Simdroid-非首页
查看: 198|回复: 3

newmark-beta法计算多自由度系统响应

[复制链接]
发表于 2007-2-3 02:19:33 | 显示全部楼层 |阅读模式 来自 上海浦东新区
编了一个用newmark-beta法计算荷载作用下的多自由度系统响应的函数,可是运行时出现以下错误:
>> vtb5(0.1,100);
??? Error: File: e:\MATLAB7\work\vtb6.m Line: 16 Column: 9
The expression to the left of the equals sign is not a valid target for an assignment.

不知哪里出了问题?请教各位高手帮忙

function vtb5 (deltt,tf)
%用newmark-beta法计算荷载作用下的多自由度系统的响应
fid1=fopen('disp','wt');%建立一个位移文件disp.dat
m=2*[1 0 0;0 1 0;0 0 1];
c=1.5*[2 -1 0;-1 2 -1;0 -1 2];
k=50*[2 -1 0;-1 2 -1;0 -1 2];
x0=[1 1 1]';
v0=[1 1 1]';
beta=1/6;
md=inv(m+deltt/2*c+beta*deltt^2*k);
m1=inv(m);
[E,F]=eig(m1*k);
diag(sqrt(F));%计算固有频率
for t=0:deltt:tf;
    f=[2*sin(3.754*t) -2*cos(2.2*t) 1.0*sin(2.8*t)]';
    if t=0; %(line 16)        xdd0=m1*(f-k*x0-c*v0);%计算初始加速度
        
    else
        xdd=md*(f-c*(v0+deltt/2*xdd0)-k*(x0+deltt*v0+(1/2-beta)*deltt^2*xdd0));%计算加速度
        xd=v0+deltt/2*(xdd0+xdd);%计算速度
        x=x0+deltt*v0+deltt^2/2*xdd0+beta*deltt^3*(xdd-xdd0)/deltt;%计算位移
        xdd0=xdd;v0=xd;x0=x;
        fprintf(fid1,'%10.4f',x0);%向文件中写数据
        t %显示计算时间步长
    end
end   
    fid2=fopen('disp','rt');%打开disp.dat文件
    n=tf/deltt;%disp.dat文件中位移的个数
    x=fscanf(fid2,'%f',[3,n]);%将disp.dat文件中的位移写成矩阵
    t=1:n;
    figure('numbertitle','off','name','point1 displacement','pos',[450 180 400 420]);
    plot(t,x(1,t)),grid,xlabel('time*0.1s'),title('点1的位移与时间的关系');
    figure('numbertitle','off','name','point2 displacement','pos',[350 160 400 420]);
    plot(t,x(2,t)),grid,xlabel('time*0.1s'),title('点2的位移与时间的关系');
    figure('numbertitle','off','name','point3 displacement','pos',[250 140 400 420]);
    plot(t,x(3,t)),grid,xlabel('time*0.1s'),title('点3的位移与时间的关系');
发表于 2007-2-3 09:28:23 | 显示全部楼层 来自 江苏南京
Simdroid开发平台
%%%逻辑运算符号不对, 可改为:
%%%%%%
if t==0;
%%%%%%

评分

1

查看全部评分

 楼主| 发表于 2007-2-3 18:26:53 | 显示全部楼层 来自 上海浦东新区
谢谢楼上这位兄弟的回复,犯了个低级错误。。
发表于 2012-12-29 14:34:49 | 显示全部楼层 来自 湖南长沙
请问若是更多自由度,且质量矩阵不为对角阵
我将楼主的程序稍微变了下,可是得出了这样的结果
  1. k=sysK;% K ----- 调用刚度矩阵
  2. m=sysM; % M ----- 调用质量矩阵
  3. c=zeros(51,51);
  4. x0=zeros(51,1);
  5. x0(1:51,1)=1;
  6. v0=zeros(51,1);
  7. v0(1:51,1)=1;
  8. f=zeros(51,1);


  9. m1=inv(m);
  10. [E,F]=eig(m1*k);
  11. fn=diag(sqrt(F));%计算固有频率

  12. beta=1/6;
  13. tf=20;
  14. deltt=0.01;
  15. md=inv(m+deltt/2*c+beta*deltt^2*k);
  16. for t=0:deltt:tf;
  17.     f(1:51,1)=2*sin(3.754*t);
  18.     %    f=[2*sin(3.754*t) -2*cos(2.2*t) 1.0*sin(2.8*t)]';
  19.     if t==0; %(line 16)      
  20.       xdd0=m1*(f-k*x0-c*v0);%计算初始加速度   
  21.     else
  22.         xdd=md*(f-c*(v0+deltt/2*xdd0)-k*(x0+deltt*v0+(1/2-beta)*deltt^2*xdd0));%计算加速度
  23.         xd=v0+deltt/2*(xdd0+xdd);%计算速度
  24.         x=x0+deltt*v0+deltt^2/2*xdd0+beta*deltt^3*(xdd-xdd0)/deltt;%计算位移
  25.         xdd0=xdd;v0=xd;x0=x;
  26.         fprintf(fid1,'%10.4f',x0);%向文件中写数据
  27.         t %显示计算时间步长
  28.     end
  29. end   


  30.     fid2=fopen('disp','rt');%打开disp.dat文件
  31.     n=tf/deltt;%disp.dat文件中位移的个数
  32.     x=fscanf(fid2,'%f',[3,n]);%将disp.dat文件中的位移写成矩阵
  33.     t=1:n;
  34.     figure('numbertitle','off','name','point1 displacement','pos',[450 180 400 420]);
  35.     plot(t,x(1,t)),grid,xlabel('time*0.1s'),title('点1的位移与时间的关系');
  36.     figure('numbertitle','off','name','point2 displacement','pos',[350 160 400 420]);
  37.     plot(t,x(2,t)),grid,xlabel('time*0.1s'),title('点2的位移与时间的关系');
  38.     figure('numbertitle','off','name','point3 displacement','pos',[250 140 400 420]);
  39.     plot(t,x(3,t)),grid,xlabel('time*0.1s'),title('点3的位移与时间的关系');
复制代码
望高手解答!不胜感激!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 08:32 , Processed in 0.039700 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表