最优化
第一题(输出矩阵)
问题:请写出一个函数f1.函数只有一个参数n.函数输出一个n×n矩阵,该矩阵的所有元素值均为n.其中n为非0正整数。
解答:
function result = f1(n)
% 检查n是否为非零正整数
if n <= 0 || mod(n, 1) ~= 0
error('输入必须是非零正整数');
end
% 创建一个n×n的矩阵,所有元素都是n
result = n * ones(n, n);
end
输入:
n = 3;
A = f1(n);
disp(A);
输出:
3 3 3
3 3 3
3 3 3
##第二题(输出相应模的向量)
问题:请写出一个函数f2.函数传参为1个不定长的列向量,返回一个列向量,要求返回列向量与参数列向量相互正交,且返回列向量的模为1。
解答:
function orthogonalVector = f2(v)
n = length(v);
% 找到一个与 v 正交的向量
if all(v == 0)
orthogonalVector = zeros(n, 1);
orthogonalVector(1) = 1;
else
for i = 1:n
candidate = zeros(n, 1);
candidate(i) = 1;
% 使用 Gram-Schmidt 正交化
orthogonalVector = candidate - (dot(candidate, v) / dot(v, v)) * v;
if norm(orthogonalVector) > 1e-10 % 检查是否正交
break;
end
end
end
orthogonalVector = orthogonalVector / norm(orthogonalVector); % 归一化
end
输入:
v = [1; 2; 3];
orthogonalVector = f2(v);
disp(orthogonalVector);
输出: