matlab二次曲线拟合

问题描述:

matlab二次曲线拟合
电容c=10^-6*[0 0.47 1.47 2.47 3.67 4.2 4.67 5.87 6.87] (F);对应的电流i=[0.369 0.342 0.289 0.242 0.204 0.198 0.202 0.234 0.274] (A);求描绘二次拟合出来的c与i^2的拟合曲线.我先开始二次拟合的参数精度不够,一次项和常数项参数都是0,不满足要求.
1个回答 分类:数学 2014-11-16

问题解答:

我来补答
并不是精度不够,后两项的系数也并不是0,只是结果显示有效数字位数的问题.
>> num2str(f)
ans =
5246096810.4814     -45015.413449487     0.13696632426218
 
>> plot(c,i.^2,'r.',c,polyval(f,c))

再问: 我也做到了你这步,是用函数van做的,但是你看,描绘出的曲线不是光滑的呀
再答: 你之前问的问题是“一次项和常数项参数都是0”,并不是曲线是否平滑。关于系数为0的问题我前面解释过了。 曲线不光滑是因为取的点少,看起来折线的感觉比较明显。其实MATLAB画的都是折线,只不过点比较密集的时候看起来就平滑了。例如,你可以试试把    plot(c,i.^2,'r.',c,polyval(f,c))改成    c1=linspace(min(c),max(c),200);    plot(c,i.^2,'r.',c,polyval(f,c1)) 楼下所谓“cftool结果会好一些”属于很流于表面的说法。cftool只是提供了一个进行拟合的GUI,该函数自身没有任何拟合的算法,都是调用其它的算法。只要你用的是多项式拟合,用cftool与polyval的结果不会有任何区别,差别只在于一个是通过GUI来做,而另一个是直接调用命令而已。GUI的方式可能对于新手较为适合,但对于熟悉编程的人来说,有时反而感到太繁琐。
再问: 一看就是大神的回答,可是我输入后显示的是Error using plotVectors must be the same lengths.请大神明示。

再答: 抱歉,写错了一点,应该是:    plot(c,i.^2,'r.',c1,polyval(f,c1))
 
 
展开全文阅读
剩余:2000