因为非线性的微分方程,无论是通解,还是数值解本人都不会解,所以本人决定便一个程序来辅助计算.但是由于本人只会C语言,所以只好用C编了一个.至于说,为什么是不成熟的,本人会在下文解释.至于这个程序的用途,本人认为目前并无太大的实际用途,因为仅仅是计算速度,并不是目的,目的是要计算弹道.但是,可以把这看作是计算弹道的基础,因为速度对时间积分,就是位移了.在这基础上,计算弹道,可以说是水到渠成的事.本人把这个不成熟的程序发上来,目的主要是为了寻求高人的指点,如果真的有问题的话,本人不想在错误的路上走的太远.
废话说完,现在介绍理论.(KC不能发公式,老规矩,截图!)
因为是用近似值逼近精确值,所以dt应当分的越小约好.但是,本认试了每秒分成一万份,十万份,和一百万份的,发现结果并无差别.本人猜想,这可能是因为双精度数的有效数字位数不够造成的.本人也试过长双精度,但是出现了明显的错误结果.说实话,不怕大家笑话,本人学C的时候,就不会用长双精度,现在亦然...精度不够,是本人说此程序不成熟的原因之一.
第二个不成熟的原因是,我的计算结果,总和一本参考书上的公式的结果存在误差,而且是比较大的.毕竟我这是近似逼精确的暴力方法.本人下一步计划用v-dt和v+dt取平均来抵消误差.
希望高手能给些意见,并且给些鼓励吧,貌似在KC上,我是头一个干这活的...
另附程序代码如下:
#include"stdio.h"
#include"math.h"
main()
{double v=0,m,g=9.8,k,F,tb;
double vv;
long int tk;
printf("[s:9]leace income the value of m(Mass),k(Air resistance coefficient),F(Engine average thrust force),tb(Combustion duration)\nAnd use comma separate.\n");
/*译为:请输入数值:质量,空气阻力系数,发动机平均推力,燃烧时间.并用逗号隔开.*/
scanf("%lf,%lf,%lf,%lf",&m,&k,&F,&tb);
for(tk=1;tk<=10000*tb;tk++)
{v=v+(F/m-k*v*v/m-g)/10000;
if(F-m*g-k*v*v<=0)
break;
}
printf("\n");
vv=(F*tb-m*g*tb)/sqrt(m*m+k*tb*tb*(F-m*g));
printf("vb1=%llf\nvb2=%llf\n",v,vv);
/*vb1为本计算方法算出的速度值,vb2为参考其他文献的共识算出的速度值.*/
}
200字以内,仅用于支线交流,主线讨论请采用回复功能。