MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 342|回复: 10|关注: 0

[已答复] 三维曲面模拟问题

[复制链接]

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
发表于 2017-10-12 20:22:31 | 显示全部楼层 |阅读模式
如下是一段简化代码:

fun1=inline('(ref(1)*y+ref(2))*x.^2+(ref(3)*y+ref(4))*x+ref(5)*y+ref(6)','ref','x','y');
fun2=inline('(ref(7)*y+ref(8))*x.^2+(ref(9)*y+ref(10))*x+ref(11)*y+ref(12)','ref','x','y');
fun=@(ref,t,k)((t<=k*2.96+1.076).*fun1(ref,t,k)+(t>k*2.96+1.076).*fun2(ref,t,k));          %以上只是函数分段,不用在意
t=1.01:0.01:2;
k=0.01:0.01:0.25;
v=b;         %这里 b 是一组已知的 25*100的数据矩阵
[tt,kk]=meshgrid(t,k);
beta0=zeros(1,12);
beta=nlinfit([tt,kk],v,fun,beta0);      %然后这一行提示报错,应该是[tt,kk]矩阵选取有问题





那么我想问下,对于这样 t 与 k 长度不一样(也就是x, y 轴),应该如何选取这个矩阵?程序应该如何修改?


不胜感激!

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-10-16 20:56:17 | 显示全部楼层
主要目的是拟合一个如下图所示三维图像的函数:

4.png

由于图像需要分段,使用cftool自定义函数拟合不够精确,所以自己写了上述代码模拟。

代码中t, v, b, 分别对应x y z轴,这里meshgrid了 x y坐标轴似乎并没有错啊?有人说下是哪里出错了吗

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-10-16 22:57:09 | 显示全部楼层
有大佬帮忙解惑吗?

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-10-21 15:20:36 | 显示全部楼层
有人回复么

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-10-28 15:55:26 | 显示全部楼层
顶ding顶

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-11-2 20:51:40 | 显示全部楼层
这个平台对萌新似乎不怎么友好啊····

论坛优秀回答者

15

主题

1691

帖子

99

最佳答案
  • 关注者: 125
发表于 2017-11-2 21:37:27 | 显示全部楼层
Deary2017 发表于 2017-11-2 20:51
这个平台对萌新似乎不怎么友好啊····

拟合应有数据和可能的模型,若提供数据,这类问题定会及时解决。

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-11-2 21:44:00 | 显示全部楼层
stats01 发表于 2017-11-2 21:37
拟合应有数据和可能的模型,若提供数据,这类问题定会及时解决。

好的,其实我没放上数据只是想把问题简化一下,那我把数据和模拟情况放上来

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-11-2 21:47:03 | 显示全部楼层
曲面x轴坐标是:
1.01:0.01:2
y轴坐标是:
0.01:0.01:0.5

z轴数据是一个100*50的数组,见附件

z.mat

2.92 KB, 下载次数: 0

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2017-11-2 21:57:11 | 显示全部楼层
图像大概是如图所示: QQ图片20171102214923.png
可以看到两段分段界限比较明显,图像基本满足

z=(a*y+b)*x+(c*y+d)   的线性形式(除去右上角的部分)

想用nlinfit 来写,如代码

un1=inline('(ref(1)*y+ref(2))*x+(ref(3)*y+ref(4)),'ref','x','y');
fun2=inline('(ref(5)*y+ref(6))*x+(ref(7)*y+ref(8)),'ref','x','y');
fun=@(ref,t,k)((t<=k*2.96+1.076).*fun1(ref,t,k)+(t>k*2.96+1.076).*fun2(ref,t,k));          %以上是函数分段
t=1.01:0.01:2;
k=0.01:0.01:0.5;
v=z;         %这里 z是已知的 50*100的数据矩阵
[tt,kk]=meshgrid(t,k);
beta0=zeros(1,6);
beta=nlinfit([tt,kk],v,fun,beta0);   

最后这里[tt,kk]会报错,之前没有使用nilnfit做过三维曲面的拟合(之前二维曲线分段都没有出错),是不是红字这一行需要改写?感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表