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

Podobne dokumenty