clc;clear;
n = input('请输入要进行均分的分数: ');
x = linspace(0, 2*pi, 1000);
y = sin(x);
dy = gradient(y, x);
ddy = gradient(dy, x);
k = abs(ddy ./ (1 + dy.^2).^(3/2));
kThresholds = linspace(min(k), max(k), n+1);
j = [];
for i = 1:n
idx = find(k >= kThresholds(i) & k <= kThresholds(i+1));
l = [x(idx(1)), y(idx(1))];
j= [j ; l];
end
figure;
plot(x, y);
hold on;
scatter(j(:,1), j(:,2), 'r', 'filled');
legend('sin(x)', '曲率等于k/n的点');
xlabel('x');
ylabel('sin(x)');
title('sin(x)曲线及曲率等于k/n的点');
这段代码的思路是先生成一个从0到2π的等分点,求出这些点上sin(x)的曲率,然后将这些曲率进行均分,找到曲率处于均分区间的点,最后将这些点在sin(x)图像上标记出来。
需要注意的是,这里用到了梯度函数gradient和矩阵除法./,需要在MATLAB中先定义这些函数和操作。
运行该代码,将会弹出一个输入框,要求输入要进行均分的分数n。然后程序会计算出sin(x)的曲率并均分为n份,找到曲率处于每份区间的内的点,将这些点在sin(x)图像上标记出来。
如果需要再次运行代码,可以选择清除变量或关闭MATLAB窗口。