-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은 "초기화"를 구현하는 방법이 있나요? 영구히 깃발을 묻지 않고?
이 문제에 대해 더 나은 "키워드"/ "설명"이 있습니까?
이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
}
내 질문 : 내가 좋아 당신의 도움이 클래스
1.Init
2. Loop calls any algorithmen in the same way
2.1 Input
2.2 Execute
2.3 Output
다른 알고리즘을 호출의 예의
//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 사용
감사합니다 동일한 방식으로 각 알고리즘을 처리하십시오. execute의 첫 번째 호출은 Initstate를 제공합니다. 위에있는 예제는 작동합니다 (알고리즘 구조에 따라 다름). 내 수업 "IntegratorEB"가 아닙니다. (또는 단지 런타임 플래그를 묻는 질문과 함께!)
희망이 명확 할 것입니다.
"NormalExecution"이란 무엇입니까? – wally
"컴파일 시간"이 무슨 뜻인지 알지 못하는 경우, 첫 번째 호출이 무엇인지 알았다면'init'과'execute' 두 가지 방법을 사용하거나 생성자에서 초기화하고 init 플래그를 잊어 버리십시오. 냄새는 [xy 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)와 같습니다. 왜 이걸 필요하다고 생각하니? 호출 코드는 어떻게 생겼을까요? – user463035818
"NormalExecution": = else 브랜치 – Oliver