function [V,Ex,Ey,X,Y] = tp03_mrs(dx,it); % tp03_mrs(n,it); % n - liczba elementów w każdym wierszu i kolumnie % it - liczba iteracji close all pause on % amplituda potencjału na brzegach A = 5; % współrzędne X: 0…30 obszaru zewnętrznego X = linspace(0,30,dx+2); % współrzędne Y: 0…20 obszaru zewnętrznego Y = linspace(0,30,dx+2); % zerowanie macierzy V V = zeros(dx+2,dx+2); % współrzędne x1,x2 obszaru wewnętrznego x1 = 3; x2 = 20; % współrzędne y1,y2 obszaru wewnętrznego y1 = 2; y2 = 8; mniejsze_od_x1 = X P_x1 = sum(mniejsze_od_x1)+1; mniejsze_rowne_x2 = X<=x2; P_x2 = sum(mniejsze_rowne_x2); mniejsze_od_y1 = Y P_y1 = sum(mniejsze_od_y1)+1; mniejsze_rowne_y2 = Y<=y2; P_y2 = sum(mniejsze_rowne_y2); % ustawienie warunków brzegowych % brzeg x = 0 V(1, = A*sin(linspace(0,2*pi,dx+2)); % brzeg x = 30 V(dx+2, = 2*A*cos(linspace(0,2*pi,dx+2)); % brzeg y = 0 V(:,1) = linspace(0,2*A,dx+2)’; % brzeg y = 20 V(:,dx+2) = linspace(0,2*A,dx+2)’; % iteracje for iter = 1:it for wiersz = 2:dx+1 for kolumna = 2:dx+1 V(wiersz,kolumna) = … 1/4*(V(wiersz-1,kolumna)+V(wiersz+1,kolumna)… +V(wiersz,kolumna-1)+V(wiersz,kolumna+1)); end end % obszar wewnętrzny Vinside = mean(mean(V(P_x1:P_x2,P_y1:P_y2))); V(P_x1:P_x2,P_y1:P_y2) = Vinside; if dx<=30 rysuj_wynik(X,Y,V,x1,x2,y1,y2,Vinside,dx,iter); elseif dx<=70 if ceil(iter/3)==(iter/3) rysuj_wynik(X,Y,V,x1,x2,y1,y2,Vinside,dx,iter); end else if ceil(iter/7)==(iter/7) rysuj_wynik(X,Y,V,x1,x2,y1,y2,Vinside,dx,iter); end end end rysuj_wynik(X,Y,V,x1,x2,y1,y2,Vinside,dx,iter); disp(['Potencjal na plycie: V = ’ num2str(Vinside) ‘V, po liczbie iteracji it = ’ num2str(iter) ‘.’]); Ex(1:dx,1:dx) = 0; Ey = Ex; DX = 30/(dx+1); for iter = 1:dx Ex(1:dx,iter) = V(2:dx+1,iter)-V(2:dx+1,iter+2); Ey(iter,1:dx) = V(iter,2:dx+1)-V(iter+2,2:dx+1); end Ex = Ex/DX; Ey = Ey/DX; hold on quiver3(… repmat(Y(2:dx+1),dx,1),… repmat(X(2:dx+1)’,1,dx),… V(2:dx+1,2:dx+1),… Ex,… Ey,… zeros(size(Ey))); %************************************************************************ function rysuj_wynik(X,Y,V,x1,x2,y1,y2,Vinside,dx,iter) hold off mesh(Y,X,V,‘FaceAlpha’,0.9) hold on line(… [y1 y2 y2 y1 y1],… [x1 x1 x2 x2 x1],… [Vinside Vinside Vinside Vinside Vinside],… ‘color’,‘k’,‘linewidth’,1); colorbar axis tight axis equal hidden off view(55,52) txt = ['n = ’ num2str(dx) ‘, iteracja: ’ num2str(iter) ‘; V = ’ num2str(Vinside,’%5.3f’) ‘V’]; title(txt); xlabel(‘x’); ylabel(‘y’); zlabel(‘V’,‘Rotation’,0); drawnow