smallkin 发表于 2007-1-26 15:56

cftool如何把matlab图形中的数据输出?

我用matlab的曲线拟合工具箱对一些离散数据进行拟合,现在想把拟合后的图形用excel画出来,但是不知如何把matlab图形中的数据输出到excel中,还请各位高手指教,感谢!

[ 本帖最后由 ChaChing 于 2009-11-5 00:29 编辑 ]

bainhome 发表于 2007-1-26 16:21

MATLAB的数据再用excel画图?MATLAB的绘图功能远远强于excel,感觉有点儿多此一举的嫌疑.
whatever...
如果你用version7,看命令xlswrite,如果用version6,去fileexchange搜索utility部分,有很多跟excel的接口函数,找一个用即可.

smallkin 发表于 2007-1-29 15:14

楼上的,非常感谢帮助。

可是我是用曲线拟合工具箱得到的拟合曲线,该曲线是直接生成的,在workspace没有变量存储,没办法用xlswrite命令啊。

例如,

a=
xlswrite('d:\matlab', a)

要写入excel,总要有变量a才行,可是我的拟合曲线是根据离散数据直接生成的,根本没有变量名,如何写到excel中呢?

还请再指教!感谢。

[ 本帖最后由 smallkin 于 2007-1-29 16:31 编辑 ]

bainhome 发表于 2007-1-29 16:20

完全不明白你的意思
cftool是个很方便的工具,但需要和MATLAB的其他命令相配合才可取得良好效果,例如你的这个问题,原先的离散数据可以通过"fiting..."按钮弹出界面下的"save to workspace"按钮存储到工作间.拟合曲线中的具体数据可以通过"analysis"按钮下的"评估拟合数据"等各项指标得以体现,当然,同样可以"save to workspace",实在不行,你的各个拟合系数都已经得到,在workspace中直接用你的拟合公式求数据也一样简单.怎么会没有变量名?

smallkin 发表于 2007-1-29 17:06

呵呵,楼上的,可能我说的不太明白,抱歉。

正如你所说,我是用cftool对离散数据(x,y)进行拟合。其中x是时间,y是试验数据,x、y均为100×1矩阵。

1)点击“data”,把变量x、y输入cftool;

2) 点击“fiting...",假设选择“Gaussian”4阶函数,如下:
    a1*exp(-((x-b1)/c1)^2) +…… + a4*exp(-((x-b4)/c4)^2)      假设为公式(a)

3) 然后点击“Apply”进行拟合,得到拟合曲线,假设是s;

4) 现在我想把曲线 s 的相关数据保存出来,点击"save to workspace",可是在matlab的工作间只得到如下3个文件:

fittedmodel1:给出了a1、b1、c1、d1、……a4、b4、c4、d4共16个系数
goodness1:给出了5个值,可能是拟合精度评介之类的东西,这个我不太懂
output1:给出了9项数据,其中有Residuals、Jacobian两个矩阵

问题就在这里,保存到workspace上的这些数据,并没有跟曲线 s 直接相关的数据。我也想过你所说的,16个拟合系数都已经得到,再加上时间x,带入公式(a),自己计算得到拟合的试验数据y1,可是计算出来的y1,结果跟y大不一样,十分离谱,画出来的曲线(x,y1)和实验曲线(x,y)显然是两条截然不同的曲线,我百思不得其解。

bainhome 发表于 2007-1-29 17:48

直接给数据吧,attach一个具体的mat数据文件,直觉上认为数据传递问题不大,如果绘制曲线和实验曲线相差很大一般两个原因:
1.绘制图形的参数选择错误
2.公式本身不适合此类数据
我感觉应当是第一种比较有可能,因为如果是第二个相信你自己在cftool的主界面图形中已经看到了

smallkin 发表于 2007-1-30 10:57

对啊,第二个原因不成立,在主界面图形中形成的拟合图形相似度非常高,拟合函数是合适的。我想也应该是参数选择的问题。

