int main()
{
	pf("\n S-eries Circuit\n P-arallel Circuit");

pf("\n\n Choose a circuit : ");
c=getche();
system("cls");
switch (c){
	case 's' : case 'S':
	pf("\t  Series Circuit");
	Value();
	system("cls");
	Series();
	break;
	case 'p' :case 'P' :
	pf(" \t  Parallel Circuit");
	Value();
	system("cls");
	Parallel();
	break;
	default :
	pf("\t  %c is invalid !\n",c);
	main();
	break;
}
}
Ejemplo n.º 2
0
void SeriesListCtrl::OnDeleteSeries()
{
	POSITION pos=GetFirstSelectedItemPosition(); bool upd=false; void *x;
	if(pos)
	{
		CArray<int,const int&> ToDel; int i; CString temp; 
		while(pos) ToDel.Add(GetItemData(GetNextSelectedItem(pos)));
		qsort(ToDel.GetData(),ToDel.GetSize(),sizeof(int),compfunc);

		for(i=0;i<ToDel.GetSize();i++)
		{
			int n=ToDel[i];			
			temp.Format("Series %s contains %d points. Remove it?",Items[n].Name,Items[n].Size);
			if(AfxMessageBox(temp,MB_YESNO)==IDNO) ToDel[i]=-1;		
		}
		
		if((x=Series->GainAcsess(WRITE))!=0)
		{
			upd=true;
			SeriesProtector Protector(x); TSeriesArray& Series(Protector);
			{
				for(i=0;i<ToDel.GetSize();i++)
					if(ToDel[i]>=0) Series.DeleteItem(ToDel[i]);
			}
		}
		if(upd) UpdateSeriesList();
	}		
}
Ejemplo n.º 3
0
LRESULT CalcTEDialog::OnSeriesUpdate(WPARAM wParam, LPARAM lParam )
{
	CString T; int n;
	if(lParam!=0) 
	{
		Series=(ProtectedSeriesArray*)lParam;
		SeriesCombo.ResetContent();
		void *x; 
		if((x=Series->GainAcsess(READ))!=0)
		{
			SeriesProtector Protector(x); TSeriesArray& Series(Protector);			

			SeriesSearchPattern pattern; 
			pattern.mode=SERIES_NAME | SERIES_TYPE; 
			pattern.name=CString("FinalMins"); pattern.SeriesType=SIMPLE_POINT;
			TSeriesArray results(DO_NOT_DELETE_SERIES); 
			if( Series.FindSeries(pattern,results)!=0 )
			{				
				for(int i=0;i<results.Series.GetSize();i++)
				{
					T.Format("%s (%d)",results.Series[i]->Name,results.Series[i]->GetSize());
					n=SeriesCombo.AddString(T);
					SeriesCombo.SetItemData(n,(DWORD)results.Series[i]);
				}				
			}
		}
	}
	return 0;
}
Ejemplo n.º 4
0
  template <class T> array<T,int>& Series(const T& start, const T& end, const T& increment){
    if (end < start){return Series(end, start, increment);}
    else if (end == start){throw std::invalid_argument( "The inputs cannot be equivalent" );}

    array<T,int>* series = new array<T,int>(1,(end-start)/increment);
    T a = start;
    for (int count = 0; count < series->Size(); ++count){
      series->Assign(count, a);
      a += increment;
    }
    return *series;
  }
