Пример #1
0
int LDL2::Solve(complex_t *x) const {
	int ret;
	ret = SolveL(x);
	if(0 != ret){ return ret; }
	ret = SolveD(x);
	if(0 != ret){ return ret; }
	ret = SolveLt(x);
	if(0 != ret){ return ret; }
	return 0;
}
Пример #2
0
bool FindExtremPoints(double * data_dir,double* data_sup,double* data_res,int n)
{
	//double *data_X=new double[n+n];
	//int *data_I= new int[n];
	double * data_X=(double *)mxCalloc(n+n,sizeof(double));
	int *data_I=(int *)mxCalloc(n,sizeof(int));
	int ipp(0),ip(1),ipn,ippn,tmp,tmp1,tmp2,tmp0;
	double cur_nscal(1);
	data_I[0]=0;data_I[1]=1;
	int d(4),s(2),rs,rd,k;
	SolveL(data_X,data_dir,data_dir+2,data_sup,data_sup+1);
	for (;s<n;s++,d+=2)
	{
		rs=ip-1;
		rd=rs+rs;
		while (SProduct(data_X+rd,data_dir+d)>data_sup[s])
		{
			rd-=2;rs--;
			if (rs<ipp)
			{
				break;
			}
		}
		ipn=rs+1;
		if	(cur_nscal<0)
		{	
			tmp=ip+ip;
			if (SProduct(data_X+tmp,data_dir+d)>data_sup[s])
			{
				rs=ipp;
				rd=rs+rs;
				tmp=ip-1;
				while (SProduct(data_X+rd,data_dir+d)>data_sup[s])
				{
					rd+=2;rs++;
					if (rs>=tmp)
					{
						break;
					}
				}
				ippn=rs;
			}
			else
			{
				ippn=ip;
			}
		}
		else
		{
			ippn=ipp;
		}
		if ((ipn<ip)||(ippn<ip)||(cur_nscal>=0))
		{
			ip=ipn+1;
			ipp=ippn;
			if (ipp>=ip)
			{
				/////////////////
		//		res=nan;ћножество ¤вл¤етс¤ пустым
				//необходимо посмотреть, как реализуетс¤ 
			//	присвоение свойсво Ёнеопределено инициалзированной переменной
			//		пэтому мы должны находитс¤ в том само метсе в котром рождаютс¤ 
			//		мечты и мы должны действовать достаточно быстро.
				//delete [] data_X;
				mxFree(data_X);
				mxFree(data_I);
				return true;
			}
			data_I[ip]=s;
			tmp=ipn+ipn;
			tmp1=data_I[ipn]+data_I[ipn];
			SolveL(data_X+tmp,data_dir+tmp1,data_dir+d,data_sup+data_I[ipn],data_sup+s);
			tmp1=data_I[ipp]+data_I[ipp];
			cur_nscal=data_dir[d+1]*data_dir[tmp1]-data_dir[d]*data_dir[tmp1+1];
			if (cur_nscal<0)
			{	
				tmp=ip+ip;
				SolveL(data_X+tmp,data_dir+tmp1,data_dir+d,data_sup+data_I[ipp],data_sup+s);
			}
		}
	}
	for (k=ipp;k<=ip;k++)
	{
		tmp=k+k;
		tmp1=data_I[k]+data_I[k];
		memcpy(data_res+tmp1,data_X+tmp,2*sizeof(double));
	}
	tmp=ip-1;
	for (k=0;k<=tmp;k++)
	{
		tmp0=data_I[k]+1;
		tmp1=data_I[k+1]-1;
		tmp2=data_I[k]+data_I[k];
		for (s=tmp0;s<=tmp1;s++)
		{
			memcpy(data_res+s+s,data_res+tmp2,2*sizeof(double));
		}
	}
	tmp0=data_I[ipp]-1;
	tmp1=data_I[ip]+data_I[ip];
	for (s=0;s<=tmp0;s++)
	{
		memcpy(data_res+s+s,data_res+tmp1,2*sizeof(double));
	}
	tmp0=data_I[ip]+1;
	for (s=tmp0;s<n;s++)
	{
		memcpy(data_res+s+s,data_res+tmp1,2*sizeof(double));
	}
	mxFree(data_X);
	mxFree(data_I);
	return false;
}