MATLAB笔记4 导数/积分/微分操作
多项式导数积分
多项式用row vector表示
f(x) = x^3 - 2x -5 表示为:
p = [1 0 -2 -5];
- polyval() 求多项式值
a = [9,-5,3,7]; x = -2:0.01:5;
f = polyval(a,x);
plot(x,f,'LineWidth', 2);
xlabel('x'); ylabel('f(x)');
set(gca, 'FontSize', 14)
- polyder() 求导
p=[5 0 -2 0 1];
polyder(p)
例子
Plot the polynomial
𝑓(𝑥) = (5𝑥3 − 7𝑥2 + 5𝑥 + 10)(4𝑥2 + 12𝑥 − 3)
and its derivative for −2 ≤ 𝑥 ≤ 1
a = [5,-7,5,10];
b = [4,12,-3];
c = conv(a,b); % 卷积操作/多项式相乘
x = -2:0.01:1;
f = polyval(c,x);
f1 = polyval(polyder(c),x);
plot(x,f,'b--',x,f1,'r-','LineWidth', 2);
xlabel('x'); ylabel('f(x)');
legend('f(x)','f''(x)')
- polyint() 多项式积分
𝑓(𝑥) = 5𝑥^4 − 2𝑥^2 + 1
p=[5 0 -2 0 1];
polyint(p, 3) % 第二个参数是积分后多出的常数
polyval(polyint(p, 3),7)
数值微分和数值积分
- diff()
x = [1 2 5 2 1];
diff(x)
ans =
1 3 -3 -1
计算(1,5) 和 (2,7)连线斜率
>> x = [1 2]; y = [5 7];
slope = diff(y)./diff(x)
slope =
2
利用 diff() 计算微分
Given 𝑓(𝑥) = sin(𝑥), find 𝑓′(𝑥0) at 𝑥0 = 𝜋/2 using ℎ = 0.1
x0 = pi/2; h = 0.1;
x = [x0 x0+h];
y = [sin(x0) sin(x0+h)];
m = diff(y)./diff(x)
利用 diff() 计算导函数
h = 0.5;
x = 0:h:2*pi;
y = sin(x);
m = diff(y)./diff(x);
二次导数
x = -2:0.005:2; y = x.^3;
m = diff(y)./diff(x);
m2 = diff(m)./diff(x(1:end-1)); %二次导
plot(x,y,x(1:end-1),m,x(1:end-2),m2);
xlabel('x', 'FontSize', 18);
ylabel('y', 'FontSize', 18);
legend('f(x) =x^3','f''(x)','f''''(x)','Location','SouthEast');
set(gca, 'FontSize', 18);
- Function Handle
把一个function作为参数传入另一个function时,需要使用function handle,即使用@符号
function [y] = xy_plot(input,x)
% xy_plot receives the handle of a function
% and plots that function of x
% input指代那个传入的函数
y = input(x);
plot(x,y,'r--');
xlabel('x'); ylabel('function(x)');
end
上面为函数xy_plot,使用如下:
xy_plot(@sin,0:0.01:2*pi);
xy_plot(@cos,0:0.01:2*pi);
xy_plot(@exp,0:0.01:2*pi);
- integral()
- 计算 ∫1/(𝑥^3−2𝑥−5) 𝑑𝑥 范围0~2的积分
y = @(x) 1./(x.^3-2*x-5);
integral(y,0,2)
二重积分和三重积分
- B站教程链接
台大郭彦甫matlab教程: 点击链接