首页 > 编程知识 正文

Java 数值计算 向量的1范数2范数oo范数,向量的范数怎么计算

时间:2023-05-03 23:30:18 阅读:237147 作者:2496

题目如下:

代码如下:

package l;import java.util.Arrays;public class problem_1 {public static void main(String[] args) {// TODO 自动生成的方法存根//利用for循环求解1范数 double n1=100,n2=1000,n3=10000; double x_sum1=0,x_sum2=0,x_sum3=0, y_sum1=0,y_sum2=0,y_sum3=0; for(double i=1;i<=n1;i++) { //求解n=100时x的1范数 x_sum1=x_sum1+1/(i*i); } for(double i=1;i<=n2;i++) {//求解n=1000时x的1范数 x_sum2=x_sum2+1/(i*i); } for(double i=1;i<=n3;i++) {//求解n=10000时x的1范数 x_sum3=x_sum3+1/(i*i); } for(double i=1;i<=n1;i++) {//求解n=100时y的1范数 y_sum1=y_sum1+i*i; } for(double i=1;i<=n2;i++) {//求解n=1000时y的1范数 y_sum2=y_sum2+i*i; } for(double i=1;i<=n3;i++) {//求解n=10000时y的1范数 y_sum3=y_sum3+i*i; } System.out.println("n=100时,||x||的1范数为"+x_sum1); System.out.println("n=1000时,||x||的1范数为"+x_sum2); System.out.println("n=10000时,||x||的1范数为"+x_sum3); System.out.println("n=100时,||y||的1范数为"+y_sum1); System.out.println("n=1000时,||y||的1范数为"+y_sum2); System.out.println("n=10000时,||y||的1范数为"+y_sum3); System.out.println("-----------------我是分割线--------------------"); // 以下部分利用数组排序求解oo范数 double x1[] = new double[100]; // 创建n=100的x数组,用来装x向量 double y1[] = new double[100];//创建n=100的y数组,用来装y向量 double x2[] = new double[1000]; // 创建n=1000的x数组,用来装x向量 double y2[] = new double[1000];//创建n=1000的y数组,用来装y向量 double x3[] = new double[10000]; // 创建n=10000的x数组,用来装x向量 double y3[] = new double[10000];//创建n=10000的y数组,用来装y向量 Arrays.sort(x1); //对x1数组进行排序 Arrays.sort(y1); //对y1数组进行排序 Arrays.sort(x2); //对x2数组进行排序 Arrays.sort(y2); //对y2数组进行排序 Arrays.sort(x3); //对x3数组进行排序 Arrays.sort(y3); //对y3数组进行排序 for(double i=1;i<=n1;i++) { //创建x1的数组 x1[(int)(i-1)]=(double)(1/(i*i)); } for(double i=1;i<=n2;i++) { //创建x2的数组 x2[(int)(i-1)]=(double)(1/(i*i)); } for(double i=1;i<=n3;i++) { //创建x3的数组 x3[(int)(i-1)]=(double)(1/(i*i)); } for(double i=1;i<=n1;i++) { //创建y1的数组 y1[(int)(i-1)]=(double)(i*i); } for(double i=1;i<=n2;i++) { //创建y2的数组 y2[(int)(i-1)]=(double)(i*i); } for(double i=1;i<=n3;i++) { //创建y3的数组 y3[(int)(i-1)]=(double)(i*i); } System.out.println("n=100时,||x||的oo范数为"+x1[0]); System.out.println("n=1000时,||x||的oo范数为"+x2[0]); System.out.println("n=10000时,||x||的oo范数为"+x3[0]); System.out.println("n=100时,||y||的oo范数为"+y1[99]); System.out.println("n=1000时,||y||的oo范数为"+y2[999]); System.out.println("n=10000时,||y||的oo范数为"+y3[9999]); System.out.println("-----------------我是分割线--------------------"); //利用MAth类求解2范数 double xsum1=0,xsum2=0,xsum3=0, ysum1=0,ysum2=0,ysum3=0; for(double i=1;i<=n1;i++) { //求解n=100时x的2范数 xsum1=xsum1+Math.pow(1/(i*i),2); } for(double i=1;i<=n2;i++) {//求解n=1000时x的2范数 xsum2=xsum2+Math.pow(1/(i*i),2); } for(double i=1;i<=n3;i++) {//求解n=10000时x的2范数 xsum3=xsum3+Math.pow(1/(i*i),2); } for(double i=1;i<=n1;i++) {//求解n=100时y的2范数 ysum1=ysum1+Math.pow((i*i),2); } for(double i=1;i<=n2;i++) {//求解n=1000时y的2范数 ysum2=ysum2+Math.pow((i*i),2); } for(double i=1;i<=n3;i++) {//求解n=10000时y的2范数 ysum3=ysum3+Math.pow((i*i),2); } System.out.println("n=100时,||x||的2范数为"+Math.sqrt(xsum1)); System.out.println("n=1000时,||x||的2范数为"+Math.sqrt(xsum2)); System.out.println("n=10000时,||x||的2范数为"+Math.sqrt(xsum3)); System.out.println("n=100时,||y||的2范数为"+Math.sqrt(ysum1)); System.out.println("n=1000时,||y||的2范数为"+Math.sqrt(ysum2)); System.out.println("n=10000时,||y||的2范数为"+Math.sqrt(ysum3));}}

运行结果:

n=100时,||x||的1范数为1.6349839001848923n=1000时,||x||的1范数为1.6439345666815615n=10000时,||x||的1范数为1.6448340718480652n=100时,||y||的1范数为338350.0n=1000时,||y||的1范数为3.338335E8n=10000时,||y||的1范数为3.33383335E11-----------------我是分割线--------------------n=100时,||x||的oo范数为1.0n=1000时,||x||的oo范数为1.0n=10000时,||x||的oo范数为1.0n=100时,||y||的oo范数为10000.0n=1000时,||y||的oo范数为1000000.0n=10000时,||y||的oo范数为1.0E8-----------------我是分割线--------------------n=100时,||x||的2范数为1.0403474925929665n=1000时,||x||的2范数为1.0403476502488511n=10000时,||x||的2范数为1.04034765040868n=100时,||y||的2范数为45280.60655512468n=1000时,||y||的2范数为1.4159814028909419E7n=10000时,||y||的2范数为4.472694974322906E9

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。