数值微积分
多项式的表示
matlab中多项式用向量的形式表示
例如:f(x)=5
x
3
x^3
x3+
x
2
x^2
x2+3
matlab可用 m=[5 1 0 3]
来表示
polyval()求值计算
polyval(fx,x)
求x对应的fx的值
x=0:0.01:5;
fx=[5 1 0 3];
m=polyval(fx,x);
plot(x,m,'LineWidth',1);
xlabel('x');
ylabel('f(x)');
set(gca,'FontSize',10);
切记别直接用plot(x,fx)
画图,否则会提示 plot向量长度必须相同
。
polyder()多项式微分
polyder(y)
对y进行微分
polyder(a,b)
对a和b的乘积进行微分
a=[3 2 0 1];
b=[4 0 8 3];
x=0:0.1:5;
p=conv(a,b);
y1=polyder(p);%返回p的导数
y2=polyder(a,b);%返回a,b乘积的导数
subplot(2,1,1)
plot(x,polyval(y1,x));
subplot(2,1,2)
plot(x,polyval(y2,x));
此处conv(a,b)
是求a,b函数乘积,但是conv()
用的时候维数必须相同。
polyint()多项式微分
polyint(a)
对a进行积分,常数项为0
polyint(a,b)
对a进行积分,常数项为b
x=0:0.1:5;
p=[5 1 0 3];
plot(x,polyval(polyint(p,1),x));
diff()差分和近似导数
diff(x)
对x向量进行求差值
diff(x,n)
对x向量求n次差值
diff(x,n,dim)
dim用来指定维数
x=[1 3 5;7 9 11;13 15 17];
diff(x,1,1)
diff(x,1,2)
还可用diff(y)./diff(x)
来近似求导数
exercise:
hold on
for i=1:3
x=0:power(10,-i):5;
fx=exp(-x).*sin(x.*x/2);
m=diff(fx)./diff(x);
plot(x(1:end-1),m);
end
hold off
set(legend('h=0.1','h=0.01','h=0.001'));
这里在画图的时候plot(x(1:end-1),m)
,x的组数要少1,因为在求差值的时候,n组数据计算之后为n-1组数据
数值积分
Midpoint Rule
中点取值,求矩形面积
h=0.01;
x=0:h:2*pi;
midpoint=(x(1:end-1)+x(2:end))./2;
y=sin(midpoint);
s=sum(h*y)
Trapezoid Rule
求梯形面积
h=0.01;
x=0:h:2*pi;
y=sin(x);
s=h*trapz(y)
Simpson’s Rule
h / 3 h/3 h/3*(f0+4f1+f2)
h=0.01;
x=0:h:2*pi;
y=sin(x);
s=h/3*(y(1)+4*sum(y(2:2:end))+2*sum(y(3:2:end-2)))
这里都是很小的数,接近0
integral数值积分
integral(fx,x1,x2)
对函数fx在x1到x2的范围上积分
简单的积分
y=@(x) sin(x);
integral(y,0,2*pi)
带参数的积分
y=@(x,a) sin(x)+a;
integral(@(x) y(x,1),0,2*pi) %给a的参数为5
integral2()两重积分
f=@(x,y) sin(x)+cos(y);
integral2(f,0,2*pi,0,2*pi)
如有错误请指正,感谢