昨天学习了符号计算,今天学习数值计算。MATLAB数值计算是微积分问题求出近似解,而不同于符号计算。
离散数据求差分及导数
函数 diff 求差分
函数 gradient 求梯度
h = 0.01;
x = 0: h : pi;
y = sin(x);
dy_dx1 = diff(y)./diff(x);
dy_dx2 = gradient(y,h);
figure;
plot(x,y);
hold on
plot(x(1: end - 1),dy_dx1,'k:');
plot(x,dy_dx2,'r--');
legend('y = sin(x)','导函数曲线(diff)','导函数曲线(gradient)');
xlalel('x');ylabel('正弦曲线及导函数曲线');
离散数据求积分
trapz 函数 求通常意义下的积分
cumtrapz 函数 求累积积
一元或多元函数的数值积分
函数名 | 调用格式 | 说明 |
integral1 | q = integral1(fun,xmin,xmax,Name,Value) | 一重积分 |
integral2 | q = integral2(fun,xmin,xmax,ymin,ymax,Name,Value) | 二重积分 |
integral3 | q = integral3(fun,xmin,xmax,ymin,ymax,zmin,zmax,Name,Value) | 三重积分 |
代数方程与方程组的数值解
函数名(运算符) | 调用格式 | 说明 |
\ | A\b | 左除,线性方程组Ax = b 的最小二乘解 |
/ | b/A | 右除,线性方程组xA = b的最小二乘解 |
roots | r = roots(p) | 多项式方程数值解,p为降幂排列的多项式系数 |
fzero | [x,fval] = fzero(fun,x0,options) | 求解一元非线性方程的数值解 |
fsolve | [x,fval] = fsolve(fun,x0,options) | 求解一般多元非线性方程(组)的数值解 |
例如求解
这个可以直接使用左除
A = [1 -1 2 -3;-2 2 1 1;-1 1 8 -8];
b = [3;-1;6];
x = A\b
p = [2 -3 5 -10];
x = roots(p)
fun = @(x)-x.*sin(5*exp(1-x.^2));
ezplot(fun,[-1,1]);
grid on;
[x, fval] = fzero(fun,[0.2,0.4])
hold on;
plot (x,fval,'ko');
fun = @(X)[X(1) - X(2) -exp(-X(1));-X(1) + 2*X(2) - exp(-X(2))];
x0 = [1,1];
options = optimset('Display','iter');
[x,fval] = fsolve(fun,x0,options)
常微分方程与方程组的数值解
函数 | |
ode45 | 非刚性微分方程 |
ode23 | 非刚性微分方程 |
ode113 | 非刚性微分方程 |
ode15s | 刚性微分方程 |
ode23s | 刚性微分方程 |
ode23t | 适度刚性微分方程 |
ode23tb | 刚性微分方程 |
ode15i | 隐式微分方程 |
偏微分方程与方程组数值解
碍于作者学艺不精,不会。