void test2()//计算倒数 { CMatlabEngine eng; eng.OpenEngine(); char tmp[200];//表达式 char tmp1[200]; mxWrap df;//导数表达式 mxWrap val;//原函数值 mxWrap dfval;//导数值 xDouble vx0;//x0 输入 double x0=0; int n=1;//导数阶数 strcpy(tmp,"syms x;"); eng.EvalString(tmp); cout<<"输入表达式:"; cin>>tmp; cout<<"输入导数阶数:"; cin>>n; cout<<"输入x0:"; cin>>x0; vx0.SetRealData(x0); while( tmp[0] != 'q' ) { eng.PutVar("x0",vx0.GetArray());//input x0 //get express sprintf(tmp1,"%s;z1=char(diff(y,%d)),z=char(z1),val=subs(y,x,x0),dfval=subs(z,x,x0)",tmp,n); //cal eng.EvalString(tmp1); //get val eng.GetVar("z",&df);//n阶导数表达式 eng.GetVar("val",&val);//原函数在x0处的数值 eng.GetVar("dfval",&dfval);//n阶导数在x0处的数值 // cout<<"---------------------------matlab output----------------/n"; // cout<<eng.GetOutPut()<<endl; // cout<<"---------------------------------------------------------/n"; cout<<"---------------------------求导结果----------------/n"; xString*ps=(xString*)df.GetArrayInterface(); cout<<"求导结果:"<<ps->GetString().data()<<endl; xDouble*pd=(xDouble*)val.GetArrayInterface(); cout<<"原函数在x0处的值:"<<pd->GetRealData()<<endl; pd=(xDouble*)dfval.GetArrayInterface(); cout<<"原函数导n阶数在x0处的值:"<<pd->GetRealData()<<endl; cout<<"----------------------------------------------------/n"; cout<<"输入表达式:"; cin>>tmp; cout<<"输入导数阶数:"; cin>>n; cout<<"输入x0:"; cin>>x0; vx0.SetRealData(x0); } eng.CloseEngine(); } SAN NUAA 2011.3.9