双边if与if。。。。。。 else。的用法细节之个人总结

**

双边if与if。。。。。。 else。的用法细节之个人总结

**
就一般情况来说 两种都是都是通用的因为用法都比较简单
下面来说下 他们的用法的区别和细节
第一大类 通用情况
比如说 用程序来判断奇数偶数
在这里插入图片描述
在这里插入图片描述

无论是第一种 还是第二种 都是可以的

第二大类 不能通用情况
比如说 用程序来大小写相互转换的程序
在这里插入图片描述
这是错误的写法 这会导致小写无法转换成大写
如果将双边if 换成if。。。else 就会的到满意的结果
总结
A如果第一个if的输出结果 会影响到第二个最后输出的值(也就是说第一个if的输出结果是第二个if的条件 就会输出第二个if的结果 最终影响到最终输出结果)
B假如说第一个if的输出结果不会使第二个if的条件成立
那么结果也就不会影响
最后的一句经典 假如说你没有理解 最保险的还是一直用 if。。。。else 理解的话应该可以灵活调用 if。。。else的适用范围大于双边if的适用范围

本人第一篇文章 初来乍到 请多关注

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SVD(奇异值分解)是一种重要的矩阵分解技术,广泛应用于数据分析、信号处理、图像处理等领域。其中,双边Jacobi求解SVD是一种经典的求解方法之一。 下面介绍双边Jacobi求解SVD的步骤及Matlab算法实现。 1. 原始矩阵的SVD分解 对于一个$m\times n$的矩阵$A$,其SVD分解为$A=U\Sigma V^T$,其中$U$和$V$是正交矩阵,$\Sigma$是一个对角矩阵。 2. 计算$A^T A$和$A A^T$ 由于$U$和$V$是正交矩阵,因此有$U^TU=I$和$V^TV=I$。将其代入SVD分解公式中,可得$A^TA=V\Sigma^2 V^T$和$AA^T=U\Sigma^2 U^T$。 3. 双边Jacobi旋转 设$A^TA$的特征值分解为$A^TA=Q\Lambda Q^T$,其中$Q$是正交矩阵,$\Lambda$是对角矩阵。则$V=Q$,$U=AQ\Lambda^{-1/2}$。 同理,设$AA^T$的特征值分解为$AA^T=P\Gamma P^T$,其中$P$是正交矩阵,$\Gamma$是对角矩阵。则$U=P$,$V=AP\Gamma^{-1/2}$。 双边Jacobi旋转的目的是通过正交变换将$A^TA$和$AA^T$对角化,从而得到$U$和$V$。 4. 迭代计算 重复进行步骤2和步骤3,直到$U$和$V$收敛为止。 Matlab代码实现: ```matlab function [U, S, V] = bidiagonal_jacobi_svd(A, tol, max_iter) % Bidiagonal Jacobi SVD [m, n] = size(A); U = eye(m); V = eye(n); S = zeros(min(m,n), 1); B = A; for iter = 1:max_iter % Step 1: Bidiagonalization for j = 1:n for k = j+1:m [c,s] = givens(B(j,j), B(k,j)); G = [c -s; s c]; B([j,k],j:n) = G'*B([j,k],j:n); B(:,[j,k]) = B(:,[j,k])*G; U([j,k],:) = U([j,k],:)*G'; end end for j = 1:min(m,n) S(j) = B(j,j); end % Step 2: SVD of bidiagonal matrix for j = 1:n-1 [c,s] = givens(B(j,j), B(j+1,j)); G = [c -s; s c]; B([j,j+1],j:n) = G'*B([j,j+1],j:n); B(:,[j,j+1]) = B(:,[j,j+1])*G; V([j,j+1],:) = V([j,j+1],:)*G'; end % Step 3: Check convergence if norm(diag(B,-1)) < tol break; end end ``` 其中,`givens`函数用于计算Givens旋转矩阵,代码如下: ```matlab function [c, s] = givens(a, b) % Compute Givens rotation matrix if b == 0 c = 1; s = 0; elseif abs(b) > abs(a) t = -a/b; s = 1/sqrt(1+t^2); c = s*t; else t = -b/a; c = 1/sqrt(1+t^2); s = c*t; end end ``` 使用方法如下: ```matlab A = rand(10,5); [U, S, V] = bidiagonal_jacobi_svd(A, 1e-6, 100); ``` 其中,`A`是待分解的矩阵,`tol`是收敛精度,`max_iter`是最大迭代次数。函数返回值包括左奇异向量矩阵`U`,奇异值向量`S`和右奇异向量矩阵`V`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值