回 帖 发 新 帖 刷新版面

主题:求助!请高手看一下这个程序错在哪儿

程序在下面,运行时提示“Matrix mast be square”,按照网上有人说的把“*”全部改为“.*”,还是报同样的错误
[code]disp('**************************************************').
disp('*** 基于抛物线内插法的不同阻尼比情况下反应谱计算  ***')
disp('***          输入地震加速度为X``(t)=cos2πt       ***')
disp('***         Author:WanLi Zhao  (BENG)          ***')
disp('***           Email:ewarren@126.com            ***')
disp('***             HOHAI  University              ***')
disp('***           2010.05.13  NanJing              ***')
disp('**************************************************')
g=('请输入阻尼比:');

  for i=1:1:1000
    for k=0:1:1000
        j=2*pi;            %θ=2π
        w=(2*pi)/(i/100);    %自振圆频率ω
        t=k/100;           %时间
        u(1)=0;            %初始位移为0
        u1(1)=0;           %初始速度为0
        c11=exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+(g/sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01;
        c12=exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01;
        d11=(1/w^2)*(1+3*g/w*0.01+(4*g^2-1)/w^2*0.01^2)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+(g+3*g/w*0.01+g(4*g^2-1)/w^2*0.01^2-3/2*w*0.01-2*g/w^2*0.01^2)*(1/w^2*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01-(1/w^2)*(g/w*0.01+(4*g^2-1)/w^2*0.01^2);
        d12=-(2/w^3*0.01)*(2*g+(4*g^2-1)/w*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01-(2*g^2+(4*g^2-1)*g/w*0.01-1-2*g/w*0.01)*(2/0.01*w^3*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01+(1/w^2*0.01)*(2*(4*g^2-1)/w^2*0.01-0.01);
        d13=(1/w^3*0.01)*(g+(4*g^2-1)/w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+(g^2+(4*g^2-1)*g/w*0.01-1/2-2*g/w*0.01)*(1/0.01*w^3*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01-((4*g^2-1)/w^2*0.01-g/w)*(1/w^2*0.01);
        c21=-(w/sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01;
        c22=-(g/sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01+exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01;
        d21=-(3+4*g/w*0.01)*(1/2*w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01-(1+3*g/2*w*0.01+(2*g^2-1)/w^2*0.01^2)*(1/w*sqrt(1-g^2));
        d22=(1+2*g/w*0.01)*(2/w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+(g+(2*g^2-1)/w*0.01)*(2/0.01*w^2*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01-4*g/w^3*0.01^2;
        d23=-(1+4*g/w*0.01)*(1/2*w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01-(g/2+(2*g^2-1)/w*0.01)*(1/0.01*w^2*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01+(1/(2*w^2*0.01))*(4*g/w*0.01-1);
        u(k+2)=c11*u(k)+c12*u1(k)+d11*cos(j*(k+1))+d12*cos(j*(k+2))+d13*cos(j*(k+3));
        u1(k+2)=c21*u(k)+c22*u1(k)+d21*cos(j*(k+1))+d22*cos(j*(k+2))+d23*cos(j*(k+3));
        u11(k+2)=-2*g*w*u1(k+1)-w^2*u(k+1);
    end
    wy=max(u);
    sd=max(u1);
    jsd=max(u11);
end    
         %-------输出结果-------
    fid=fopen('抛物线内插法位移解.txt','w');
    fprintf(fid,'%15.5f\r\n',wy);
    fclose(fid);
    fid=fopen('抛物线内插法速度解.txt','w');
    fprintf(fid,'%15.5f\r\n',sd);
    fclose(fid);
    fid=fopen('抛物线内插法加速度解.txt','w');
    fprintf(fid,'%15.5f\r\n',jsd);
    fclose(fid);

    %---------画图-------
    figure;
    T=0.01:0.01:10;
    plot(T,wy);
    title('y(t)');
    xlabel('T');
    ylabel(g);
    grid on;
    %--------画图-------
    figure;
    T=0.01:0.01:10;
    plot(T,sd);
    title('y′(t)');
    xlabel('T');
    ylabel(g);
    grid on;
    %--------画图--------
    figure;
    T=0.01:0.01:10;
    plot(T,jsd);
    title('y′′(t)');
    xlabel('T');
    ylabel(g);
    grid on;
        [code]

回复列表 (共3个回复)

沙发

改掉下面两个错后,可以运行程序。但是结果好像不理想,请楼主仔细考虑。

板凳

今天将你的程序验算了,
 g=input('请输入阻尼比:');

 for i=1:1:5
    for k=1:1:3
        j=2*pi;            %θ=2π
        w=(2*pi)/(i/100);    %自振圆频率ω
        t=k/100;           %时间
        u(1)=0;            %初始位移为0
        u1(1)=0;           %初始速度为0  
      % -g*w*0.01
       c11=exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+(g/sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01;
        
        c12=exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01;
        d11=(1/w^2)*(1+3*g/w*0.01+(4*g^2-1)/w^2*0.01^2)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+...
           (g+3*g/w*0.01+g*(4*g^2-1)/w^2*0.01^2-3/2*w*0.01-2*g/w^2*0.01^2)*(1/w^2*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01-(1/w^2)*(g/w*0.01+(4*g^2-1)/w^2*0.01^2);
   [color=FF0000]    %g(4*g^2-1),少一乘号[/color]
        d12=-(2/w^3*0.01)*(2*g+(4*g^2-1)/w*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01-...
            (2*g^2+(4*g^2-1)*g/w*0.01-1-2*g/w*0.01)*(2/0.01*w^3*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01+(1/w^2*0.01)*(2*(4*g^2-1)/w^2*0.01-0.01);
        d13=(1/w^3*0.01)*(g+(4*g^2-1)/w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+(...
            g^2+(4*g^2-1)*g/w*0.01-1/2-2*g/w*0.01)*(1/0.01*w^3*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01-((4*g^2-1)/w^2*0.01-g/w)*(1/w^2*0.01);
        c21=-(w/sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01;
        c22=-(g/sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01+exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01;
        d21=-(3+4*g/w*0.01)*(1/2*w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01-(1+3*g/2*w*0.01+(2*g^2-1)/w^2*0.01^2)*(1/w*sqrt(1-g^2));
        d22=(1+2*g/w*0.01)*(2/w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01+(g+(2*g^2-1)/w*0.01)*(2/0.01*w^2*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01-4*g/w^3*0.01^2;
        d23=-(1+4*g/w*0.01)*(1/2*w^2*0.01)*exp(-g*w*0.01)*cos(w)*sqrt(1-g^2)*0.01-...
            (g/2+(2*g^2-1)/w*0.01)*(1/0.01*w^2*sqrt(1-g^2))*exp(-g*w*0.01)*sin(w)*sqrt(1-g^2)*0.01+(1/(2*w^2*0.01))*(4*g/w*0.01-1);
        u(k+2)=c11*u(k)+c12*u1(k)+d11*cos(j*(k+1))+d12*cos(j*(k+2))+d13*cos(j*(k+3));
        [color=FF0000]%u1(k)不能为u1(0),矩阵没有0行0列。[/color]        
u1(k+2)=c21*u(k)+c22*u1(k)+d21*cos(j*(k+1))+d22*cos(j*(k+2))+d23*cos(j*(k+3));
        u11(k+2)=-2*g*w*u1(k+1)-w^2*u(k+1);
   end
    wy=max(u);
    sd=max(u1);
    jsd=max(u11);
 end 

3 楼

请仔细考虑,矩阵0行0列的问题 。matlab与c语言程序结构可以一样,但是要注意矩阵的行列编号变换。

我来回复

您尚未登录,请登录后再回复。点此登录或注册