quad sym
Transkrypt
quad sym
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' S=sym(A) A=1:5 S=sym(A) A=[1,2;3,4] S=sym(A) A=[1.2,3.4] S=sym(A) S=sym(a,'f') S=sym(a,'d') A=@(x) x.^2 S=sym(A) 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) syms x f = sin(5*x) diff(f) syms s t f = sin(s*t) diff(f,t) syms x diff(sin(x^2)) syms t diff(t^6,6) syms x t diff(sin(x*t^2), t) syms x int(-2*x/(1 + x^2)^2) syms x z int(x/(1 + z^2), z) syms x int(x*log(1 + x), 0, 1) syms x t int(2*x, sin(t), 1) syms x t z alpha = sym('alpha'); int([exp(t), exp(alpha*t)]) syms x t int(x^t, x) int(x^t, x, 'IgnoreSpecialCases', true) syms x F = sin(sinh(x)); int(F, x) int(taylor(F, x, 'ExpansionPoint', 0, 'Order', 10), x) syms x f = x^7; a = 0; b = 1; int(f, a, b) syms x f = exp(-x^2); a = 0; b = inf; int(f, a, b) syms x h limit(sin(x)/x) limit((sin(x + h) - sin(x))/h, h, 0) syms x 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') syms x y S = solve('x + y = 1','x - 11*y = 5') S.x S.y syms x 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) syms x 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) syms x a b c simplify(sin(x)^2 + cos(x)^2) simplify(exp(c*log(sqrt(a+b)))) syms x 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)]) syms x; 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]) syms x 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.