anyway,非常感谢你不厌其烦的帮助 :-)

其实我想问题应该这么问就明晰多了,就是如何仅从一个fig图片中获取原来的plot数据?

bainhome 发表于 2007-1-30 13:39

下面我要说的不客气一点儿了,请系好安全带:lol
我承认cftool目前还有不少的缺憾,例如初值依赖性的问题始终存在、不能自动提供拟合函数库等,但是如果连计算结果中的数据都无法提供,那它也不要在数值计算这个行当里混了,下面我来证明你错得有多厉害:
1.运行如下程序:
function DataFitExample
clc
x=1:.2:5;
y=(x+1e-2*(rand(1,length())-.5)).^2;
save Data.mat
2.在command windows中运行:
load Data.mat
cftool
3.在cftool主界面中运行data->fit->gaussian...这些和你的做法步骤完全相同不再罗嗦.
4.点击主界面上的analysis按钮
5.在Analyze at Xi项目中将拟合后数据对的Xi的value换成和原先离散数据相同的1:.2:5
6.在Evaluate fit at Xi项目上打勾,点击apply
这就是拟合后的数据对,在这里点击save to workspace,而不是在fit里面!这样即可以和以前你的原始数据在command windows中进行任何你想要的比较.我想你根本就没有仔细看我前面的回答,因为analysis的问题我在第二个回答中说得很清楚了.
另外,至于什么读取fig中数据的问题,提取图形句柄之后读它当前object的xdata和ydata属性即可,版块里有答案,记得我自己也回答过,不再重复.但是在此处我认为根本用不上,因为你提取数据只是为了验证,效果跟上面一样,不如不做还节省不少思考哪里错了的时间.另外,按你选的gaussian模型,应该是12个参数而不是16个.

[ 本帖最后由 bainhome 于 2007-1-30 13:40 编辑 ]

smallkin 发表于 2007-1-30 22:51

非常感谢!按照你的方法,我已经把拟合曲线的数据保存到matlab的workspace了。感谢这几天来对我的帮助,:handshake ,前面确实对你的有些回复没有仔细看懂,不好意思。

gaussian4阶函数是12个参数,不是16个,我太粗心了:@L

其实我遇到的这个问题,只要认真动脑多思考,真的很容易解决,我就是遇到问题太缺乏思考了。

最后要说,在振动论坛感觉很温馨,学习氛围很好,大家都互相帮助,获益匪浅!

coootri 发表于 2009-11-4 22:16

帮助真是太大了,无意间搜到了这么好的一帖,感谢啊!

蔬菜罐头 发表于 2010-7-27 11:52

受益匪浅,解释的很清楚。

whysylvia 发表于 2011-1-23 22:49

碰到跟楼主一样的问题,bainhome的详解正好对菜鸟很有帮助撒~~{:{36}:}

emilychen2013 发表于 2014-9-17 17:28

bainhome 发表于 2007-1-30 13:39
下面我要说的不客气一点儿了,请系好安全带:lol
我承认cftool目前还有不少的缺憾,例如初值依赖性的问题始 ...

这种方法分析少量数据还可以,如果数据量较大的话,还是code比较快。
fo_ = fitoptions('method','NonlinearLeastSquares','Lower',);      
ft_ = fittype('l*h*(x^(h-1))*exp(-l*x)/gamma(h)-c*L*H*(x^(H-1))*exp(-L*x)/gamma(H)',...
            'dependent',{'y'},'independent',{'x'},...
            'coefficients',{'H', 'L', 'c', 'h', 'l'});
= fit(x,y,ft_,fo_);
for i=1:length(x)
    yy(i)=FO(x(i));
end
变是yy即为拟合后的数据。
FYI.

在海一方 发表于 2015-7-30 02:30

MATLAB2014b,曲线拟合没有analysis这个按钮,我该如何处理呢?
页: [1]
查看完整版本: cftool如何把matlab图形中的数据输出?