ЧебышёвSeries<Vector> ЧебышёвSeries<Vector>::ReadFromMessage(
    serialization::ЧебышёвSeries const& message) {
    using Serializer = DoubleOrQuantityOrMultivectorSerializer<
                       Vector,
                       serialization::ЧебышёвSeries::Coefficient>;

    std::vector<Vector> coefficients;
    coefficients.reserve(message.coefficient_size());
    for (auto const& coefficient : message.coefficient()) {
        coefficients.push_back(Serializer::ReadFromMessage(coefficient));
    }
    return ЧебышёвSeries(coefficients,
                                Instant::ReadFromMessage(message.t_min()),
                                Instant::ReadFromMessage(message.t_max()));
}
Ejemplo n.º 6
0
void SeriesListCtrl::ChangeStatus(int t)
{
	POSITION pos=GetFirstSelectedItemPosition(); void *x;
	if(pos)
	{		
		if((x=Series->GainAcsess(READ_EX))!=0)
		{
			SeriesProtector Protector(x); TSeriesArray& Series(Protector);
			while(pos)
			{
				int n=GetItemData(GetNextSelectedItem(pos)); 			
				TChartSeries *series=Series[n];		
				series->SetStatus(t);
			}
		}
		UpdateSeriesList();
	}	
}
Ejemplo n.º 7
0
LRESULT TChart::OnSeriesDataImport( WPARAM wParam, LPARAM lParam )
{
	MessagesInspectorSubject* msg=(MessagesInspectorSubject*)lParam; void *x;
	BYTE t=0;

	if(msg)
	{		
		if((x=Series.GainAcsess(WRITE))!=0)
		{
			SeriesProtector Protector(x); TSeriesArray& Series(Protector);
			for(int i=0;i<Series.GetSize();i++)
			{
				if(Series[i]->ImportData(msg,DO_NOT_DELETE_MSG)!=0) t++;				
			}
		}
		delete msg;
		if(t) UpdateNow(REPAINT_DEFAULT);
	}
	return 0;
}
Ejemplo n.º 8
0
void SeriesListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	ProtectedSeriesArray& Series=*(SeriesListCtrl::Series); void *x;
	HitItem=HitTest(point);
	
	if (HitItem>=0)
	{
		CRect rect; GetItemRect(HitItem, rect, LVIR_ICON);
		if (point.x < rect.left)
		{
			BYTE state=GetState(HitItem);
			state++; if(state>2) state=1;
			SetState(HitItem,state); 			
			
			if((x=Series.GainAcsess(WRITE))!=0)
			{
				SeriesProtector Protector(x); TSeriesArray& Series(Protector);
				Series[GetItemData(HitItem)]->SetVisible(state-1);
			}
		}		
	}		
	CListCtrl::OnLButtonDown(nFlags, point);
}
Ejemplo n.º 9
0
/* Series */
Series DataClass::series(int size) {
  return Series(size);
}
Ejemplo n.º 10
0
const Series Series::operator/(const Series &series) const {
  return Series(*this) /= series;
}
Ejemplo n.º 11
0
void ImageWndCtrlsTab::OnBnClickedScan()
{
	UpdateData(); ImageWnd* parent=(ImageWnd*)Parent;
	
	parent->strips.ScanLine.curL.x=Xmin/parent->scale; parent->strips.ScanLine.curR.x=Xmax/parent->scale;
	parent->strips.ScanLine.curL.y=parent->strips.ScanLine.curR.y=stroka/parent->scale;
	
	parent->DrawScanLine(parent->strips.ScanLine.curL,parent->strips.ScanLine.curR);
	CMainFrame* MainWnd=(CMainFrame*)AfxGetMainWnd(); 
	MainWnd->TabCtrl1.ChangeTab(MainWnd->TabCtrl1.FindTab("Main control"));	

	void* x; CString T,T1; BYTE *dark,*cupol,*strips;
	TPointVsErrorSeries *t2; //TSimplePointSeries *t1; 
	int midl=stroka, dd=AvrRange,w=parent->strips.org.w, Ymin=midl-dd, Ymax=midl+dd, mm=(Ymax-Ymin)/2; 
	MyTimer Timer1,Timer2; sec time; CString logT; 
	TPointVsErrorSeries::DataImportMsg *CHM2, *AdarkChartMsg, *AcupolChartMsg, *AstripsChartMsg, *ChartMsg; 
	TSimplePointSeries::DataImportMsg *CHM1, *darkChartMsg,*cupolChartMsg, *stripsChartMsg;
	CHM2=AdarkChartMsg=AcupolChartMsg=AstripsChartMsg=ChartMsg=NULL; 
	CHM1=darkChartMsg=cupolChartMsg=stripsChartMsg=NULL;
	LogMessage *log=new LogMessage(); log->CreateEntry("Log","Speed tests results",LogMessage::low_pr);

	if(!(parent->dark.org.HasImage() && parent->cupol.org.HasImage() && parent->strips.org.HasImage())) return;

	if(Xmin<0) Xmin=0;
	if(Xmin>=parent->strips.org.w) Xmin=parent->strips.org.w;
	if(Xmax<0) Xmax=0;
	if(Xmax>=parent->strips.org.w) Xmax=parent->strips.org.w;
	if(Xmax<Xmin) {int t=Xmax; Xmax=Xmin; Xmin=t;}	

	Timer2.Start();
	T.Format("%d",midl); T1.Format("%davrg",midl);

	for(int i=0;i<3;i++)
	{
		CHM2 =new TPointVsErrorSeries::DataImportMsg();		

		switch(i)
		{
		case 0: AdarkChartMsg=CHM2; break;
		case 1: AcupolChartMsg=CHM2; break;
		case 2: AstripsChartMsg=CHM2; break;
		}
	}

	CMainFrame* mf=(CMainFrame*)AfxGetMainWnd(); TChart& chrt=mf->Chart1; 
	if((x=chrt.Series.GainAcsess(WRITE))!=0)
	{
		SeriesProtector Protector(x); TSeriesArray& Series(Protector);
		if((t2=new TPointVsErrorSeries(T))!=0)	
		{
			for(int i=0;i<Series.GetSize();i++) Series[i]->SetStatus(SER_INACTIVE);
			Series.Add(t2); 
			t2->_SymbolStyle::Set(NO_SYMBOL); 
			ChartMsg=t2->CreateDataImportMsg(); 
			t2->AssignColors(ColorsStyle(clRED,Series.GetRandomColor()));
			t2->PointType.Set(GenericPnt); 
			t2->SetStatus(SER_ACTIVE); t2->SetVisible(true);
		}		
	}
	
    Timer1.Start();	
	parent->dark.org.LoadBitmapArray(Ymin,Ymax); 
	parent->cupol.org.LoadBitmapArray(Ymin,Ymax);
	parent->strips.org.LoadBitmapArray(Ymin,Ymax);
	Timer1.Stop(); time=Timer1.GetValue();
	logT.Format("D C S %d lines load = %s",2*dd+1,ConvTimeToStr(time)); log->Msgs.Add(logT);
	dark=parent->dark.org.arr; 	cupol=parent->cupol.org.arr; strips=parent->strips.org.arr;

	SimplePoint pnt; pnt.type.Set(GenericPnt); 
	ValuesAccumulator pnteD,pnteC,pnteS; PointVsError pnte; 
	pnteD.type.Set(AveragePnt);	pnteC.type.Set(AveragePnt);	pnteS.type.Set(AveragePnt);	
	
	Timer1.Start();	
	for(int i = Xmin; i < Xmax; i++)
	{
		pnteD.Clear();pnteC.Clear();pnteS.Clear();		
		for(int j = 1; j <= dd; j++)
		{
            pnteD << dark[i+(mm+j)*w] << dark[i+(mm-j)*w];
			pnteC << cupol[i+(mm+j)*w] << cupol[i+(mm-j)*w];
			pnteS << strips[i+(mm+j)*w] << strips[i+(mm-j)*w];
		}
		pnt.x=i;
		pnt.y=dark[i+mm*w]; pnteD << pnt.y; 
		pnt.y=cupol[i+mm*w]; pnteC << pnt.y;
		pnt.y=strips[i+mm*w]; pnteS << pnt.y;

		pnte=pnteD; pnte.x=i; AdarkChartMsg->Points.Add(pnte);
		pnte=pnteC; pnte.x=i; AcupolChartMsg->Points.Add(pnte);
		pnte=pnteS; pnte.x=i; AstripsChartMsg->Points.Add(pnte);
		
	}
	Timer1.Stop(); time=Timer1.GetValue();
	logT.Format("D C S %d lines averaging time=%s",2*dd+1,ConvTimeToStr(time)); log->Msgs.Add(logT);
    
	Timer1.Start();
	for(int i=0;i<AdarkChartMsg->Points.GetSize();i++)
	{
		pnte=(AstripsChartMsg->Points[i]-AdarkChartMsg->Points[i])/(AcupolChartMsg->Points[i]-AdarkChartMsg->Points[i]);
        pnte.type.Set(GenericPnt);
		ChartMsg->Points.Add(pnte);		
	}
	Timer1.Stop(); time=Timer1.GetValue();
	logT.Format("Normalizing %d point time=%s",AdarkChartMsg->Points.GetSize(),ConvTimeToStr(time)); log->Msgs.Add(logT);

	parent->dark.org.UnloadBitmapArray(); parent->cupol.org.UnloadBitmapArray(); parent->strips.org.UnloadBitmapArray();	

	delete AdarkChartMsg; delete AcupolChartMsg; delete AstripsChartMsg; 
	ChartMsg->Dispatch();


	Timer2.Stop(); time=Timer2.GetValue();
	logT.Format("Total processing time=%s",ConvTimeToStr(time)); log->Msgs.Add(logT);

	CKSVU3App* Parent=(CKSVU3App*)AfxGetApp(); 
	Parent->myThread.PostParentMessage(UM_GENERIC_MESSAGE,log);	
}
Ejemplo n.º 12
0
const Series Series::operator-(const double &level) const {
  return Series(*this) -= level;
}
Ejemplo n.º 13
0
 template <class I, class T> array<T,I>& Series(const T& start, const I& n, T (*a)(I)){
   return Series(start, (T) 1, n, a );
 }
