我试图在Mathematica 7.0中解决以下实现问题已有几天了,我不知道到底发生了什么,所以我希望有人可以给我一些提示.我有3个函数,我在Mathematica中实现了一个扩展名为*.nb的源文件.他们对所有的例子都很好.现在我想将这些功能放到3个不同的包中.所以我用扩展名.*m创建了三个不同的包,其中我放了所有想要的Mathematica函数."stereographic.m"包中的一个示例,其中包含以下代码:
BeginPackage["stereographic`"]
stereographic::usage="The package stereographic...."
formEqs::usage="The function formEqs[complexBivPolyEqn..."
makePoly::usage="The function makePoly[algebraicEqn] ..."
getFixPolys::usage="The function..."
milnorFibration::usage="The function..."
Begin["Private`"]
Share[];
formEqs[complex_,{m_,n_}]:=Block[{complexnew,complexnew1, realeq, imageq, expreal,
expimag, polyrealF, polyimagF,s,t,u,v,a,b,c,epsilon,x,y,z},
complexnew:=complex/.{m->s+I*t,n->u+I*v};
complexnew1:=complexnew/.{s->(2 a epsilon)/(1+a^2+b^2+c^2),t->(2 b
epsilon)/(1+a^2+b^2+c^2),u->(2 c epsilon)/(1+a^2+b^2+c^2),v->(-
epsilon+a^2 epsilon+b^2 epsilon+c^2
epsilon)/(1+a^2+b^2+c^2)};
realeq:=ComplexExpand[Re[complexnew1]];
imageq:=ComplexExpand[Im[complexnew1]];
expreal:=makePoly[realeq];
expimag:=makePoly[imageq];
polyrealF:=expreal/.{a->x,b->y,c->z};
polyimagF:=expimag/.{a->x,b->y,c->z};
{polyrealF,polyimagF}
]
End[]
EndPackage[]
Run Code Online (Sandbox Code Playgroud)
现在测试我加载包的功能
Needs["stereographic`"]
Run Code Online (Sandbox Code Playgroud)
一切正常.但是当我用例如测试函数时
formEqs[x^2-y^2,{x,y}]
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
{Private`epsilon^2 + 2 Private`x^2 Private`epsilon^2 +
Private`x^4 Private`epsilon^2 -
6 Private`y^2 Private`epsilon^2 +
2 Private`x^2 Private`y^2 Private`epsilon^2 +
Private`y^4 Private`epsilon^2 -
6 Private`z^2 Private`epsilon^2 +
2 Private`x^2 …Run Code Online (Sandbox Code Playgroud) 我有这个变量,一个双指针向量,如:
vector<double*> myIntersections;
Run Code Online (Sandbox Code Playgroud)
其中包含一个向量,其元素都是双精度的二维向量.我想创建一个XML文件(例如调用myfile.axl - 具有这个特定的扩展名),其中文件的每一行都由向量的每个元素给出(因此在每一行上,一个元素至少需要向量[i] ] [0],vector [i] [1])和XML文件的标签是..等(因此用户定义).XML应该是这样的文件:
<point name="intersectPoints" size="4" color="rgb">
-2.68 1.82 0.0 255 0 0
-2.63 1.03 0.0 255 0 0
</point>
Run Code Online (Sandbox Code Playgroud)
其中vector [0] [0] = - 2.68,vector [0] [1] = 1.82等等(0.0 255 0 0总是一样)我知道如何用C++编写文件(我正在考虑使用fstream库),但我不知道如何创建XML标签(除了字符串以这种方式,他们将通过字符串)所以我有点迷失.
任何建议都受到欢迎.谢谢你的时间,马达利娜
我有一个函数getSlope,它接受4个双精度参数并返回另一个使用这个给定参数计算的双精度,方法如下:
double QSweep::getSlope(double a, double b, double c, double d){
double slope;
slope=(d-b)/(c-a);
return slope;
}
Run Code Online (Sandbox Code Playgroud)
问题是当使用参数调用此函数时,例如:
getSlope(2.71156, -1.64161, 2.70413, -1.72219);
Run Code Online (Sandbox Code Playgroud)
返回的结果是:
10.8557
Run Code Online (Sandbox Code Playgroud)
这对我的计算来说不是一个好结果.我使用Mathematica计算了斜率,相同参数的斜率结果为:
10.8452
Run Code Online (Sandbox Code Playgroud)
或者更精确的数字:
10.845222072678331.
Run Code Online (Sandbox Code Playgroud)
我的程序返回的结果在我的进一步计算中并不好.此外,我不明白该程序如何从10.845222072678331开始返回10.8557(假设这是该部门的近似结果)?如何才能为我的部门取得好成绩?
马达里亚,先谢谢你
我使用命令行打印结果:
std::cout<<slope<<endl;
Run Code Online (Sandbox Code Playgroud)
可能是我的参数可能不好,因为我从另一个程序中读取它们(计算图形;从我的图形中读取这些参数后,我刚刚显示它们以查看它们的值但是显示的矢量可能不一样计算值的内部精度.我不知道它真的很奇怪.出现一些数值误差..)
当计算我正在读取我的参数的图形时,使用一些用C++编写的数字库(带有模板).没有OpenGL用于此计算.
谢谢,madalina
我有这个简单的测试:
double h;
...
// code that assigns h its initial value, used below
...
if ((h>0) && (h<1)){
//branch 1 -some computations
}
else{
//branch 2- no computations
}
Run Code Online (Sandbox Code Playgroud)
我列出了我的值,因为我得到了一些非常奇怪的结果,例如:h = 1然后第一个分支到达,我不明白为什么因为如果h = 1我想要计算branch2.
我被一些如此明显的东西搞糊涂了吗?
这是我计算然后使用的方式h:
double* QSweep::findIntersection(edge_t edge1,edge_t edge2) {
point_t p1=myPoints_[edge1[0]];
point_t p2=myPoints_[edge1[1]];
point_t p3=myPoints_[edge2[0]];
point_t p4=myPoints_[edge2[1]];
double xD1,yD1,xD2,yD2,xD3,yD3,xP,yP,h,denom;
double* pt=new double[3];
// calculate differences
xD1=p2[0]-p1[0];
xD2=p4[0]-p3[0];
yD1=p2[1]-p1[1];
yD2=p4[1]-p3[1];
xD3=p1[0]-p3[0];
yD3=p1[1]-p3[1];
xP=-yD1;
yP=xD1;
denom=xD2*(-yD1)+yD2*xD1;
if (denom==0) {
return NULL;
}
else{
h=(xD3*(-yD1)+yD3*xD1)/denom;
}
std::cout<<"h …Run Code Online (Sandbox Code Playgroud) 我希望在乳胶中有几个文本,这些文本被装在一个圆形或更多的圆形框中.我试着用:
\pgfnodecircle{Node1}[stroke]{\pgfxy(1,1)}{0.5cm}
\pgfnodecircle{Node2}[strokel]{\pgfxy(3,0.5)}{0.25cm}
\pgfnodecircle{Node3}[fill]{\pgfxy(5,1)}{0.25cm}
\pgfnodeconnline{Node1}{Node2}
\pgfnodeconnline{Node2}{Node3}
Run Code Online (Sandbox Code Playgroud)
但是这个\pgfnodecircle命令不允许我在nodecircle中写文本.我可以添加文字,\pgfnodebox但我真的希望文本被圆形框包围,而不是矩形框.
我有这个类,在某些时候我正在计算两个双精度数组:
double* QSweep::computeIntersection(double m1, double b1, double m2, double b2){
double* v=new double[2];
v[0]= (b2-b1)/(m1-m2);
v[1]= (m1*b2-m2*b1)/(m1-m2);
return v;
}
Run Code Online (Sandbox Code Playgroud)
在类的另一个函数中,我使用此数组来处理其值.根据作为参数传输的值,我获得了两个daoubles的这个数组的几个值.我希望将所有这些值保留在两个双精度数组的数组中.我已经尝试了一些方法,但我有bur错误,segementation故障或所有问题,因为这.欢迎任何想法.
马达里亚,先谢谢你