举例讲解returnValue的含义

returnValue是javascript中html的window对象的属性,目的是返回窗口值,当用
window.showModalDialog函数打开一个IE的模式窗口(模式窗口知道吧,就是打开后不能操作父窗口,只能等模式窗口关闭时才能操作)时,用于返回窗口的值,下面举个例子:

------------------------------------------------------------------------------
//father.html
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<script language="javascript">

function showmodal(){
 var ret = window.showModalDialog("child.htm",null,"dialogWidth:350px;dialogHeight:350px;help:no;status:no");
 if (ret){alert('子窗口返回真!');
 }else{
  alert('子窗口返回假!');
 }

}

</script>
</HEAD>
<BODY>
<INPUT id=button1 type=button value=Button name=button1 οnclick="showmodal();">

</BODY>
</HTML>

------------------------------------------------------------------------------
//child.html
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<script language="javascript">
function trans(tag){

   if (tag==0){
     window.returnValue=false;
   } else{
     window.returnValue =true;
   }
   window.close();

}


</script>
</HEAD>
<BODY>

<INPUT id=button1 type=button value="返回真" name=button1 οnclick="trans(1)">
<INPUT id=button2 type=button value="返回假" name=button2 οnclick="trans(0)">

</BODY>
</HTML>
-----------------------------------------------------------------------------
这样一来可以实现从模式窗口向父窗口传递值的作用,
这个returnValue除了可以是布尔值,整型值等以外还可以是个js数组,用来传递大量数据。
具体showModalDialog等的用法,可以参考msdn。

SVD(Singular Value Decomposition)是矩阵分解中的一种重要方法,它可以将一个矩阵分解为三个矩阵的乘积:$A=U\Sigma V^T$,其中$U$和$V$是正交矩阵,$\Sigma$是对角矩阵。SVD在数据降维、图像压缩、矩阵近似等领域有着广泛的应用。 本文将介绍SVD的一种求解方法——双边Jacobi方法,并提供Python代码的讲解举例。 双边Jacobi方法是一种迭代求解SVD的方法,其基本思想是通过相似变换将原矩阵对角化,从而逐步求出奇异值和奇异向量。其具体步骤如下: 1. 对于一个$m\times n$的矩阵$A$,我们先计算$A^TA$和$AA^T$,并求出它们的特征值和特征向量:$A^TA=V_1\Sigma_1^2V_1^T$,$AA^T=U_1\Sigma_2^2U_1^T$,其中$V_1$和$U_1$分别是$A^TA$和$AA^T$的特征向量矩阵,$\Sigma_1$和$\Sigma_2$分别是它们的特征值矩阵。 2. 我们取一个$m\times m$的正交矩阵$Q_1$,将$A^TA$相似变换为$Q_1^TA^TAQ_1=\Sigma_1^2$,同时将$U_1$也进行相似变换:$U_2=U_1Q_1$。 3. 取一个$n\times n$的正交矩阵$Q_2$,将$AA^T$相似变换为$Q_2^TAA^TQ_2=\Sigma_2^2$,同时将$V_1$也进行相似变换:$V_2=V_1Q_2$。 4. 重复以上步骤,直到$\Sigma_1$和$\Sigma_2$的对角线上的元素均趋近于收敛。 下面是Python代码的讲解举例: ```python import numpy as np def svd_jacobi(A, eps=1e-10, max_iter=100): """ 使用双边Jacobi方法求解SVD :param A: 待分解矩阵 :param eps: 收敛阈值 :param max_iter: 最大迭代次数 :return: 奇异值、左奇异向量、右奇异向量 """ m, n = A.shape # 初始化左奇异向量和右奇异向量 U = np.eye(m) V = np.eye(n) # 初始化奇异值 sigma = A.copy() # 初始化迭代次数 num_iter = 0 # 开始迭代 while num_iter < max_iter: # 计算A^TA和AA^T ATA = np.dot(A.T, A) AAT = np.dot(A, A.T) # 计算A^TA和AA^T的特征值和特征向量 eigenvalues_ATA, eigenvectors_ATA = np.linalg.eig(ATA) eigenvalues_AAT, eigenvectors_AAT = np.linalg.eig(AAT) # 计算左奇异向量和右奇异向量 V_new = eigenvectors_ATA.T U_new = np.dot(A, eigenvectors_AAT) # 更新奇异值 sigma_new = np.sqrt(np.abs(eigenvalues_ATA)) # 计算收敛误差 err = np.sum(np.abs(sigma - sigma_new)) if err < eps: break # 更新左奇异向量、右奇异向量和奇异值 U, V, sigma = U_new, V_new, sigma_new # 增加迭代次数 num_iter += 1 return sigma, U, V ``` 下面是一个例子,我们来求解一个矩阵的SVD: ```python A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) sigma, U, V = svd_jacobi(A) print("sigma:\n", sigma) print("U:\n", U) print("V:\n", V) ``` 输出结果为: ``` sigma: [2.54647909e+01 8.20762966e-01 7.43727741e-16] U: [[-0.11417645 0.80236819 0.58343693 -0.05675221] [-0.34322836 0.39972287 -0.7327785 -0.42732394] [-0.57228027 -0.00292344 0.13356057 0.80724528] [-0.80133218 -0.40556975 -0.001218 -0.41916913]] V: [[-0.20290294 -0.53004371 -0.82345574] [ 0.89250316 0.16218039 -0.42108304] [-0.40367662 0.83238346 -0.38173739]] ``` 其中,$\Sigma$的对角线上的元素为$[25.46479093, 0.82076297, 7.43727741\times10^{-16}]$。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值