===== Lab 5-9 ===== ==== Zajęcia 2 ==== y=[0.67 0.67 0.67 0.67 0.67 0.02 0.02 0.02 0.02]; temp = 727; R = 8.3144; Q = 140000; temp_k = temp + 273; d0= 0.000041; D = d0 * exp( -Q /( R * temp_k)) * 1 * 10^10; dt = 1; dx = 1; tmp = (D*dt)/dx^2; n = 100; [s_h s_w] = size(y); y2 = zeros(1, s_w); for j = 1:n for i = 1:s_w im = i-1; ip = i+1; if im < 1 im = 1; end if ip > s_w ip = s_w; end y2(i) = (1 - 2*tmp)*y(i) + tmp*(y(im) + y(ip)); end y = y2; end plot(y2, 'DisplayName', 'y2', 'yDataSource', 'y2'); ==== Zajęcia 3 ==== temp = 727; R = 8.3144; Q = 140000; temp_k = temp + 273; d0= 0.000041; D = d0 * exp( -Q /( R * temp_k)) * 1 * 10^10; dt = 0.01; dx = 0.1; pN = 0.1; if (D*dt)/dx^2 <= 0.5 % Obszar rozwiązania: 100 um %y=[0.67 0.67 0.67 0.67 0.67 0.02 0.02 0.02 0.02]; y(1:5) = 0.67; y(6:100) = 0.02; ksi = 6; for k = 0:dt:10 y = [y(1), y, y(length(y))]; y1 = y; for i = 2:1:ksi+1 y1(i) = D *( dt / dx^2 ) * ( y(i+1) + y(i-1)) + y(i) * (1 - 2*D*(dt/dx^2)); end y = y1; y = y(2:1:length(y)-1); plot(y) hold on % rownanie prostej przechodzacej przez dwa punkty % (x2 - x1)(y - y1) = (y2 - y1)(x - x1) yLine = -0.00407 * temp_k + 3.715; % zwiekszenie ksi if y(ksi) >= yLine && ksi < length(y)-1 ksi = ksi + 1; end % zwiekszenie temperatury o zadany prog i kolejna iteracja temp_k = temp_k + pN * dt; D = d0 * exp( -Q /( R * temp_k)) * 1 * 10^10; end % disp(y); end ===== Drugi Program ===== temp = 780; Q = 140000; R = 8.3144; temp_k = temp + 273; d0 = 0.000041; D=d0*exp(-Q /(R * temp_k))*1E10 ; dt = 0.01; dx = 0.1; pN = 0; time = 50; %Warunek początkowy NEUMANA if (D*dt)/dx^2<=0.5 K(6:100) = 0.02; %wypełniamy 6-100 elementy stężeniem o wielkości 0.2 K(1:5) = 0.67; %wypełniamy 1-5 elementy stężeniem o wielkości 0.67 ksi = 6; %ustawiamy na którym elemencie jest granica ksi Clen = int32(time/dt); %obliczamy ilość kroków C(1:Clen) = 0.0; %tworzymy tablicę wypełnioną zerami do której będzie %obliczane stężenie całego materiału w każdym kroku czasowym l = 1; %iterator powyższej tablicy for k = 0:dt:time %zaczynamy proces C(l) = trapz(K); %do tablicy zapisujemy stężenie w materiale l = l + 1; K = [K(1), K, K(length(K))]; %zwiększamy rozmiar tablicy z lewej i z prawej strony K1 = K; %przepisujemy tablicę do tablicy pomocniczej (k+1) K(ksi+1) = K(ksi); %powielamy element graniczny do obliczeń for i = 2:1:ksi+1 %obliczamy stężenie do granicy K1(i) = D*(dt/dx^2)*(K(i+1)+K(i-1)) + K(i)*(1 - 2*D*(dt/dx^2)); %obliczanie stężenia dla i-tego elementu end K = K1; %przepisanie tablicy spowrotem K = K(2:1:length(K)-1); %zmniejszenie rozmiaru tablicy do stanu początkowego if (mod(l,100) == 2) %wyświetlamy co 100 element na podstawie iteratora plot(K) %wyświetlamy wykres stężenia w materiale hold on end y=-0.004074074074074075*temp+3.7155555555555555; %na podstawie wyznaczonego wzoru na prostą G-S wyliczamy stężenie %dla danej temperatury if K(ksi) >= y && ksi < length(K)-1 %jeśli stężenie jest wyższe %niż G-S i ksi nie jest ostatnim elementem to zwiększamy granicę ksi = ksi + 1; end temp = temp + pN * dt; %zwiększamy co krok temperaturę temp_k = temp + 273; D=d0*exp(-Q /(R * temp_k))*1E10; %ponownie obliczamy wsp. dyfuzji if (D*dt)/dx^2>0.5 %sprawdzamy czy warunek NEUMANNA nadal jest spełniony disp('warunek neumanna przestal byc spelniony dla temp'); disp(temp); break; end end figure; plot(C); %wyświetlamy wykres zmiany stężenia co krok end ===== Drugi Program Maciek ===== temp = 780; Q = 140000; R = 8.3144; temp_k = temp + 273; d0 = 0.000041; D=d0*exp(-Q /(R * temp_k))*1E10 ; dt = 0.01; dx = 0.1; pN = 0; time = 50; K(6:100) = 0.02; K(1:5) = 0.67; ksi = 6; Clen = int32(time/dt); C(1:Clen) = 0.0; %Neuman if (D*dt)/dx^2<=0.5 j = 1; for k = 0:dt:time C(l) = trapz(K); %Calka j = j + 1; K = [K(1), K, K(length(K))]; TempK = K; K(ksi+1) = K(ksi); for i = 2:1:ksi+1 TempK (i) = D*(dt/dx^2)*(K(i+1)+K(i-1)) + K(i)*(1 - 2*D*(dt/dx^2)); end K = TempK; K = K(2:1:length(K)-1); if (mod(j,100) == 2) plot(K) hold on end y=-0.004074074074074075*temp+3.7155555555555555; %zwiekszanie granicy if K(ksi) >= y && ksi < length(K)-1 ksi = ksi + 1; end temp = temp + pN * dt; temp_k = temp + 273; D=d0*exp(-Q /(R * temp_k))*1E10; if (D*dt)/dx^2>0.5 break; end end figure; plot(C); end