二元函数求导

单纯的无聊做的,实际一丁点用都没有!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package cn.sgnxotsmicf.Demo;

//二元多项式求导
import java.util.ArrayList;
import java.util.Scanner;
public class test0005 {
public static void main(String[] args) {
ArrayList<Double> var = new ArrayList<>();//变量系数
ArrayList<Double> exp = new ArrayList<>();//幂次幂次
ArrayList<Double> varX1 = new ArrayList<>();//求x1时x2幂次
ArrayList<Double> varX2 = new ArrayList<>();//求x2时x1幂次
Scanner sc = new Scanner(System.in);
x1_x2Judge(sc,var,exp,varX1,varX2);
input(var,exp,varX1,varX2);
}

private static void x1_x2Judge(Scanner sc,ArrayList<Double> var,ArrayList<Double> exp,
ArrayList<Double> varX1,ArrayList<Double> varX2) {
int i =0;
System.out.println("输入1对x1求导:");
int instruct1 = sc.nextInt();
System.out.println("请输入关于x"+instruct1+"的项数:");
int number1 = sc.nextInt();
int tempt =operation(sc,var,exp,i,number1,instruct1,varX1,varX2);
System.out.println("输入2对x2求导:");
int instruct2= sc.nextInt();
System.out.println("请输入关于x"+instruct2+"的项数:");
int number2 = sc.nextInt();
operation(sc,var,exp,tempt,number2,instruct2,varX1,varX2);
}
private static int operation(Scanner sc,ArrayList<Double> var,ArrayList<Double> exp,int i,int number,int instruct,
ArrayList<Double> varX1,ArrayList<Double> varX2){
int tempt = 0;
do {
System.out.println("请输入第" + (tempt + 1) + "个变量系数:");
var.add(sc.nextDouble());
System.out.println("请输入第" + (tempt + 1) + "个变量幂次:");
exp.add(sc.nextDouble());
if (instruct == 1) {
derivation_Operation(var, exp, i);
}else if (instruct == 2){
derivation_Operation(var,exp,i);
}
Judge(instruct,sc,varX1,varX2);
i++;
tempt++;
} while (tempt < number);
return i;
}
private static void Judge(int instruct,Scanner sc,ArrayList<Double> varX1,ArrayList<Double> varX2) {
if (instruct==1){
System.out.println("该x"+instruct+"项(有/无)x2项相乘?");
varX1_X2_Operation(sc,varX1);
}else if (instruct==2){
System.out.println("该x"+instruct+"项(有/无)x1项相乘?");
varX1_X2_Operation(sc,varX2);
}
}

private static void varX1_X2_Operation(Scanner sc,ArrayList<Double> varX) {
String answer = sc.next();
if (answer.equals("有")){
System.out.println("幂次为多少?");
double x = sc.nextInt();
varX.add(x);
}else if (answer.equals("无")){
varX.add(0.0);
}
}

private static void input(ArrayList<Double> var, ArrayList<Double> exp, ArrayList<Double> varX1,ArrayList<Double> varX2) {
System.out.println("变量系数:"+var.toString());
System.out.println("变量幂次:"+exp.toString());
System.out.println("求x1时x2幂次:"+varX1.toString());
System.out.println("求x2时x1幂次:"+varX2.toString());
}

private static void derivation_Operation(ArrayList<Double> var,ArrayList<Double> exp,int i) {
if (var.get(i)==0||exp.get(i)==0){
var.set(i,0.0);
exp.set(i,0.0);
}else {
var.set(i,var.get(i)*exp.get(i));
exp.set(i,exp.get(i)-1);
}
}
}