⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 norm.java

📁 数值分析算法源码(java) 这个学期一边学习java一边学习数值分析,因此用java写了一个数值分析算法的软件包numericalAnalysis. [说明] 适合使用者:会java的
💻 JAVA
字号:
package numericalAnalysis.norm;

/**
 * 计算一个向量或一个矩阵的1范数,2范数,无穷大范数.注意:计算矩阵的2范数的方法未完成
 * 
 * @author 山
 * 
 */
public class Norm {
	/**
	 * 计算向量的1范数
	 * 
	 * @param n
	 *            向量的维数
	 * @param vector
	 *            向量vector必须为vector[i]=vector的第i个元素,即0下标不使用
	 * @return 向量的1范数
	 */
	public static double vectorOne(int n, double[] vector) {
		double sum = 0;
		for (int i = 1; i < n + 1; i++)
			sum += Math.abs(vector[i]);

		return sum;
	}

	/**
	 * 计算向量的2范数
	 * 
	 * @param n
	 *            向量的维数
	 * @param vector
	 *            向量vector必须为vector[i]=vector的第i个元素,即0下标不使用
	 * @return 向量的2范数
	 */
	public static double vectorTwo(int n, double[] vector) {
		double sum = 0;
		for (int i = 1; i < n + 1; i++)
			sum += Math.pow(vector[i], 2);

		return Math.sqrt(sum);
	}

	/**
	 * 计算向量的无穷大范数
	 * 
	 * @param n
	 *            向量的维数
	 * @param vector
	 *            向量vector必须为vector[i]=vector的第i个元素,即0下标不使用
	 * @return 向量的无穷大范数
	 */
	public static double vectorInfinitive(int n, double[] vector) {
		double max = Math.abs(vector[1]);
		for (int i = 2; i < n + 1; i++)
			if (max < Math.abs(vector[i]))
				max = Math.abs(vector[i]);

		return max;
	}

	/**
	 * 计算矩阵的1范数
	 * 
	 * @param n
	 *            矩阵的阶数
	 * @param matrix
	 *            矩阵matrix必须为matrix[i][j]=matrix的第i行j列元素,即有0的下标都不使用
	 * @return 矩阵的1范数
	 */
	public static double matrixOne(int n, double[][] matrix) {
		double[] sum = new double[n + 1];

		for (int i = 1; i < n + 1; i++)
			sum[i] = vectorOne(n, matrix[i]);

		double maxSum = sum[1];
		for (int i = 2; i < n + 1; i++)
			if (maxSum < sum[i])
				maxSum = sum[i];

		return maxSum;
	}

	/**
	 * 计算矩阵的2范数(未完成,调用则返回0)
	 * 
	 * @param n
	 *            矩阵阶数
	 * @param matrix
	 *            矩阵matrix必须为matrix[i][j]=matrix的第i行j列元素,即有0的下标都不使用
	 * @return 矩阵的2范数
	 */
	public static double matrixTwo(int n, double[][] matrix) {
		return 0;
	}

	/**
	 * 计算矩阵的无穷大范数
	 * 
	 * @param n
	 *            矩阵阶数
	 * @param matrix
	 *            矩阵matrix必须为matrix[i][j]=matrix的第i行j列元素,即有0的下标都不使用
	 * @return 矩阵的无穷大范数
	 */
	public static double matrixInfinitive(int n, double[][] matrix) {
		double[] sum = new double[n + 1];

		for (int j = 1; j < n + 1; j++)
			for (int i = 1; i < n + 1; i++)
				sum[j] += matrix[i][j];

		double maxSum = sum[1];
		for (int i = 2; i < n + 1; i++)
			if (maxSum < sum[i])
				maxSum = sum[i];

		return maxSum;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -