[未答复] 有一段Java,求帮忙转化为matlab语言

[复制链接]
hu_xh 发表于 2022-6-19 16:45:15
原来的Java代码是
import static java.lang.Math.*;

public class xunhuan {
    private static int L = 2;
    private static int A = L, B = L, C = L, D = L;
    private static int n = 5;
    private static double CV0 = 0.02;
    private static int R0 = 80;
    private static int R1 = 80, R2 = 80, R3 = 80, R4 = 80, R5 = 80;
    private static int CVR1 = 0, CVR2 = 0, CVR3 = 0, CVR4 = 0, CVR5 = 0;
    private static double[] arrR = {R1, R2, R3, R4, R5};
    private static double[] arrCVR = {CVR1, CVR2, CVR3, CVR4, CVR5};

    public static void main(String[] args) {
        xunhuan(L);
    }

    public static void xunhuan(int L) {


        int sumR = 0;
        //int aveR = 0;
        for (int i = 0; i < arrR.length; i++) {
            sumR += arrR[i];
        }
        int aveR = sumR / (arrR.length);    //求平均值R

        double sumcv = 0L;

        int i = 0;
        while (i < n) {
            int si = (i + 1) / 2; //求取(i/2)取整部分
            if (i % 2 == 0) {//根据i奇偶值确定不同R(i)
                arrR[i] = arrR[i] + L * si; //求R(i)
            } else if (i % 2 == 1) {
                arrR[i] = arrR[i] - L * si;
            }
            for (int j = 1; j <= n; j++) {
                double x = Math.pow((arrR[j - 1] - aveR), 2);
                sumcv += x;
            }
            arrCVR[i] = sqrt(sumcv / (n - 1)) / aveR; //求CVR
            if (arrCVR[i] >= CV0) break;//判断CVR和CV0大小,如果不符合则退出循环
            i++;
        }

        //更新平均值R
        for (int k = 0; k < arrR.length; k++) {
            sumR += arrR[k];
        }
        int aveR1 = sumR / (arrR.length);

        //更新CV
        for (int j = 1; j <= n; j++) {
            double x = Math.pow((arrR[j - 1] - aveR1), 2);
            sumcv += x;
        }
        float CV = (float) (sqrt(sumcv / (n - 1)) / aveR1);

        if (((aveR1 - R0) / R0) > 0.1) {
            A = A / 2;
            xunhuan(A);
        } else if ((CV - CV0 > -0.1) && (CV - CV0 < 0)) {
            B *= 2;
            xunhuan(B);
        } else if ((CV - CV0 < 0.1) && ((CV - CV0 > 0))) {
            C /= 2;
            xunhuan(C);
        } else {
            for (double tem : arrR) {
                System.out.println(tem);
            }
        }
    }
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表