Ejemplo n.º 14
0
 template <class T> array<T,int>& Series(const T& start, const T& end){
   return Series(start, end, (T) 1);
 }
Ejemplo n.º 15
0
const Series Series::operator/(const double &divider) const {
  return Series(*this) /= divider;
}
Ejemplo n.º 16
0
void Drawer::add(const mglData& x, const mglData& y, const mglData& z, const std::string& style, const std::string& legend)
{
	m_series.push_back(Series(x, y, z, style, legend));
}
Ejemplo n.º 17
0
//---------------------------------------------------------------------------
bool TData::ImportPointSeries(const std::wstring &FileName, char Separator)
{
  const TColor Colors[] = {clRed, clGreen, clBlue, clYellow, clPurple, clAqua, clBlack, clGray, clSkyBlue	, clMoneyGreen, clDkGray};

  std::ifstream Stream(FileName.c_str());
  if(!Stream)
  {
		MessageBox(LoadRes(RES_NOT_GRAPH_FILE, FileName), LoadString(RES_FILE_ERROR), MB_ICONSTOP);
    return false;
  }

	std::string Line;
	while(Stream && Line.empty())
    std::getline(Stream, Line);
	if(Separator == 0)
	  Separator = GetSeparator(Line);

	std::vector<std::pair<std::wstring, std::vector<TPointSeriesPoint> > > Points;
	unsigned Row = 0;
	try
	{
    boost::escaped_list_separator<char> Sep("", std::string(1, Separator), "");
    unsigned Index = 0;
    do
    {
      ++Row;
      boost::tokenizer<boost::escaped_list_separator<char> > tok(Line, Sep);
      boost::tokenizer<boost::escaped_list_separator<char> >::iterator beg = tok.begin();
	    std::wstring xStr = ToWString(*beg);
      if(!xStr.empty() && xStr[0] == L'#')
      {
        Index = Points.size();
        Points.push_back(std::make_pair(xStr.substr(1), std::vector<TPointSeriesPoint>()));
        while(++beg != tok.end())
          Points.push_back(std::make_pair(ToWString(*beg), std::vector<TPointSeriesPoint>()));
      }
      else
      {
        unsigned Col = Index;
        while(++beg != tok.end())
		    {
          if(Col == Points.size())
     		    Points.push_back(std::make_pair(L"", std::vector<TPointSeriesPoint>()));
          std::wstring yStr = ToWString(*beg);
          if(Property.DecimalSeparator != '.')
          {
            std::replace(xStr.begin(), xStr.end(), Property.DecimalSeparator, L'.');
            std::replace(yStr.begin(), yStr.end(), Property.DecimalSeparator, L'.');
          }
          Points[Col].second.push_back(TPointSeriesPoint(xStr, yStr));
          Col++;
        }
			}
		}
	  while(std::getline(Stream, Line));
	}
	catch(Func32::EParseError &E)
	{
		MessageBox(LoadRes(526, FileName.c_str(), Row+1), LoadRes(RES_FILE_ERROR), MB_ICONSTOP);
		return false;
	}
	catch(std::out_of_range &E)
	{
		MessageBox(LoadRes(526, FileName.c_str(), Row+1), LoadRes(RES_FILE_ERROR), MB_ICONSTOP);
		return false;
  }
  catch(std::bad_alloc &E)
  {
    MessageBox(LoadRes(RES_OUT_OF_MEMORY), LoadRes(RES_FILE_ERROR), MB_ICONSTOP);
    return false;
  }

	unsigned ColorIndex = 0;
  unsigned Style = Property.DefaultPoint.Style;
  unsigned LineStyle = Property.DefaultPointLine.Style;

	UndoList.BeginMultiUndo();
	for(unsigned I = 0; I < Points.size(); I++)
	{
		boost::shared_ptr<TPointSeries> Series(new TPointSeries(
			clBlack,            //FrameColor
			Colors[ColorIndex], //FillColor
			Colors[ColorIndex], //LineColor
			Property.DefaultPoint.Size, //Size
			Property.DefaultPointLine.Size, //LineSize
			Style, //Style
			static_cast<TPenStyle>(LineStyle), //LineStyle
			iaLinear, //Onterpolation
			false, //ShowLabels
			Property.DefaultPointLabelFont, //Font
			lpBelow, //LabelPosition
			ptCartesian, //PointType
			ebtNone,  //xErrorBarType
			0, //xErrorValues
			ebtNone, //yErrorBarType
			0 //yErrorValue
		));
		Series->Swap(Points[I].second);
		Series->SetLegendText(Points[I].first.empty() ? CreatePointSeriesDescription() : Points[I].first);
		Insert(Series);
		UndoList.Push(TUndoAdd(Series));
		Series->Update();
		ColorIndex = ++ColorIndex % (sizeof(Colors)/sizeof(TColor));
		Style = (Style+1) % 7;
		LineStyle = (LineStyle+1) % 5;
  }

  UndoList.EndMultiUndo();
  Modified = true;
  return true;
}
Ejemplo n.º 18
0
void SeriesListCtrl::OnSaveAsText()
{
	BYTE cr[3]; cr[0]=0xd;cr[1]=0xa;cr[2]=0;
	int i,j, match, err=0, num;	

	POSITION pos=GetFirstSelectedItemPosition();		
	CArray<int,const int&> arr; CString temp; CString T,T1;
	while(pos) arr.Add(GetItemData(GetNextSelectedItem(pos)));
	for(i=0;i<arr.GetSize() && !err;i++)
	{
		match=0;
		for(j=i+1;j<arr.GetSize();j++) 
		{
			T=Items[arr[j]].Name; T1=Items[arr[i]].Name;
			if(!(strcmp(Items[arr[j]].Name,Items[arr[i]].Name))) match++;
		}
		if(match>0) err=1;
	}
	
	if(!(arr.GetSize()) || err)
	{
		AfxMessageBox("¬Ќ»ћјЌ»≈!!! ќдин или более Series имеют одинаковые имена. ¬ыполнение операции невозможно!");
		return;	
	}
	else
	{
		CString temp;	CFile f; err=0; num=0; void *x;		
		if((x=Series->GainAcsess(READ))!=0)
		{
			SeriesProtector Protector(x); TSeriesArray& Series(Protector);
			for(i=0;i<arr.GetSize();i++)
			{
				TChartSeries *series=Series[arr[i]];
				temp=GetSaveAsPath();
				int t; if((t=temp.ReverseFind('\\'))>=0) temp=temp.Left(++t);	
				temp+=series->Name+".xls";		

				HANDLE SearchHandle;
				WIN32_FIND_DATA FindFileData; TCHAR szError[1024];
				if( (SearchHandle=FindFirstFile(LPCSTR(temp),&FindFileData) )==INVALID_HANDLE_VALUE)
				{
					CFileException ex;
					if(f.Open(temp,CFile::modeCreate | CFile::modeWrite,&ex))
					{						
						temp.Format("%s: points=%d",series->Name,series->GetSize());  
						
						for(int i=0;i<series->GetSize();i++)
						{
							series->FormatElement(i,temp);

							char* fs;
							while((fs=const_cast<char*>(strchr(temp,'.')))!=NULL) 
								(*fs)=',';
                            

							f.Write(LPCSTR(temp),temp.GetLength());
							f.Write(cr,sizeof(cr));
						}
						f.Close(); num++;
					}
					else 
					{
						ex.GetErrorMessage(szError, 1024);
					}
				}
				else err++;
			}
		}
		
		if(err) 
		{
			temp.Format("¬Ќ»ћјЌ»≈!!! %d из %d файлов не были созданы. ‘айлы с такими именами уже существуют.",err, num+err);
			AfxMessageBox(temp);		
		}
		else
		{
			temp.Format("ќпераци¤ прошла успешно. —оздано %d файлов", num);		
			AfxMessageBox(temp);		
		}
	}		
}
Ejemplo n.º 19
0
void SeriesListCtrl::UpdateSeriesList()
{
	int n=HitItem; LV_ITEM lvi; CString T;	void *x; CBitmap * tmpbmp; BMPanvas icon;
	if (Series == NULL) return;
	if((x=Series->GainAcsess(READ))!=0)
	{
		SeriesProtector Protector(x); TSeriesArray& Series(Protector);
		int n1=Series.GetSize(); if(n>=n1) n=n-1;
//		if(LastN!=n1) 
		{			
			DeleteAllItems(); Items.RemoveAll();
			ImageList1.Detach(); 
			ImageList1.Create(16,16,ILC_COLOR,Series.GetSize(),1);
			
			for(int i=0;i<Series.GetSize();i++)
			{
				icon.Create(CreateCompatibleDC(NULL),16,16,24);

				HGDIOBJ brsh=icon.SelectObject(bckg);
				icon.PatBlt(PATCOPY);				
				icon.SelectObject(brsh);	

				Series[i]->UpdateIcon(icon);
				HBITMAP hbmp=icon.GetHBMP(BMP_DETACH);
				tmpbmp=CBitmap::FromHandle(hbmp);
				ImageList1.Add(tmpbmp,(CBitmap*)NULL);
				lvi.mask = LVIF_PARAM; lvi.iItem = i;lvi.iSubItem = 0; lvi.lParam=i;			
				InsertItem(&lvi); Items.Add(ListItemData());
			}		
			SetImageList(&ImageList1,LVSIL_SMALL);
		}
		for(int i=0;i<GetItemCount();i++)
		{
			int k=GetItemData(i); TChartSeries* series=Series[k];
			lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
			lvi.iItem = i; lvi.iSubItem = 0;
			lvi.pszText = (char*)LPCTSTR(series->Name); 
			lvi.iImage = i;		
			lvi.stateMask = LVIS_STATEIMAGEMASK;
			lvi.state = INDEXTOSTATEIMAGEMASK(series->IsVisible()+1);
			SetItem(&lvi);	

			lvi.mask = LVIF_TEXT; lvi.iSubItem++;		
			T.Format("%d",series->GetSize()); SetItemText(i,lvi.iSubItem++,(char*)LPCTSTR(T)); 
			series->GetStatus(T); SetItemText(i,lvi.iSubItem++,(char*)LPCTSTR(T));	
			T.Format("%d",series->GetPID()); SetItemText(i,lvi.iSubItem++,(char*)LPCTSTR(T)); 

			lvi.mask=LVIF_STATE; lvi.stateMask = LVIS_SELECTED | LVIS_FOCUSED;		
			lvi.state = 0; SetItemState(i,&lvi);		

			Items[k].Name=series->Name; Items[k].Size=series->GetSize(); Items[k].Status=series->GetStatus();	
			Items[k].PID=series->GetPID();			
		}
		LastN=Series.GetSize();
		if(n>=0)
		{	
			_ms_lvi.mask=LVIF_STATE; _ms_lvi.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
			_ms_lvi.state = LVIS_SELECTED | LVIS_FOCUSED;			
			LV_ITEM FAR * temp=&_ms_lvi;
			this->PostMessage(LVM_SETITEMSTATE ,(WPARAM)(n), (LPARAM)(temp));
			EnsureVisible(n, false);	
		}	
		//SortItems(CompareFunc1,(LPARAM) (this));	
	}
}
Ejemplo n.º 20
0
 //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 template <class T> array<T,int>& Series(const T& end){
   return Series((T) 0, end, (T) 1);
 }
