Laboratorium 7 Zad. 1 Całkowanie w Matlabie. Zapoznać i wypróbować komendy: Przekazywanie funkcji: sqr = @(x) x.^2 a = sqr(5) help quad function y = myfun(x) y = 1./(x.^3-2*x-5); Q = quad(@myfun,0,2) myfun = @(x)1./(x.^3-2*x-5); Q = quad(myfun,0,2); Q = quad(@(x)1./(x.^3-2*x-5),0,2); function wynik = oblicz(x) wynik = x.*log(x); quad(@oblicz,1,5) quad(@oblicz,1,5,10^-6) Analogicznie działa funkcja: quadl help quadl help trapz x = linspace(1,5,5) f = x.*log(x); trapz(x,f) x = linspace(1,5,15) trapz(x,f) X = 0:pi/100:pi; Y = sin(x); Z = trapz(x,y) help integral fun = @(x) exp(-x.^2).*log(x).^2; q = integral(fun,0,inf) fun = @(x,c) 1./(x.^3-2*x-c); q = integral(@(x)fun(x,5),0,2)
Całki podwójne: help dblquad function z = integrnd(x, y) z = y*sin(x)+x*cos(y); Q = dblquad(@integrnd,pi,2*pi,0,pi); F = @(x,y)y*sin(x)+x*cos(y); Q = dblquad(f,pi,2*pi,0,pi); function out=fxy(x,y) out=y^2*exp(x)+x*cos(y); dblquad(@fxy,0,1,4,6) fxy = @(x,y) y^2*exp(x)+x*cos(y); dblquad(@fxy,0,1,4,6) Zad. 2 Różniczkowanie w Matlabie. Zapoznać i wypróbować komendy: help diff x = [1, 3, 5, 3, 4, 8] diff(x) diff(x,2) X=[3,7,5;0,9,2] diff(x,1,1) diff(x,1,2) Aproksymacja pochodnej (f(x+h)-f(x))/h gdy h bliskie 0: h1=0.3 x=[0:h1:2*pi]; funkcja=sin(x); pochodna=diff(funkcja)./diff(x); subplot(2,1,1) plot(x, funkcja, x(2:end),pochodna,':') legend(' funkcja ', [' pochodna dla h=',num2str(h1)]); axis equal h2=0.1 x=[0:h2:2*pi]; funkcja=sin(x); pochodna=diff(funkcja)./diff(x); subplot(2,1,2) plot(x, funkcja, x(2:end),pochodna,':') legend(' funkcja ', [' pochodna dla h=',num2str(h2)]); axis equal
Zad. 3 Operacje symboliczne w Matlabie. Zapoznać i wypróbować komendy: help sym A='string' A=1:5 A=[1,2;3,4] A=[1.2,3.4] S=sym(a,'f') S=sym(a,'d') A=@(x) x.^2 x=sym('x') x=sym('x','positive') assumptions x=sym('x','real') x=sym('x','clear') assumptions B=sym('B',[5,2]) B=sym('B',5) B=sym('B',[5,1]) B=sym(B,'positive') B=sym(B,'real') assumptions B=sym(B,'clear') r = sym(1/3) f = sym(1/3, 'f') d = sym(1/3, 'd') e = sym(1/3, 'e') B = sym('x_%d_%d', [4 4]) B(4,2) B(4,[2,3]) A = diag(sym('a',[1 4])) det(a) trace(a) A = sym('a%d%d', [2 2]); A = sym(a, 'positive') solve(a(1, 1)^2-1, A(1, 1)) A = sym(a, 'clear'); solve(a(1, 1)^2-1, A(1, 1))
x = sym('x'); y = sym('y'); f = sym('f(x, y)') f = x + y phi = sym('(1 + sqrt(5))/2') f = phi^2 - phi - 1 f = sym('a*x^2 + b*x + c') syms a b c x f = a*x^2 + b*x + c f = x^3*y^3 diff(f,x) diff(f,y,2) syms a b c A = [a b c; c a b; b c a] det(a) triu(a) sum(a(1,:)) syms a b n t x f = x^n; g = sin(a*t + b); symvar(f) symvar(g) syms s t f = s + t; symvar(f, 1) f = sin(5*x) diff(f) syms s t f = sin(s*t) diff(f,t) diff(sin(x^2)) syms t diff(t^6,6) t diff(sin(x*t^2), t) int(-2*x/(1 + x^2)^2) z int(x/(1 + z^2), z) int(x*log(1 + x), 0, 1)
t int(2*x, sin(t), 1) t z alpha = sym('alpha'); int([exp(t), exp(alpha*t)]) t int(x^t, x) int(x^t, x, 'IgnoreSpecialCases', true) F = sin(sinh(x)); int(f, x) int(taylor(f, x, 'ExpansionPoint', 0, 'Order', 10), x) f = x^7; a = 0; b = 1; int(f, a, b) f = exp(-x^2); a = 0; b = inf; int(f, a, b) h limit(sin(x)/x) limit((sin(x + h) - sin(x))/h, h, 0) limit(1/x, x, 0, 'right') limit(1/x, x, 0, 'left') syms k n symsum(k^2, 0, 10) symsum(1/k^2,1,inf) symsum(x^k/sym('k!'), k, 0,inf) symsum(k,0,n-1) symsum(k,0,n) syms a b c x; solve('a*x^2 + b*x + c','b') solve('a*x^2 + b*x + c') y S = solve('x + y = 1','x - 11*y = 5') S.x S.y
solve(x^2-1) solve(x^2 + 4*x + 1 == 0) solve(x^4 + 1 == 2*x^2-1) syms a b c x solve(a*x^2 + b*x + c == 0, a) solve(a*x^2 + b*x + c == 0, b) syms a b [b, a] = solve(a + b == 1, 2*a - b == 4, b, a) solve(x^5 == 3125, x) solve(x^5 == 3125, x, 'Real', true) rho = sym('(1 + sqrt(5))/2'); f = rho^2 - rho 1 simplify(f) a b c simplify(sin(x)^2 + cos(x)^2) simplify(exp(c*log(sqrt(a+b)))) simplify([(x^2 + 5*x + 6)/(x + 2), sin(x)*sin(2*x) + cos(x)*cos(2*x); (exp(-x*i)*i)/2 - (exp(x*i)*i)/2, sqrt(16)]) ; f = 2*x^2-3*x + 1; subs(f, 1/3) syms a b subs(a + b, a, 4) subs(a*b^2, a*b, 5) syms a b subs(cos(a) + sin(b), [a, b], [sym('alpha'), 2]) y a f=x+y f = subs(f, x, a) Zad. 4 EKSTREMALNIE WAŻNE!!! Przekazywanie funkcji jako argumentu funkcji. Wypróbować komendy: help ezplot ezplot('x^2-2*x + 1')
%-----------------------% function z = myfun(x,y,k) z = x.^k - y.^k - 1; %-----------------------% ezplot(@(x,y)myfun(x,y,2)) ezplot( myfun ) ezplot( myfun(x,y,k) ) ezplot(exp) BŁĄD, zamiast tego: funkcja = 'exp'; ezplot(funkcja) DWIE NAJWAŻNIEJSZE KOMENDY: help feval help fcnchk Zad.5 Ekstremalnie ważny przykład obrazujący funkcje feval i fcnchk!!! Napisać program Pochodna(f,a,b,h), który dla funkcji f podanej jako string (wzór funkcji w ) narysuje funkcję f oraz jej iloraz różnicowy f(x+h)-f(x)/h (czyli aproksymację pochdnej) na zadanym odcinku [a,b] i dla zadanej dokładności h. function Pochodna(f,a,b,h) f2=fcnchk(f); %wzór funkcji f podanej jako string %zamieniamy na specjalną klasę obiektów tzw. inline %-można myśleć że są to wskaźniki do funkcji. x=linspace(a,b,200); %tworzymy wektor argumentów na zadanym przedziale. y=feval(f2,x); %każemy Matlabowi wyliczyć wartości funkcji f dla zadanych argumentów z [a,b]. p=(feval(f2,x+h)-feval(f2,x))/h; %analogicznie liczymy iloraz różnicowy. plot(x,y,'b',x,p,'r-','linewidth',2); legend('funkcja','pochodna'); title(f); Wywołanie np. Pochodna('(x.^2-17.*x)./(x.^2+1)',-10,10,0.01) Zad. 6 Ekstremalnie ważny przykład obrazujący funkcję subs!!! Napisać program Pochodna2(f,a,b), który dla fukcji f podanej jako string (wzór funkcji w ) narysuje funkcję f oraz jej prawdziwą pochodną wyliczoną symbolicznie na zadanym odcinku [a,b]. Funkcja ma też zwracać symboliczny wzór pochodnej. function y=pochodna2(f,a,b) y=diff(sym(f));% wzor funkcji f najpierw zamieniamy na wzor symboliczny %i liczymy pochodna symboliczna. x=linspace(a,b,200); fun=subs(sym(f),x);% tworzymy wektor wartości funkcji f dla zadanych argumentów z [a,b]. y2=subs(y,x); %analogicznie dla pochodnej. plot(x,fun,'b',x,y2,'r')
legend('funkcja','pochodna'); title(f); Wywołanie np. Pochodna2('(x^2-17*x)/(x^2+1)',-10,10) (WZÓR BEZ KROPEK!!!) Zadanie domowe (tydzień na oddanie) Zad. 1 Napisać program Trojmian(a,b,c), który dla podanych współczynników a, b, c wyliczy rozwiązania równania ax^2+bx+c=0 (również nierzeczywiste!). Program ma również narysować odpowiadającą parabolę i zaznaczyć miejsca zerowe (o ile istnieją). Zad. 2 Napisać program Pierwotna(f,a,b), który dla fukcji f podanej jako string (wzór funkcji w ) narysuje funkcję f oraz jej prawdziwą pierwotną wyliczoną symbolicznie na zadanym odcinku [a,b]. Funkcja ma też zwracać symboliczny wzór pierwotnej.