首页 > 编程知识 正文

自然数和复数谁包含谁,复数的运算i方是多少

时间:2023-05-06 20:14:46 阅读:19490 作者:629

实现c整数和复数的一维线性插值interp1导函数需求分析源代码注意

导言

最近进行了Qt开发,进行了很多插值滤波等从matlab到c的变换工作,但是在这里研究了matlab的interp1函数,用c重写了。

比较结果与matlab的interp1()函数生成的插值结果一致。 (数据不在定义域时,通过线性插值进行插值【与matlab的定义域外插值策略处理结果一致】)

函数需求分析本节介绍在工作中调用matlab的interp1)函数的示例。

3358www.Sina.com//ti:现有时刻的值//To:插入时刻的值//I_Id:与现有时刻对应的y值的实部//Q_Id:与现有时刻对应的y值的虚部outd=interrrral

原matlab程序

关于参数名,插入有Ti既有点的x坐标值To的点的x坐标值I_Id的既有点实部的y坐标值Q_Id的插入有既有点虚部的y坐标值y的点的实部和虚部的y坐标值为compoundnumberinterp1(vectted vectordouble I_Id,介绍用复数返回vectordoubleti ), vecTordouble Q_Id )/*参数介绍干预力:(数据类型均为double型的vector数组)注意:这里的Ti和to是、 两者排序的Ti :既有点的x坐标值To :插入点的x坐标值I_Id:既有点实部的y坐标值Q_Id:既有点虚部的y坐标值的值表达式: y[I]=y[I-1] (输出:插入实部虚部均显示1个double型的vector序列*/interp1()生成的结果:结果与matlab生成结果一致。

源代码别那么胡说,直接上代码

# include vector # includeiostreamusingnamespacestd; conststructcomdouble { vectordoublereal; 向量双图像; 双时间; (; //复插值comdoublecominterp1(vectordoubleti,vectordouble To,vectorINT16 I_Id,vectorINT16 Q_Id ) { /*参数介绍力:(数据注意:这里的Ti和To都是经过排序的Ti :现有点的x坐标值To :插入点的x坐标值I_Id:现有点实部的y坐标值Q_Id:现有点虚部的y坐标值的值式: y[I]=y[I-1] if(ti.size )!=I_id.size(||I_id.size )!=Q_Id.size () cout '采样点的数量与信号时间的数量不一致或实虚部的数量不一致!' endl; doublemaxti=ti[ti.size((-1] ); 双精ti=ti [0]; doublemaxto=to[to.size((-1] ); 双精to=to [0]; 双精度thek=0; int before=1; 双精度,imag; for(intI=0; i To.size (; I ) )插入点在定义域左侧///if(to[I]=minti )/thek=(I_id[1]-I_id[0])/(Ti[1] - Ti[0] ) ) //imag=thek*(to[I]-ti[0] ) I_Id[0]; //y.real.push_back(real; //Y.imag.p

ush_back(imag); //break; //} //定义域右边 if (To[i] >= maxTi) { double theRealK = (I_Id[I_Id.size() - 1] - I_Id[I_Id.size() - 2]) / (Ti[Ti.size() - 1] - Ti[Ti.size() - 2]); double theImagK = (Q_Id[Q_Id.size() - 1] - Q_Id[Q_Id.size() - 2]) / (Ti[Ti.size() - 1] - Ti[Ti.size() - 2]); real = theRealK * (To[i] - Ti[Ti.size() - 1]) + I_Id[I_Id.size() - 1]; imag = theImagK * (To[i] - Ti[Ti.size() - 1]) + Q_Id[Q_Id.size() - 1]; Y.real.push_back(real); Y.imag.push_back(imag); } else { for (int j = before; j < Ti.size(); j++) { if (To[i] <= Ti[j]) { real = (I_Id[j] - I_Id[j - 1]) / (Ti[j] - Ti[j - 1]) * (To[i] - Ti[j - 1]) + I_Id[j - 1]; imag = (Q_Id[j] - Q_Id[j - 1]) / (Ti[j] - Ti[j - 1]) * (To[i] - Ti[j - 1]) + Q_Id[j - 1]; Y.real.push_back(real); Y.imag.push_back(imag); before = j; break; } } } } return Y; } #include <vector> #include <iostream> using namespace std; const struct comDouble { vector<double> real; vector<double> imag; double time; }; //整数插值 vector<double> interp1(vector<double> Ti, vector<double> I_Id, vector<double> To) { /* 参数介绍 输入:(数据类型都为double类型的vector数组) Ti: 已有的点的x坐标的值 To: 插入的点的X坐标的值 I_Id:已有的点实部的y坐标的值 公式:Y[i] = y[i-1] + (y[i] - y[i-1]) * (x[i] - x[i-1]) */ vector<double> Y; double maxTi = Ti[Ti.size() - 1]; //double minTi = Ti[0]; //double maxTo = To[To.size() - 1]; //double minTo = To[0]; double theK = 0; double real = 0.0; int before = 1; for (int i = 0; i < To.size(); i++) { 待插入点在定义域左边 //if (To[i] <= minTi) { //theK = (I_Id[1] - I_Id[0]) / (Ti[1] - Ti[0]); //real = theK * (To[i] - Ti[0]) + I_Id[0]; //Y.push_back(real); //} //定义域右边 if (To[i] >= maxTi) { theK = (I_Id[I_Id.size() - 1] - I_Id[I_Id.size() - 2]) / (Ti[Ti.size() - 1] - Ti[Ti.size() - 2]); real = theK * (To[i] - Ti[Ti.size() - 1]) + I_Id[I_Id.size() - 1]; Y.push_back(real); } else { for (int j = before; j < Ti.size(); j++) { if (To[i] <= Ti[j]) { real = (I_Id[j] - I_Id[j - 1]) / (Ti[j] - Ti[j - 1]) * (To[i] - Ti[j - 1]) + I_Id[j - 1]; Y.push_back(real); before = j; break; } } } } return Y; } 注意

该文章仅个人学习使用,欢迎大家一起交流学习

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。