【发布时间】:2020-02-11 02:50:54
【问题描述】:
在 Matlab 中 x=A\b;求解线性系统 Ax=b。是否可以在 C++ 中模仿相同的内容?可以通过运算符重载,但是如何在下面的程序中使用 \ 而不是 /?
friend Vector operator/(const Vector &b, const Matrix &A)
{ //BiCG Algorithm is used here.
int row=A.getrowdim();
int col=A.getcoldim();
Vector x(row,0.0);
Vector r(row,0.0);
Vector s(row,0.0);
Vector u(row,0.0);
Vector v(row,0.0);
Vector w(row,0.0);
Vector p(row,0.0);
double rho0,beta,alpha,rho;
Vector t(row,0.0);
double norm;
r=b-A*x;
s=r;
rho0=1;
for(int k=1;k<M;k++)
{
rho=s*r;
beta=rho/rho0;
u=r+beta*u;
w=s+beta*w;
v=A*u;
alpha=rho/(w*v);
x=x+alpha*u;
r=r-alpha*v;
s=s-alpha*(Transpose(A)*w);
norm=r.norm(2);
cout<<"Step Number "<<k<<" xnorm "<<norm<<endl;
if(norm<eps)
break;
rho0=rho;
}
return x;
}
【问题讨论】:
-
任何不错的 C++ 书籍、教程或课程都应该告诉您,您不能发明自己的运算符。
-
是的。确实如此,我知道。我想知道是否有任何黑客可用。
-
像普通函数一样给它一个合理的描述性名称。
-
运算符重载的缺点比人们预期的要多。重载运算符的一个好例子是语义对每个人来说都是自然且清晰的。由于 C++ 中没有其他任何东西都有运算符 `\`,所以您的情况不是其中之一,然后通常最好使用成员函数
标签: c++ operator-overloading operators