%Program 1 (a) 
%Heat function 1 dimension
%解線性方程是用內建函式，也可以用一些其他方法，不過因為要想其他的部分細節，
%所以這個部分就先簡單用內建
%用 (5) 的式子

% N = [300];
%用七個N值去跑七個點，為了畫圖用
N = [100 150 200 250 300 350 400];
M = zeros(1,length(N));
O = zeros(1,length(N));
for n=1:length(N)
    v = 0.1;
    dx = 1/N(n);
    dt = 1/N(n);
    r = v*dt/(dx^2);
    r2 = 1+2*r;
    A = zeros(N(n)-1,N(n)-1);
    A = diag(r2*ones(N(n)-1,1))+diag(-r*ones(N(n)-2,1),1)...
        +diag(-r*ones(N(n)-2,1),-1);
    uo = zeros(N(n)-1,1);
    un = zeros(N(n)-1,1);
    for i=1:N(n)-1
        uo(i,1) = sin((i)*dx*pi);
    end
%     t = 0;
    %疊代 N 次，一次跑dt = 1/N ，N 次 t = 1
    for k=1:N(n)
%         t = t+dt;
        un = A\uo;
        uo = un;
    end
    ue = zeros(N(n)-1,1);
    for i=1:N(n)-1
        ue(i,1) = exp(-pi*pi*v*1)*sin((i)*dx*pi);
    end
    M(n) = max(abs(ue-uo));%最大誤差 supnorm
    O(n) = 1/N(n);
end

%畫 最大誤差 和 1/N 的圖，若為線性應該可以表示最大誤差是 O(1/N)
%不知道我的想法有沒有錯
%下面兩個函式 plot 和 loglog 不知道有什麼差別，只是抓助教寫的作業解答
figure(1)
plot(O,M);

figure(2)
loglog(N,M);
