如何将Mathematica计算出的表达式化为C++中的式子?

我用的是Mathematica 6.0,化简的表达式是自然书写显示的,但是我需要将这个式子用在C++的编程计算中,请问如何转化?

这个可不是那么容易转化的,需要看具体的内容。
比如求一元二次方程的根:ax^+bx+c=0,输入Mathematica可以得到:
x=(-b±√b^-4ac)/2a
但是注意在C++必须以数值进行计算,也就是说,至少要判断
(1)如果b^-4ac==0,则x为1个浮点类型的实数 x = -b/2a
(2)如果b^-4ac>0,则x有两个实数根,你至少需要两个浮点t型的变量x1、x2分别存储两个实根
(3)如果b^-4ac<0,则x被解出两个复数根,你需要用两个复数型变量x1、x2来存储。复数型变量是complex结构体,每个结构内部有两个浮点类型的变量分别代表该复数的实部和虚部。

综上所述,如果要编程序,最少编成这样:
#include <cmath>
//根据abc求一元二次方程ax^+bx+c=0的根,分别存储在两个复数指针x1和x2内
//如果返回1,表示有两个相同的实数根;
//如果返回2,表示有两个不同的实数根;
//如果返回0,表示有两个不同的复数根;
//如果返回值小于0,表示参数指针x1或x2没有初始化
int calc_root(double a, double b, double c, struct complex * x1, struct complex * x2)
{
if (!x1 || !x2) return -1;
double d = b * b - 4 * a * c; // b^-4ac
double e = -b / (2*a);
x1->x = e; x1->y =0;
x2->x = e; x2->y =0;
if (d < 1e-8) //先按 b^-4ac==0判断
{
if(d > 0) //即b^-4ac==0
return 1; //返回两个相同的实根(虚部为0)
else //即b^-4ac<0
{
d = sqrt(-d) / (2*a);
x1->y = d; x2->y = -d;
return 0;//返回两个复数根(虚部不为0)
}//end if
}//end if
d = sqrt(d)/(2*a);
x1->x+=d;
x2->x-=d;
return 2; //返回两个不同的实根(即虚部为0)
}//end calc

void calculation(double a, double b, double c)
{
struct complex m,n;
switch(calc_root(a,b,c, &m, &n)) {
case 0: //两个复数根
cout << "x1 = " << m->x << "+i" << m->y << endl;
cout << "x2 = " << n->x << "+i" << n->y << endl;
break;
case 1: //两个相同的实根
cout << "x1 = x2 =" << m->x <<endl;
break;
case 2: //两个不同的实根
cout << "x1 = " << m->x << endl;
cout << "x2 = " << n->x << endl;
}//end case
}

//调用时,输入abc的值,则求出结果。
void main(void)
{
double a,b,c;
cin >> a; cin >> b; cin>>c;
calculatioin(a,b,c);
}

换句话说:
(1)Mathematica的代数逻辑不能直接转化成C++语法;
(2)必须以分析具体结果,形成数值函数;
(3)注意定义域和值域追问

其实我的意思没有那么复杂,通过符号计算得到了一个表达式,显示例如2x+2,但是我想把它变成C++语言中可以输入的内容,也就是2*x+2,怎么做呢?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-11
如果只是要转换表达式的话,试试CForm函数。追问

例如2x+2,但是我想把它变成C++语言中可以输入的内容,也就是2*x+2,CForm函数就可以做到吗?这个函数是在Mathematica里面定义的吗?怎么使用呢?

追答

啊~那CForm正是你需要的。CForm的语法很简单的啊:
CForm[2 x + 2]

多看看帮助吧……话说建议用8.0,全中文帮助文档便于学习。

本回答被提问者采纳

如何将Mathematica计算出的表达式化为C++中的式子?
比如求一元二次方程的根:ax^+bx+c=0,输入Mathematica可以得到:x=(-b±√b^-4ac)\/2a 但是注意在C++必须以数值进行计算,也就是说,至少要判断 (1)如果b^-4ac==0,则x为1个浮点类型的实数 x = -b\/2a (2)如果b^-4ac>0,则x有两个实数根,你至少需要两个浮点t型的变量x1、x2...

比特之理 我为什么喜欢Mathematica
然后我希望得到一个二维矩阵,大小就是上面这张图的横宽格子数,如果这个格子里面是黑色,那么这个位置的值是1,否则为0,那么我可以把图片本身当做参数传进代码里面,这样就省去了保存到本地,再读取的步骤。这种交互方式你不觉得简直人性化到极点了么?强大 友好的交互不能体现一款软件的强大!!但是...

Mathematica 的语言跟Matlab语言是一样的吗
也可以将Mathematica的输出转化为C,Fortran语言和Tex编译器(注:Tex是著名的数学文章编辑软件,用它打印出的文章,字体漂亮、格式美观)所需的形式.甚至还可以在C语言中嵌人Mathematica的语句.这使Mathematica编程更灵活方便增强了Mathematica的功能. 2. Mathematica运行和基本操作 Mathematica有各种版本(Dos版本,...

matlab怎样实现数字和字符的转换?
数字向字符转换 :a=num2str(3),得到a=‘3’语法格式:str = num2str(A)把数组A中的数转换成字符串表示形式。str = num2str(A, precision)把数组A转换成字符串形式表示,precision表示精度, 比如precision为3表示保留最多3位有效数字, 例如0.5345转换后为0.534,1.2345转换后为1.23。即从左边...

算法的问题,可以编程或者计算数学计算?
第一,2048个单词,选出24个单位为一组,有多少组方案(设为A)。A = 2048!\/(2048-24)!第二,24个一组当中,23个进行全排列, 那个特定的单词可以插入在第三或第五的位置,有2个选择。组内的排列有多少种方案(设为B)。B = 23!*2 第三,合并前两个计算,总的排列方案数为多少(设为...

数学建模程序有什么
·Mathematica可编排专业的科学论文期刊,让运算与排版在同一环境下完成,提供高品质可编辑的排版公式与表格,屏幕与打印的 自动最佳化排版,组织由初始概念到最后报告的计划,并且对 txt、html、pdf 等格式的输出提供了最好的兼容性。·可与 C、C++ 、Fortran、Perl、Visual Basic、以及 Java 结合,提供...

matlab编程是用什么语言的啊?
matlab编程语言是:C++语言。Matlab是一个高级的矩阵\/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与...

matlab中的poly是什么意思?
P=poly([1 2 3; 4 5 6; 7 8 0]) 可以解出P=[1 -6 -72 -27],即方阵A特征多项式为:λ^3-6*λ^2-72*λ-27=0。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接...

我是学的机械自动化的,需要学习matlab吗,我知道它是一个数学软件,它的...
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.在新的版本中也加入了对C,FORTRAN,c++ ,JAVA的支持.可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些...

matlab中a(:,1:2:3)是什么意思?
MATLAB中A(:,1:2:3)表示取矩阵A的第1列和第3列的值。说明:A中逗号之前的:表示所有行,逗号之后的1:2:3表示列从1到3取值,步长为2,所以列能取到的值为1,3。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数...

相似回答