查看: 189|回复: 2|关注: 0

[已解决] 数组索引必须为正整数或逻辑值怎么修改

[复制链接]

新手

10 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
clear;clc;
format short e
a=0.056;
I=1;
M=2;
ot = 0.5;
n=100;
ox=1/M;
x0=zeros(M+1,1);
for ii=1:M
    x0(ii+1)=ii*ox;
end

u = sin(pi*x0/1);
r = a^2*ot/(ox)^2;
for ii = 1:n
    B= zeros (M-1,1);
    A = zeros (M-2,1);
    C= zeros (M-2,1);
    S = zeros (M-1,1);
    for ii=1:M-2
        B(ii) = 1+2*r;
        A(ii)=-r;C(ii)=-r;
        S(ii)=u(ii+1,1);
    end
    B(M-1)=1+2*r;S(M-1)=u(M,1);u(1,2)=0; u(M+1,2)=0;
    S(1,1)=S(1,1)+r*u(1,2);S(M-1,1)=S(M-1,1)+r*u(M+1,2);
    S(1)=S(1)/B(1);T=B(1);k=2;
    while k~=M
        B(k-1)=C(k-1)/T;
        T = B(k)-A(k-1)*S(k-1)/T;
        S(k)=(S(k)-A(k-1)*S(k-1))/T;
        k=k+1;
    end
    k=k+1;
    while k~=M-1
        S(M-1-k)=S(M-1-k)-B(M-1-k)*S(M-k);
        k=k+1;
    end
    u(2:M,2)=S;
    u(:,1)=u(:,2);
end
for x = 1:M
    u(x+1,2)=exp(-(pi*a/1)^2*n*ot)*sin(pi*x*ox/1);
end
ez = zeros(M-1,1);
for ii = 2:M
    ez(ii-1)=abs(u(ii,1)-u(ii,2))/u(ii,2);
end
E=max(ez);
fprint('zuihou:\n');disp(u);
fprint('zhouzi:\n');
disp([num2str(E*100) '%']);
    plot(x0,u(:,1),'r:',x0,u(:,2),'b-');
    legend('wucha')
    Xlabel('x'),ylabel('u(x,t)')

求大佬帮忙

求大佬帮忙
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

4

主题

1544

帖子

193

最佳答案
  • 关注者: 93
发表于 2020-9-12 09:27:21 | 显示全部楼层 |此回复为最佳答案
你的程序逻辑有问题啊,这个和你自己查了
M=2,k=3,
M-1-k=-2,这显然是不对的
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
 楼主| 发表于 2020-9-12 18:35:04 | 显示全部楼层
coolchen302 发表于 2020-9-12 09:27
你的程序逻辑有问题啊,这个和你自己查了
M=2,k=3,
M-1-k=-2,这显然是不对的 ...

好的谢谢,已经解决了
回复此楼 已获打赏: 0 积分

举报

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

本版积分规则

关闭

站长推荐上一条 /4 下一条

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