- 积分
- 6
- 注册时间
- 2006-5-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2007-12-18 13:42:55
|
显示全部楼层
来自 湖北武汉
简单的办法就是按照ezplot画出的图形导出点数据,再curve fitting toolbox里做拟合。再curve fitting toolbox里拟合曲线是很容易办到的,全图形界面,采用general equation方式建模,效果不错。导出ezplot画出的曲线数据可以按照下面的方法进行。
Step 1: 按照你给的代码画出隐函数图形,有些微改动,加个handle给ezplot命令,如下:
syms x y
w=1.5.*pi;
u=x/sqrt(2).*sqrt(sqrt(1+(2.*w.^2.*y/x.^2).^2)-1);
v=x/sqrt(2).*sqrt(sqrt(1+(2.*w.^2.*y/x.^2).^2)+1);
z=2.*w.^2.*y.*(1-cos(u).*cosh(v))+x.^2.*sin(u).*sinh(v);
h = ezplot(z,[eps,16]);
Step 2: 利用get命令导出曲线数据,注意你的函数实际上有五条曲线组成,你原先给的代码由于设置了axis范围,只显示出一条曲线,开始时候我给这个问题弄得有点糊涂了,后来才找到原因。所以曲线数据存储在XData和YData两个元胞里,可以如下方式调出:
x = get(h,'Xdata');
y = get(h,'Ydata');
xx = x{3,1}; yy = y{3,1}%我这里只调出五条中的第2条用于拟合,其他的类似做就好了
上面两部就导出了ezplot作出的图形数据,下面:
step 3: 再命令行下输入cftool,调出曲线拟合的图形界面
step 4:新建一个任务,以xx做横坐标数据,yy做纵坐标数据
step 5:采用general equation方式建模,输入你要拟合的公式就好了
step 6: Apply,就可以得到拟合好的曲线以及对应的a,b数值;
讨论:ezplot画出的图形似乎类似用contour命令得到的,得到了一组轮廓,存在XData和YData两个cell里,其中cell的第一元素不是真正的图形数据。以本问题为例,x{1,1},y{1,1}不是真正的数据,似乎是用来标记多条数据曲线分割位置用的。真正的数据存在x{2,1},y{2,1}, x{3,1},y{3,1}, x{4,1},y{4,1}, x{5,1},y{5,1}, x{6,1},y{6,1}里面。
还请各位高手多多指教。 |
评分
-
1
查看全部评分
-
|