小弟我想在OnTimer函数中计算一个离散化后的微分方程组,小弟我的想法是定时器每20ms刷新一次,那么OnTimer中的程序就执行一次,那么得到的变量就是新的
我想在OnTimer函数中计算一个离散化后的微分方程组,我的想法是定时器每20ms刷新一次,那么OnTimer中的程序就执行一次,那么得到的变量就是新的
如题,然后我的另外程序就可以不停的调用这些新解出来的变量,但我运行后感觉这些变量没有变化。大家帮忙看看,给点意见。变量都已定义,运行没错,就是想法估计有错。
void CKetishiyan4View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
///////////////////////////////////////////////////////////////////////////
// 添加定时器响应函数和厂家更新函数
Invalidate(FALSE);
///////////////////////////////////////////////////////////////////////////
x[0]=10;y[0]=10;z[0]=12;
k1=(-3)*x[0]+2*y[0];
m1=(-2.667)*x[0]-10.333*y[0]-0.667*z[0];
n1=(-6.667)*x[0]-5.333*y[0]-4.667*z[0];
k2=(-3)*(x[0]+k1*(h/2.0))+2*(y[0]+m1*(h/2.0));
m2=(-2.667)*(x[0]+k1*(h/2.0))-10.333*(y[0]+m1*(h/2.0))-0.667*(z[0]+n1*(h/2.0));
n2=(-6.667)*(x[0]+k1*(h/2.0))-5.333*(y[0]+m1*(h/2.0))-4.667*(z[0]+n1*(h/2.0));
k3=(-3)*(x[0]+k2*(h/2.0))+2*(y[0]+m2*(h/2.0));
m3=(-2.667)*(x[0]+k2*(h/2.0))-10.333*(y[0]+m2*(h/2.0))-0.667*(z[0]+n2*(h/2.0));
n3=(-6.667)*(x[0]+k2*(h/2.0))-5.333*(y[0]+m2*(h/2.0))-4.667*(z[0]+n2*(h/2.0));
k4=(-3)*(x[0]+k3*(h/2.0))+2*(y[0]+m3*(h/2.0));
m4=(-2.667)*(x[0]+k3*(h/2.0))-10.333*(y[0]+m3*(h/2.0))-0.667*(z[0]+n3*(h/2.0));
n4=(-6.667)*(x[0]+k3*(h/2.0))-5.333*(y[0]+m3*(h/2.0))-4.667*(z[0]+n3*(h/2.0));
x[1]=x[0]+h*(k1+2*k2+2*k3+k4)/6.0;
y[1]=y[0]+h*(k1+2*k2+2*k3+k4)/6.0;
z[1]=z[0]+h*(k1+2*k2+2*k3+k4)/6.0;
x[0]=x[1];
y[0]=y[1];
z[0]=z[1];
CView::OnTimer(nIDEvent);
}
------解决方案--------------------
UINT m_TimeHandle;//在头文件里定义
m_TimeHandle=SetTimer(1,1000,NULL);//在CPP文件里的初始化函数里
void CKetishiyan4View::OnTimer(UINT nIDEvent)
{
if(nIDEvent==m_TimeHandle)
{
Invalidate(FALSE);
///////////////////////////////////////////////////////////////////////////
x[0]=10;y[0]=10;z[0]=12;
......
}
CView::OnTimer(nIDEvent);
}
------解决方案--------------------
x[0]=10;y[0]=10;z[0]=12;
每次执行都是赋给这些变量定值,是不是不该这么做。应该把它们在初始化函数里
------解决方案--------------------
你调试跟踪一下不就知道问题出在哪里了吗
如题,然后我的另外程序就可以不停的调用这些新解出来的变量,但我运行后感觉这些变量没有变化。大家帮忙看看,给点意见。变量都已定义,运行没错,就是想法估计有错。
void CKetishiyan4View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
///////////////////////////////////////////////////////////////////////////
// 添加定时器响应函数和厂家更新函数
Invalidate(FALSE);
///////////////////////////////////////////////////////////////////////////
x[0]=10;y[0]=10;z[0]=12;
k1=(-3)*x[0]+2*y[0];
m1=(-2.667)*x[0]-10.333*y[0]-0.667*z[0];
n1=(-6.667)*x[0]-5.333*y[0]-4.667*z[0];
k2=(-3)*(x[0]+k1*(h/2.0))+2*(y[0]+m1*(h/2.0));
m2=(-2.667)*(x[0]+k1*(h/2.0))-10.333*(y[0]+m1*(h/2.0))-0.667*(z[0]+n1*(h/2.0));
n2=(-6.667)*(x[0]+k1*(h/2.0))-5.333*(y[0]+m1*(h/2.0))-4.667*(z[0]+n1*(h/2.0));
k3=(-3)*(x[0]+k2*(h/2.0))+2*(y[0]+m2*(h/2.0));
m3=(-2.667)*(x[0]+k2*(h/2.0))-10.333*(y[0]+m2*(h/2.0))-0.667*(z[0]+n2*(h/2.0));
n3=(-6.667)*(x[0]+k2*(h/2.0))-5.333*(y[0]+m2*(h/2.0))-4.667*(z[0]+n2*(h/2.0));
k4=(-3)*(x[0]+k3*(h/2.0))+2*(y[0]+m3*(h/2.0));
m4=(-2.667)*(x[0]+k3*(h/2.0))-10.333*(y[0]+m3*(h/2.0))-0.667*(z[0]+n3*(h/2.0));
n4=(-6.667)*(x[0]+k3*(h/2.0))-5.333*(y[0]+m3*(h/2.0))-4.667*(z[0]+n3*(h/2.0));
x[1]=x[0]+h*(k1+2*k2+2*k3+k4)/6.0;
y[1]=y[0]+h*(k1+2*k2+2*k3+k4)/6.0;
z[1]=z[0]+h*(k1+2*k2+2*k3+k4)/6.0;
x[0]=x[1];
y[0]=y[1];
z[0]=z[1];
CView::OnTimer(nIDEvent);
}
------解决方案--------------------
UINT m_TimeHandle;//在头文件里定义
m_TimeHandle=SetTimer(1,1000,NULL);//在CPP文件里的初始化函数里
void CKetishiyan4View::OnTimer(UINT nIDEvent)
{
if(nIDEvent==m_TimeHandle)
{
Invalidate(FALSE);
///////////////////////////////////////////////////////////////////////////
x[0]=10;y[0]=10;z[0]=12;
......
}
CView::OnTimer(nIDEvent);
}
------解决方案--------------------
x[0]=10;y[0]=10;z[0]=12;
每次执行都是赋给这些变量定值,是不是不该这么做。应该把它们在初始化函数里
------解决方案--------------------
你调试跟踪一下不就知道问题出在哪里了吗