-1
你有沒有想法。返回初始狀態只有一次
我想調用離散時間函數「執行」。 第一次調用:「execute」返回初始狀態 每次下一次調用:「execute」返回一個計算值。
我用 「Initflag」(運行)的想法:
while(true){
myValue = myObj.execute();
doSomethingWith(myValue);
}
//Anywhere in a Class
public:
float execute(){
if(InitFlag){
InitFlag = false; //now permanent set to false
return 42;
}
else{
return value = value + 42;
}
}
private:
bool InitFlag = true;
float value = 0;
}
我的問題: 是否有落實 「初始化」 到 「NormalExecution」 -switchin到編譯時的方法嗎?沒有永久詢問國旗?
對此問題存在一個更好的「關鍵字」/「描述」?
感謝您的幫助
//Bigger view
// One of my algorithm (dont take it, it´s not tested)
/// Integrator Euler-Backward 1/s Z-Transf. K*Ts*z/(z - 1) with K := slope, Ts := SampleTime
template<class T>
class IntegratorEB{//Euler Backward
public:
///CTOR
/// @brief Constructor
IntegratorEB(const T& K)
: Ts_(1.0), u_(0.0), y_(0.0), h_(K*Ts_), InitFlag_(true) {}
///END_CTOR
///ACCESS
/// @brief copy and save input u
void Input(const T& u){
u_ = u;
}
//TODO First call should not change y_
/// @brief calculate new output y
void Execute(){
if(InitFlag){
y_ = y_; //or do nothing...
InitFlag = false;
}
else
y_ = y_ + h_ * u_; // y[k] = y[k-1] + h * u[k];
}
/// @brief read output, return copy
T Output() const{
return y_;
}
/// @brief read output, return reference
const T& Output() const{
return y_;
}
///END_ACCESS
private:
T Ts_; //SampleTime
T u_; //Input u[k]
T y_; //Output y[k]
T h_; //Stepsize
bool InitFlag_;
};
Whished使用類
1.Init
2. Loop calls any algorithmen in the same way
2.1 Input
2.2 Execute
2.3 Output
與其他算法的呼叫爲例:
std::cout << "Class Statespace"; //Ausgabe
for(int t = 1; t <= 50; ++t){
DCMotor.Input(Matrix<float, 1, 1>(u));
DCMotor.Execute();
y = DCMotor.Output();
std::cout << "t = " << t << " y = " << y; //Ausgabe
}
我的問題: 我喜歡以相同的方式處理每個算法。首先調用execute來提供Initstate。對於頂層的例子來說(取決於算法結構)。對於我的班級「IntegratorEB」沒有。 (或只是問一個運行時間標誌?!)
希望它會很清楚。
什麼是「NormalExecution」? – wally
如果你知道第一個調用是什麼,你就不清楚你的意思是「編譯時間」,那麼只需要使用兩種方法:'init'和'execute',或者在構造函數中初始化並忘記init標誌。聞起來像[xy問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你爲什麼認爲你需要這個?調用代碼的外觀如何? – user463035818
「NormalExecution」:= else分支 – Oliver