分组形式和堆叠形式的条形图
matlab
y=[3,6,9,6;6,7,7,4;7,3,2,3;4,2,5,2;2,4,8,7;8,7,4,4];
bar(y)
figure
bar(y,'stack')
%'stack'这个参数指定条形图应该是堆叠的
三维线图、网线图、表面图和带渲染效果的表面图
matlab
[x,y]=meshgrid(-2:0.2:2);
%生成两个二维矩阵x和y,它们表示一个网格
z=x.*exp(-x.^2-y.^2);
subplot(2,2,1),plot3(x,y,z)
subplot(2,2,2),mesh(x,y,z)
%mesh函数接受三个参数:x、y和z,分别表示网格的x、y和z坐标
subplot(2,2,3),surf(x,y,z)
subplot(2,2,4),surf(x,y,z),shading interp)
AI : meshgrid
是 MATLAB 中的一个函数,用于生成坐标网格。它接受两个或多个一维数组作为输入,并返回多维数组,这些数组可以用于在多维空间中定义一个网格。
函数语法
matlab
[X, Y] = meshgrid(x, y)
[X, Y, Z] = meshgrid(x, y, z)
参数说明
x
,y
,z
:一维数组,表示网格在各个维度上的坐标。X
,Y
,Z
:多维数组,表示网格在各个维度上的坐标点。
返回值
X
,Y
,Z
:返回的数组具有相同的尺寸,每个元素代表网格中的一个点。例如,X(i, j)
和Y(i, j)
分别表示网格中第i
行第j
列点的 x 坐标和 y 坐标。
使用示例
matlab
x = 1:3; % 定义 x 坐标
y = 4:6; % 定义 y 坐标
[X, Y] = meshgrid(x, y); % 生成网格
disp(X);
disp(Y);
输出结果:
markdown
1 2 3
1 2 3
1 2 3
4 4 4
5 5 5
6 6 6
在这个例子中,meshgrid
函数生成了一个 3x3 的网格,其中 X
和 Y
分别表示网格中每个点的 x 坐标和 y 坐标。
注意事项
meshgrid
函数可以处理任意维度的输入,但最常用的是二维和三维。- 输入数组
x
,y
,z
必须是单调的,否则meshgrid
函数可能无法正确生成网格。 meshgrid
函数在生成网格时,会自动进行广播,因此输入数组的大小不需要相同。
应用场景
meshgrid
函数在科学计算、工程设计和数据处理等领域有广泛的应用,例如:
- 绘制二维和三维图形,如曲线图、曲面图等。
- 计算多维空间中的函数值,如求解偏微分方程、计算插值等。
- 生成采样网格,用于图像处理、计算机视觉等领域的算法实现。
总之,meshgrid
函数是一个非常有用的工具,可以帮助我们轻松地处理多维空间中的数据。
peaks函数的表面图
matlab
surf(peaks(30));
%peaks 生成一个具有多个峰值和谷值的三维数据矩阵
%peaks(30) 生成一个30x30的矩阵,表示一个30x30网格上的高度值
%surf(peaks(30)) 使用 peaks(30) 生成的数据来绘制一个三维曲面图
figure
surf(peaks(30));
colormap(hot)
%设置图形颜色映射
figure
surf(peaks(30));
colormap(cool)
figure
surf(peaks(30));
colormap(lines)
sphere函数
matlab
[x,y,z]=sphere(100);
%sphere(100)表示生成一个由100个径向等分点构成的球体
mesh(x,y,z)
%mesh函数创建一个三维网格图来显示球体
figure
mesh(x,y,z),hidden off
%设置hidden off来显示被遮挡的部分
figure
surf(x,y,z)
figure
z(16:30,1:5)=NaN*ones(size(z(16:30,1:5)));
%设置为NaN(Not a Number,非数),来模拟球体表面上的一个洞
surf(x,y,z)
改变为正方形
matlab
[x,y,z]=sphere(30);
z(18:30,1:5)=NaN*ones(size(z(18:30,1:5)));
surf(x,y,z)
axis square
axis off
符号函数的导数
matlab
syms a x;
f=[a,x^2,1/x;exp(a*x),log(x),sin(x)];
%定义了一个符号矩阵 f。矩阵 f 是一个 2x3 的矩阵,其中包含不同的符号表达式
df=diff(f,'x');
%diff 函数用于对符号表达式进行微分
disp(df);
解方程组
matlab
syms a b c x y;
%声明了符号变量
eques=[a*x^2+b*y+c==0,x+y==0];
%定义了一个方程组
vars=[x,y];
%定义了要求解的变量列表
S=solve(eques,vars);
disp(S.x)
disp(S.y)
%分别显示 x 和 y 的解
绘制极坐标
matlab
syms t
ezpolar(sin(3*t)*cos(3*t))
%ezpolar函数绘制一个极坐标图
figure
ezpolar('sin(4*t)*cos(3*t)',[0,2*pi])
%[0,2*pi]表示绘制图形的范围
matlab
p=[4,-12,-14,5,9] ;
pd=polyder(p);
%求导
pdfuhao=poly2sym(pd);
%poly2sym 函数将求导后的系数向量 pd 转换成一个符号表达式 pdfuhao。这样做的目的是为了方便显示和进一步的操作
pi=polyint(p);
%polyint 函数用于对多项式 p 进行不定积分
pifuhao=poly2sym(pi) ;
disp(pi)
二分法编程求方程
matlab
f = @(x) tan(x) - x - 0.5;
%@ 符号表示定义一个匿名函数
a = 0;
b = 1.5;
tol = 1e-6;
max_iter = 100;
for i = 1:max_iter
c = (a + b) / 2;
fc = f(c);
if abs(fc) < tol
break;
end
if f(a) * fc < 0
b = c;
else
a = c;
end
end
fprintf('%.8f\n', c);
%c 是要输出的浮点数变量
如果 c 的值是 3.141592653589793,那么输出将会是 3.14159265
求pi的近似值
matlab
% 初始化
pi_approx = 0; % 累加值
true_pi = pi; % MATLAB 内置的精确 π 值
n = 0; % 项数计数器
sign = 1; % 当前项的符号
tolerance = 1e-6; % 误差要求
while abs(pi_approx * 4 - true_pi) >= tolerance
pi_approx = pi_approx + sign / (2*n + 1);
% 加一项
%sign:这是一个变量,表示当前加到pi_approx上的项的符号。在莱布尼茨公式中,符号交替变化,因此sign的值会在1和-1之间切换。
sign = -sign;
% 符号翻转
n = n + 1;
% 项数 +1
end
% 输出结果
fprintf('迭代次数: %d\n', n);
fprintf('近似的π值: %.10f\n', 4 * pi_approx);
fprintf('误差: %.10e\n', abs(4 * pi_approx - true_pi));
计算二重积分
matlab
f = @(x, y) sin(x).^2 + sin(y).^2;
% 外层积分(对x从1到2)
I = integral(@(x) arrayfun(@(x0) integral(@(y) f(x0, y), 1, x0^2), x), 1, 2);
disp(['结果为:', num2str(I)])