最优化方法

最优化

第一题(输出矩阵)

问题:请写出一个函数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);

输出:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值