一、一维离散数据微分、积分求解
1. 离散积分
function result = integral(x,y,c)
result = [];
for i=1:1:length(y)
c=y(i)*(x(2)-x(1))+c ;
result(end+1) = c;
end
end
2. 离散微分
function result = differential(x,y)
h = x(2)-x(1);
result = [];
for i=1:1:length(y)
if i <= length(y)/2
result(end+1) = (y(i+1)-y(i))/h;
else
result(end+1) = (y(i)-y(i-1))/h;
end
end
end
3. 测试代码
x = 0:0.001:2;
y = x;
y1 = integral(x,y,1);
plot(x,y);hold on
plot(x,y1);
figure;
y2 = differential(x,y1)
plot(x,y1);hold on
plot(x,y2)
Reference
二、空间几何计算
1. 计算点到直线的距离
function d = distanceToLine3D(P, P1, P2)
% P: 点 [x0, y0, z0]
% P1: 直线上的点1 [x1, y1, z1]
% P2: 直线上的点2 [x2, y2, z2]
% 计算向量 v 和 d
v = [P(1) - P1(1), P(2) - P1(2), P(3) - P1(3)];
d = [P2(1) - P1(1), P2(2) - P1(2), P2(3) - P1(3)];
% 计算投影长度 p 的分子部分
numerator = dot(v, d);
denominator = norm(d)^2;
% 计算投影长度 p 的绝对值(如果需要非负值)
p = max(0, min(numerator / denominator, 1)) * norm(d); % 限制在 [0, 1] 内
% 计算距离 d(P, L)
d = norm(v) - p;
end
最优化过程
% 矩形优化问题:最小化对角线长度,满足周长和面积约束
clear; clc;
% 1. 定义目标函数(最小化对角线长度)
% x = [a; b],a为长,b为宽
obj_fun = @(x) sqrt(x(1)^2 + x(2)^2);
% 2. 定义约束条件
% 线性不等式约束:A*x ≤ b
% a + b ≤ 10(周长约束:2(a+b) ≤ 20)
A = [1 1];
b = 10;
% 非线性不等式约束:c(x) ≤ 0(需转化为 ≤ 0 形式)
% 面积约束:a*b ≥ 15 → 15 - a*b ≤ 0
nonlin_con = @(x) 15 - x(1)*x(2);
% 边界约束:x ≥ lb(a>0, b>0,用一个极小值近似)
lb = [1e-6; 1e-6]; % 避免为0
ub = []; % 无上限
% 3. 初始点(任意合理值)
x0 = [3; 5]; % 初始猜测值
% 4. 选择优化方法并求解
% 有约束问题用fmincon,指定算法(如'sqp'适合非线性约束)
options = optimoptions('fmincon', ...
'Algorithm', 'sqp', ... % 序列二次规划法,适合非线性约束
'Display', 'iter', ... % 显示迭代过程
'MaxFunctionEvaluations', 1e4);
[x_opt, f_opt] = fmincon(obj_fun, x0, A, b, [], [], lb, ub, nonlin_con, options);
% 5. 输出结果
fprintf('优化结果:\n');
fprintf('长 a = %.4f, 宽 b = %.4f\n', x_opt(1), x_opt(2));
fprintf('最小对角线长度 = %.4f\n', f_opt);
fprintf('验证约束:周长 = %.4f, 面积 = %.4f\n', ...
2*(x_opt(1)+x_opt(2)), x_opt(1)*x_opt(2));
转载请注明出处!感谢GISPALAB实验室的老师和同学们的帮助和支持~
浙公网安备 33010602011771号