怎样用MATLAB 画函数 y=-1/x+2*10^-10/x^9 的图形?急啊!!

已知x=(0.064,0.068,0.072,0.074,0.078,0.082,0.09,0.0961,0.1153,0.13,0.21,0.4,0.6,0.8,1)
y=(7.5,5,2.5,0,-2.5,-5,-7.5,-8.75,-8.75,-7.5,-5,-2.5,-1.75,-1.375,-1.042)
函数y=-a/x+b/x^9

请问如何用matlab拟合求出方程中的位置参数a、b。谢谢!

拟合参数,采用多元线性回归,程序如下:
clear;
clc;
x = [0.064 0.068 0.072 0.074 0.078 0.082 0.09 0.0961 0.1153 0.13 0.21 0.4 0.6 0.8 1];
y = [7.5 5 2.5 0 -2.5 -5 -7.5 -8.75 -8.75 -7.5 -5 -2.5 -1.75 -1.375 -1.042];
X1 = 1./x;
X2 = 1./(x.^9);
myX = [ones(1,length(y)); X1; X2]';
myY = y';
[B,BINT,R,RINT,STATS] = regress(myY,myX)

结果如下:
B =

-1.8715
-0.4460
0.0000

BINT =

-4.7448 1.0018
-0.8086 -0.0834
0.0000 0.0000

R =

-3.3298
2.0318
3.7514
2.5732
1.7737
0.1965
-1.5877
-2.7445
-3.1088
-2.2312
-1.0052
0.4865
0.8648
1.0540
1.2755

RINT =

-5.0347 -1.6250
-2.5935 6.6572
-0.6703 8.1731
-2.1996 7.3460
-3.1138 6.6611
-4.7980 5.1909
-6.4799 3.3046
-7.4448 1.9558
-7.8155 1.5979
-7.1867 2.7242
-6.0962 4.0858
-4.4445 5.4174
-3.9320 5.6616
-3.6615 5.7694
-3.3742 5.9251

STATS =

0.7936 23.0733 0.0001 5.7103

其中B即为参数。
所以方程为:
y=-1.8715/x-0.4460/x^9

绘制图像:
yy = B(1)./x+B(2)./x.^9;
plot(x,y,'ro',x,yy,'b')

图我就不贴了,自己运行就可以看到,但可以明确告诉你用你这组数据拟合成9阶效果肯定非常的差,因为:y=-a/x+b/x^9 中1/x^9将是当x偏离1时一个非常大的数,而当x接近1时确实个很小的数,差值非常的大。另外要拟合到9阶对数据量的需求也是非常大。你这15组根本达不到好的要求

有问题欢迎追问,觉得有用,请给采纳追问

拟合出的图形与原图相差太大了,而且b应该是正值,要不然图形方向是反的,请问还有其他的拟合方法吗?谢谢啊!

追答

这个真没什么好办法,你的数据实在是太糟糕了,你自己带入看看就知道了最小的x接近0,这个时候1/x^9接近无穷大啊!而最大的x接近1,这个时候1/x^9却接近1。你自己说吧,这样的数据怎么可能做的出你设定的9阶的拟合。你所取的数据点性质实在太差

追问

我把图给你看看,你给我个邮箱地址。和拟合的图相差太远了。谢啦!

追答

我运行过程序,看过图,确实是差很远,但这是所能得到的最接近结果了

追问

哦,这样啊,那怎样才能得到更接近的结果呢?

追答

方法一:你重新换组数据,当然这是针对你这种已经拥有拟合结果y=-1/x+2*10^-10/x^9,希望往上面靠的,或者是有其他数据。当然这个还是很有难度,毕竟你1/x^9的系数2*10^-10已经非常小,matlab版本稍微低一点的都无法识别了。
方法二:你别限定在9阶,把维数降低吧,或者干脆不做限定,这样可以拟合出较好的结果。

追问

我的图形主要是在0.1到0.4间有个下降又上升的趋势,关键就是要拟合出这个变化,然后公式是给定的,维数变不了。

追答

尝试了,抱歉,这种情况下我确实搞不定了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-07
x = [1:0.1:10];
plot(x, y)
第2个回答  2011-09-10
什么东西追问

在补充的问题里面,已知一组点的坐标 求对应函数的未知量。

相似回答