Technické
Netechnické
- Jídlo a pití
Výstup je možný několika způsoby. Pokud se nedá na konec řádku znak ';', pak se automaticky vypisuje výsledek každé operace. Pro formátovaný výstup se používá funkce printf(), která může vypadat nějak takto:
x = 10.1;
y = 5.5;
z = 'test';
printf('Integer: %i. Realne cislo: %f. String: %s.\n', x, y, z);
Řešení maticové rovnice Ax=b pomocí LU rozkladu
function x=test_lu(A,b) [L,U,p]=lu(A,'vector'); opL.LT = true; opU.UT = true; x=linsolve(U,linsolve(L,b(p),opL),opU); end
Řešení maticové rovnice Ax=b pomocí Gaussovy eliminace
function x=test_gauss(A,b) x=A\b end
Řešení maticové rovnice Ax=b hrubou silou
function x=test_hruba(A,b) x=inv(A)*b end
Řešení diferenciální rovnic druhého řádu metodou konečných diferencí
function u = reseni2(n,l) % n - pocet dilku % l - delka intervalu h = l/n; e = ones(n-1,1); A = spdiags([-e 2*e -e], -1:1, n-1, n-1); b = e*h.^2; %tecka znamena po slozkach u=A\b; x = 0:0.1:l; y = 0.5*x.*(l-x); plot(x,y,'-r',(1:n-1)*h,u,'+b'); end
roots([1 2 2]) poly([1 2 3]) P=[1 2 3] Q=[3 2 1] R=conv(P,Q) [K,L]=deconv(R,Q)
function interpolace(A,B)
plot([A(1) B(1)], [A(2) B(2)],'+r');
x=(-400:400)*pi/100;
p=line(x,fce(x,1,2));
axis([0 5 0 3])
tx=text(0.1,2,'1/(1+2x^2)','Color',[0 0 1]);
set(gca,'UserData',[10 100]);
set(gcf,'KeyPressFcn',@(s,t)klavesy(t,p,x,tx,A,B))
end
function klavesy(t,P,x,tx,A,B)
data=get(gca,'UserData');
u=data(1);
v=data(2);
switch(t.Key)
case 'leftarrow'
v=v-1;
case 'rightarrow'
v=v+1;
case 'uparrow'
u=u+1;
case 'downarrow'
u=u-1;
case 'p'
print('-dpng',['graf' num2str(u) '_' num2str(v) '.png'])
end
set(gca,'UserData',[u,v]);
u=u/10;
v=v/1000;
set(P,'YData',fce(x,u,v));
set(tx,'string',[num2str(u) '/(1+' num2str(v) 'x^2) ' num2str(fce(A(1),u,v)-A(2)) ' ' num2str(fce(B(1),u,v)-B(2))]);
end
function y=fce(x,a,b)
y=a*exp(-b*x.^2);
end
n=8; e = ones(n,1); A = spdiags([-e 2*e -e], -1:1, n, n) B=full(A) sparse(B) %% LU rozklad % pouziti lu rozkladu pro ridke matice [L,U]=lu(A); full(L) full(U) %% Inverze ridke matice full(inv(A))
% x1=x0-f(x0)/f'(x0)
[x,f,s]=fsolve(@(x)tan(x)-0.2*x,3.8,optimset('Display','iter'))
[x,f,s]=fsolve(@(x)tan(x)-0.2*x,3.8,optimset('Display','off'))
reseninelinrov.m:
function [x,f,g]=reseninelinrov(A)
%A=0.25;
opt=optimset('Jacobian','on','Display','iter');
ezplot(@tan,[0 12]);
line([0 12],[0 A*12]);
line([0 12],[0 0],'Color',[0 0 0]);
[x,f,g]=fsolve(@(x)fce(x,A),4,opt);
line([x x],[0 tan(x)],'Color','red');
[x,f,g]=fsolve(@(x)fce(x,A),7,opt);
line([x(1) x(1)],[0 tan(x(1))],'Color','red');
[x,f,g]=fsolve(@(x)fce(x,A),10,opt);
line([x(1) x(1)],[0 tan(x(1))],'Color','red');
axis equal;
end
function [y,yd]=fce(x,a)
y=sin(x)-a*x*cos(x);
yd=(1-a)*cos(x)+a*x*sin(x);
end
function reseninelinrov2(A)
x=4;
ezplot(@(x)tan(x),[0 18]);
line([0 18],[0 A*18])
line([0 18],[0 0],'Color',[0 0 0])
z=line(x,tan(x),'Color',[1 0 0],'Marker','x','Markersize',8);
opt=optimset('Jacobian','on','Display','off','OutputFcn',@(x,f,s)krok(x,z));
for i=1:5
[x,~,g]=fsolve(@(x)fce(x,A),x,opt);
line(x,tan(x),'Color',[1 0 0],'Marker','o','Markersize',8)
line([x x],[0 tan(x)],'Color','red')
disp([num2str(x,16) ' ' num2str(g)]);
x=x+pi;
end
axis equal;
end
function [y,yd]=fce(x,a)
y=sin(x)-a*x*cos(x);
yd=(1-a)*cos(x)+a*x*sin(x);
end
function stop=krok(x,z)
stop=false;
set(z,'XData',x,'YData',tan(x));pause(1);
end
function reseninelinrov3(A)
ezplot(@(x)tan(x)-A*x,[0 18]);
p=line([0 18],[0 0],'Color',[0 0 0]);
opt=optimset('Jacobian','on','Display','off');
set([p gca],'ButtonDownFcn',@(s,t)klik(A,opt))
axis equal;
end
function [y,yd]=fce(x,a)
y=sin(x)-a*x*cos(x);
yd=(1-a)*cos(x)+a*x*sin(x);
end
function klik(A,opt)
m=get(gca,'CurrentPoint');
[x,~,g]=fsolve(@(x)fce(x,A),m(1,1),opt);
line(x,tan(x)-A*x,'Color',[1 0 0],'Marker','o','Markersize',8)
disp([num2str(x,16) ' ' num2str(g)]);
end
a=0.2; reseninelinrov3(@(x)tan(x)-a*x,@(x)1/cos(x)^2+a*x,21)
function reseninelinrov3(f,g,L)
ezplot(f,[0 L]);
p=line([0 L],[0 0],'Color',[0 0 0]);
opt1=optimset('Jacobian','on','Display','off');
opt2=optimset('Jacobian','off','Display','off');
set(p,'ButtonDownFcn',@(s,t)klik1(f,g,opt1))
set(gca,'ButtonDownFcn',@(s,t)klik2(f,opt2))
axis equal;
end
function [y,yd]=fce(x,f,g)
y=f(x);
yd=g(x);
end
function klik1(f,g,opt)
m=get(gca,'CurrentPoint');
[x,~,g]=fsolve(@(x)fce(x,f,g),m(1,1),opt);
line(x,f(x),'Color',[1 0 0],'Marker','o','Markersize',8)
disp([num2str(x,16) ' ' num2str(g)]);
end
function klik2(f,opt)
m=get(gca,'CurrentPoint');
[x,~,g]=fsolve(f,m(1,1),opt);
line(x,f(x),'Color',[1 0 0],'Marker','o','Markersize',8)
disp([num2str(x,16) ' ' num2str(g)]);
end
y'=f(x,y),y(0)=A, y_i+1=y_i+h f(x_i,y_i) / Euler ode - ordinary diferencial equation y'=y+x, y(0)=A=1
function obyc
[t,y]=ode45(@(t,y)y+t,[0 4], 1);
plot(t,y);
end
function obyc
a=1;
sol=ode45(@(t,y)y+t,[0 2], a);
x=0:0.01:2;
plot(x, deval(sol,x),'LineWidth',5);
line(x,(a+1)*exp(x)-x-1,'Color',[1 1 1]);
end
Vypocet vrhu.
sikmyvrh(20,30)
function sikmyvrh(v,alfa)
g=9.81;
vs=v*sin(alfa*pi/180);
vc=v*cos(alfa*pi/180);
sol=ode45(@(t,y)fce(y,g),[0 2.2],[0 0 vc vs]);
x=0:0.01:2.2;
h=deval(sol,x);
plot(h(1,:),h(2,:),'LineWidth', 5)
sol=ode45(@(t,y)fceo(y,g,0.02),[0 2.2],[0 0 vc vs]);
h=deval(sol,x);
line(h(1,:),h(2,:),'LineWidth', 1);
a=vc*vs/g;
b=0.5*vs^2/g;
x=0:0.1:40;
line(x,b*(1-((x-a)/a).^2),'Color',[1 1 1])
line([0 40], [0 0], 'Color', [0 0 0]);
t=fsolve(@(t)vyska(sol,t),2);
disp([[t;0;vc;vs] deval(sol,t)]);
end
function v=vyska(sol,t)
h=deval(sol,t);
v=h(2);
end
function z=fce(y,g)
z=[y(3);y(4);0;-g];
end
function z=fceo(y,g,c)
vn=norm(y([3 4]));
z=[y(3);y(4);-c*vn*y(3);-g-c*vn*y(4)];
end
function volnypad
C=1;
S=1;
m=80;
ro=1.28;
sol=ode45(@(t,y)odpor(y,C*S*ro/m),[0 12],[0 0]);
x=0:0.1:12;
y=deval(sol,x);
x=0:0.1:4;
plot(y(1,:),3.6*y(2,:));
line(0.5*9.81*x.^2,3.6*9.81*x,'Color',[1 0 0])
end
function z=odpor(y,c)
z=[y(2);9.81-0.5*c*y(2).^2];
end