java问题:需要输入数学函数公式,画出该函数的图像.现求一个公式解析的代码,或已有类库.公式解析的类库我找过一些.挺庞大.不太好用.解析不用太复杂,可以解析n次方,sin,cos,带()的数学公
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/05 11:51:30
java问题:需要输入数学函数公式,画出该函数的图像.现求一个公式解析的代码,或已有类库.公式解析的类库我找过一些.挺庞大.不太好用.解析不用太复杂,可以解析n次方,sin,cos,带()的数学公
java问题:需要输入数学函数公式,画出该函数的图像.现求一个公式解析的代码,或已有类库.
公式解析的类库我找过一些.挺庞大.不太好用.解析不用太复杂,可以解析n次方,sin,cos,带()的数学公式等.这种水平就好了.求教各大虾
java问题:需要输入数学函数公式,画出该函数的图像.现求一个公式解析的代码,或已有类库.公式解析的类库我找过一些.挺庞大.不太好用.解析不用太复杂,可以解析n次方,sin,cos,带()的数学公
我以前给j2me写的一个类,你看下:
用的时候这么用 private BDS bds=BDS.trans("-x+1");
System.out.println(bds.eval(10));
这样的
另外这里面的Hstx.pow和Hstx.ln可以用数学库里的函数替代,因为j2me里没有的
public class BDS{
public int errn=0;
public int len=0;
public int type[]=new int[100];
public double dd[]=new double[100];
public char dc[]=new char[100];
public static BDS trans(String ts){
BDS tr=new BDS();
char s[]=ts.toCharArray(),stk[]=new char[100];
int l=ts.length(),p=0,sl=0;
if(s[0]=='-')s[0]='~';
for(int i=1;i=l||s[i+1]!='n'||s[i+2]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='l';
i++;
continue;
}
if(s[i]=='s'){
if(i+3>=l||s[i+1]!='i'||s[i+2]!='n'||s[i+3]!='('){
if(i+4>=l||s[i+1]!='q'||s[i+2]!='r'||s[i+3]!='t'||s[i+4]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='q';
i+=3;
continue;
}
stk[sl++]='s';
i+=2;
continue;
}
if(s[i]=='c'){
if(i+3>=l||s[i+1]!='o'||s[i+2]!='s'||s[i+3]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='c';
i+=2;
continue;
}
if(s[i]=='t'){
if(i+3>=l||s[i+1]!='a'||s[i+2]!='n'||s[i+3]!='('){
tr.errn=1;
return tr;
}
stk[sl++]='t';
i+=2;
continue;
}
if(s[i]=='~'||s[i]=='('){
stk[sl++]=s[i];
continue;
}
if(s[i]=='+'||s[i]=='-'){
while(sl>0&&stk[sl-1]!='('){
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
stk[sl++]=s[i];
continue;
}
if(s[i]=='*'||s[i]=='/'||s[i]=='^'){
while(sl>0&&(stk[sl-1]!='('&&stk[sl-1]!='+'&&stk[sl-1]!='-')){
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
stk[sl++]=s[i];
continue;
}
if(s[i]==')'){
while(sl>0&&stk[sl-1]!='('){
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
sl--;
if(sl0){
if(stk[sl-1]=='('){
tr.errn=1;
return tr;
}
tr.type[p]=2;
tr.dc[p]=stk[--sl];
p++;
}
tr.len=p;
tr.eval(1);
return tr;
}
public double eval(double x){
int sl=0;
double stk[]=new double[100];
for(int i=0;i