Ejemplo n.º 21
0
ЧебышёвSeries<Vector> ЧебышёвSeries<Vector>::NewhallApproximation(
    int const degree,
    std::vector<Vector> const& q,
    std::vector<Variation<Vector>> const& v,
    Instant const& t_min,
    Instant const& t_max) {
    // Only supports 8 divisions for now.
    int const divisions = 8;
    CHECK_EQ(divisions + 1, q.size());
    CHECK_EQ(divisions + 1, v.size());

    Time const duration_over_two = 0.5 * (t_max - t_min);

    // Tricky.  The order in Newhall's matrices is such that the entries for the
    // largest time occur first.
    FixedVector<Vector, 2 * divisions + 2> qv;
    for (int i = 0, j = 2 * divisions;
            i < divisions + 1 && j >= 0;
            ++i, j -= 2) {
        qv[j] = q[i];
        qv[j + 1] = v[i] * duration_over_two;
    }

    std::vector<Vector> coefficients;
    coefficients.reserve(degree);
    switch (degree) {
    case 3:
        coefficients = newhall_c_matrix_degree_3_divisions_8_w04 * qv;
        break;
    case 4:
        coefficients = newhall_c_matrix_degree_4_divisions_8_w04 * qv;
        break;
    case 5:
        coefficients = newhall_c_matrix_degree_5_divisions_8_w04 * qv;
        break;
    case 6:
        coefficients = newhall_c_matrix_degree_6_divisions_8_w04 * qv;
        break;
    case 7:
        coefficients = newhall_c_matrix_degree_7_divisions_8_w04 * qv;
        break;
    case 8:
        coefficients = newhall_c_matrix_degree_8_divisions_8_w04 * qv;
        break;
    case 9:
        coefficients = newhall_c_matrix_degree_9_divisions_8_w04 * qv;
        break;
    case 10:
        coefficients = newhall_c_matrix_degree_10_divisions_8_w04 * qv;
        break;
    case 11:
        coefficients = newhall_c_matrix_degree_11_divisions_8_w04 * qv;
        break;
    case 12:
        coefficients = newhall_c_matrix_degree_12_divisions_8_w04 * qv;
        break;
    case 13:
        coefficients = newhall_c_matrix_degree_13_divisions_8_w04 * qv;
        break;
    case 14:
        coefficients = newhall_c_matrix_degree_14_divisions_8_w04 * qv;
        break;
    case 15:
        coefficients = newhall_c_matrix_degree_15_divisions_8_w04 * qv;
        break;
    case 16:
        coefficients = newhall_c_matrix_degree_16_divisions_8_w04 * qv;
        break;
    case 17:
        coefficients = newhall_c_matrix_degree_17_divisions_8_w04 * qv;
        break;
    default:
        LOG(FATAL) << "Unexpected degree " << degree;
        break;
    }
    CHECK_EQ(degree + 1, coefficients.size());
    return ЧебышёвSeries(coefficients, t_min, t_max);
}
Ejemplo n.º 22
0
const Series Series::operator*(const double &multiplier) const {
  return Series(*this) *= multiplier;
}