Tablicowanie wartości funkcji Rozwinięcie funkcji w szereg
Transkrypt
Tablicowanie wartości funkcji Rozwinięcie funkcji w szereg
Tablicowanie wartości funkcji • Napisz program tablicujący wartości funkcji y1(x)=x^2; y2(x)=x^3 i e^x dla x w zakresie <xp;xk> z krokiem delx oraz obliczający sumę każdej z funkcji. Wartości xp, xk oraz delx podawane są z klawiatury, wyniki zapisywane są do pliku tekstowego. clc, clear disp('Program tablicuje wybrane (programowo) wartości funkcji elementarnych'); disp('y1(x)=x^2'); disp('y2(x)=x^3'); disp('y3(x)=e^x'); disp('dla x w zakresie <xp;xk> z krokiem delx oraz oblicza sumę każdej z funkcji'); xp=input('xp='); xk=input('xk='); delx=input('delx='); plik=input('nazwa pliku wyników: ','s'); s1=0; s2=0; s3=0; % zerujemy sumy i=1; % definijemy indeks startowy wektorów y1,y2,y3 i x x(i)=xp; % nadajemy pierwszą wartość x-owi fid=fopen(plik,'w'); % zakładamy plik disp(' Lp x x^2 x^3 e^x'); fprintf(fid,' Lp x x^2 x^3 e^x\r\n\r\n'); while x(i)<=xk y1(i)=x(i)^2; y2(i)=x(i)^3; y3(i)=exp(x(i)); fprintf('%3d %12.3f %12.3f %12.3f %12.3e\n',i,x(i),y1(i),y2(i),y3(i)); fprintf(fid,'%3d %12.3f %12.3f %12.3f %12.3e\r\n',i,x(i),y1(i),y2(i),y3(i)); if x(i)+delx>xk % dodatkowy warunek break % przerwanie pętli while end x(i+1)=x(i)+delx; i=i+1; end s1=sum(y1); s2=sum(y2); s3=sum(y3); fprintf('\n'); fprintf(' Suma(x^2)= %12.3f\n',s1); fprintf(' Suma(x^3)= %12.3f\n',s2); fprintf(' Suma(e^x)= %12.3e\n',s3); fprintf(fid,'\r\n'); fprintf(fid,' Suma(x^2)= %12.3f\r\n',s1); fprintf(fid,' Suma(x^3)= %12.3f\r\n',s2); fprintf(fid,' Suma(e^x)= %12.3e\r\n',s3); fclose(fid); % zamknięcie pliku wyników clf subplot(1,3,1) plot(x,y1) xlabel('x [-]'), ylabel('y [-]'), legend('y=x^2') subplot(1,3,2) plot(x,y2) xlabel('x [-]'), ylabel('y [-]'), legend('y=x^3') subplot(1,3,3) plot(x,y3) xlabel('x [-]'), ylabel('y [-]'), legend('y=e^x') Rozwinięcie funkcji w szereg • Napisz program obliczający wartość e^x na podstawie rozwinięcia w szereg potęgowy. • Napisz oddzielny program zapisujący do pliku tekstowego dane xp, xk, delx oraz eps. Program zapisu danych do pliku: clc, clear disp('Zapis danych xp, xk, delx oraz eps do pliku tekstowego.') dane(1)=input('xp='); dane(2)=input('xk='); Konrad Witkiewicz ⋅ ZUT Szczecin ⋅ 2009 1 dane(3)=input('delx='); dane(4)=input('eps='); dane=dane'; plik=input('Podaj nazwę pliku danych : ','s'); save(plik,'dane', '-ascii'); fprintf('Dane zapisano w pliku %s\n',plik) Program obliczający e^x: clc, clear disp('Program oblicza wartość e^x na podstawie rozwinięcia w szereg potęgowy działania iteracyjne') disp(' dla danego x z zadaną dokładnością eps (zero numeryczne)'); fprintf('\n'); % pusty wiersz na ekranie plik=input('Podaj nazwę pliku danych : ','s');% s oznacza zmienną tekstową dane=load(plik); xp=dane(1); xk=dane(2); delx=dane(3); eps=dane(4); fprintf('\nDane:\n'); fprintf('%5s %8.3f\n','xp=',xp); fprintf('%5s %8.3f\n','xk=',xk); fprintf('%5s %8.3f\n','delx=',delx); fprintf('%5s %8.3e\n','eps=',eps); fprintf('\n'); % plik wyników plik2=input('Podaj nazwę pliku wyników: ','s'); fprintf('\n'); wyniki=fopen(plik2,'w'); fprintf(wyniki,'Dane:\r\n'); fprintf(wyniki,'%5s %8.3f\r\n','xp=',xp); fprintf(wyniki,'%5s %8.3f\r\n','xk=',xk); fprintf(wyniki,'%5s %8.3f\r\n','delx=',delx); fprintf(wyniki,'%5s %8.3e\r\n','eps=',eps); fprintf(wyniki,'\r\n'); % pętla obliczeniowa fprintf('%6s %12s %12s %12s\n\n','Lp','x','e^x','błąd [%]') fprintf(wyniki,'%6s %12s %12s %12s\r\n\r\n','Lp','x','e^x','błąd [%]'); i=1; x(i)=xp; while x(i)<=xk exobl=exp(x(i)); suma(i)=1; biez=1; j=1; nast=biez*x(i)/j; while abs(nast)>=eps nast=biez*x(i)/j; suma(i)=suma(i)+nast; if abs(nast)<eps break end j=j+1; biez=nast; end blad(i)=abs(100*(suma(i)-exobl)/exobl); fprintf('%6d %12.3f %12.3e %12.3e\n',i,x(i),suma(i),blad(i)) fprintf(wyniki,'%6d %12.3f %12.3e %12.3e\r\n',i,x(i),suma(i),blad(i)); if x(i)+delx>xk break end x(i+1)=x(i)+delx; i=i+1; end fclose(wyniki); plot(x,suma,'ro') title('y=e^x') xlabel('x [-]') ylabel('e^x [-]') grid % włączamy siatkę 2 Konrad Witkiewicz ⋅ ZUT Szczecin ⋅ 2009