vb编程中2次方程求解

来源:百度知道 编辑:UC知道 时间:2024/05/24 04:11:28
定义X,Y,Z为单精度实数
给出X和Z的值
Y*(Y+1)=Z/X-1
如何求Y的值
请详细点讲解

可用差值渐进法求解,关键是要先设定一个精度值0.001或更小和预设一个Y值以及相应的跨步值100。
第一:设定一个Y值为0,求出Y*(Y+1)=0,与X、Z值代入的右边公式的结果比较,判断值大小如何。假设X、Z分别赋值为5、2得出右边的结果为-3/5即-0.6,则0>-0.6;左右的差值绝对值为0.6,记录该值以便后续代码取用;判断差值0.6是否小于精度值0.001,是则退出程序设定的Y值极为所求值。
第二:先向<Y值方向取一个值,先设为-2,当然根据精度可以选更大跨度,比如-100;初始跨度一般选大先,也可以按输入的X、Z值来设定;这样可以加快渐进方式的靠近速度;这里我们按2的跨步先设定先下靠一步,然后计算出Y*(Y+1)=2,判断左右值,2>-0.6,而且差值=2.6,与第一步中的0.6差值比较说明差值在变大;记录当前差值2.6以及0.6为最小差值;
第三:根据两次差值的比较,于是会出现两种可能:第一种Y跨步的方向与实际求解值反了方向;第二种Y跨步方向正确,但是由于二次方程的曲线性,有可能是跨步过大,并不是靠近了我们求解值,而是超过太多。于是我们来分别处理两种情况,这里需在程序中继续按第一种可能先假定Y跨步方向不正确,那么这里设定一个boolean变量为false,来表示与预算方向相反;
第四:按照反方向也跨步2取Y=2,得Y*(Y+1)=6,6>-0.6,差值为6.6,与第二步的差值比较6.6更大于2.6说明我们这次的方向才是反了,而且离求解值更远了。那么放弃这个框步的差值6.6,仍然保持当前差值为2.6以及0.6为最小值,于是我们可以得出另一种可能性方向正确而跨步过大,正确的Y值应在区间0~-2间;这样应设定方向boolean值为true,进入下一过程;
第五:判断方向boolean值为true时,把跨步改为1/2取为1,仍然向下跨步取Y=-1,得出Y*(Y+1)=0,0>-0.6,差值=0.6,与当前差值2.6比较,差值变小;则当前差值为0.6,最小差值仍然是0.6;
第六:以上的各参数以变量分别表示,这样就可以重复上述第三步->第四步->第五步,每步都进行最小差值比较,如果小于最小差值则替换,并判断最小差值是否比预选的精度小,如果达到精度要求则判断Y值求得,并