作者:手机用户2502921293 | 来源:互联网 | 2023-05-31 01:14
有个方程最终可简单描述为下面形式y(n)y(n-1)*(2*a+a*b*pow(c*pow(x(n),-d),2.03));x(n)是变量y(0)已知a,b,c,d是待
有个方程 最终可简单描述为下面形式
y(n) = y(n-1) * (2*a + a*b*pow(c*pow(x(n),-d), 2.0/3));
x(n)是变量 y(0)已知 a,b,c,d是待定系数
现有约30组(x,y)
能够求出 a,b,c,d 吗
谢谢
20 个解决方案
你是说写代码推出来,还是说数学上能求出来.
数学上肯定能求出来,除非你这30组数据线性相关度太高.
a,b,c,d4组系数,由于a*b*c可以看成整体,所以貌似只能求出a,d以及b*c.
好久没动数学了..
能够求出这些待定系数的近似数值即可
(x,y)是由实验得出的数据
现在是想做近似拟合
y(n) = y(n-1) * (2*a + a*b*pow(c*pow(x(n),-d), 2.0/3));
---------------
令 f(n) = y(n)/y(n-1), 则
f(n) = 2*a + a*b* pow(c * pow(x(n),-d), 2.0/3);
移项,有:
f(n) - 2*a = a * b * pow(c * pow(x(n), -d), 2.0/3);
f(n+1) - 2*a = a * b * pow(c * pow(x(n+1),-d), 2.0/3);
上述两式相除(仅考虑a*b!=0,=0可另外处理或者排除):
(f(n) - 2*a)/(f(n+1) - 2*a) = pow( x(n)/x(n+1), -2.0*d/3 );
至此,可得到一系列a,d的关系式,应可求a,d。
比如,若有x>0,左右两式同时取对数,关系简化为:
ln( (f(n) - 2*a)/(f(n+1) - 2*a) ) = -2.0*d/3 * ln( x(n)/x(n+1) );
这是a,d的二元方程,容易消去d,得到a的一元二次方程
解方程这么做似乎可以,但实验数据求参数,需要最小二乘拟合?忘了....
用我的OpenFc(绿色免安装,脚本编程)可以解决此问题。
OpenFc下载:
http://www.skycn.com/soft/14414.html
按readme.txt设置好,运行“命令->工具->自适应一阶梯度搜索法求最优参数值(解非线性方程组)”即可。
介绍:
该程序可用于求解方程的最优参数值(求初值附近的局部极小值),同时可用于解非线性方程组。
采用不同的初始值时,所得结果不一定相同,原因在于目标函数并不是单峰的函数,而是多峰的函数。采用不同的初始值可以得到局部最优解,而不一定是整体最优解。为此,可以采用多组初始值进行最优搜索,以目标函数值最小者为最优。
目标函数举例(在这个例子中,每个方程均以x1,x2,... ...,xn为自变量参数):
(x1,x2,... ...,xn)=[方程1]^2+[方程2]^2+ ... ... +[方程n]^2
使用其它形式将不能保证得到有意义的结果。
你需要编一个函数:(a,b,c,d)=[方程1]^2+[方程2]^2+ ... ... +[方程n]^2
其中方程x为:y(n)-{y(n-1) * (2*a + a*b*pow(c*pow(x(n),-d), 2.0/3))}
要解决此问题,需要forcal正式版支持,打算最晚在今年5月份发布无任何使用限制的Forcal正式版。
如你现在需要,请到下面这个帖子留言或者给我发E-Mail,以方便我收到。
http://topic.csdn.net/u/20090325/21/5d2ced6e-5638-4218-b039-caa1273bdd11.html
还有,pow用乘方运算符^代替,y(n)、y(n-1)等带入你的实验值。
我很菜,都不知道LZ要干啥,有个软件叫“Graphmatica”,
你可以找照看,或许可能有用。
http://www8.pair.com/ksoft/
这个应该是它的官方网站。
貌似是数值分析的东西,有30组(x,y)应该可以求出那些系数了。