《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 562|回复: 9
收起左侧

[提问] 新人求助--griddedInterpolant/subsref错误求解释

[复制链接]

签到天数: 2 天

[LV.1]初来乍到

发表于 2016-7-29 17:22:43 | 显示全部楼层 |阅读模式
源代码如下
x=1:5;
y=1:3;
temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
mesh(x,y,temps)
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi,yi,'cubic');
mesh(xi,yi,zi)
错误显示为:
错误使用 griddedInterpolant/subsref
输入数据的大小不一致。

出错 interp2 (line 158)
    Vq = F(Xq,Yq);

出错 Untitled5 (line 7)
zi=interp2(x,y,temps,xi,yi,'cubic');
实在是找不到错误在哪里,新人求救

签到天数: 70 天

[LV.6]常住居民II

发表于 2016-8-1 11:30:31 | 显示全部楼层
这个是因为你在插值过程中,x,y没有网格化,可以参考interp2函数的示例。简单作如下修改,即可:
  1. x=1:5;
  2. y=1:3;
  3. temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
  4. mesh(x,y,temps)
  5. [x,y]=meshgrid(x,y);
  6. xi=1:0.2:5;
  7. yi=1:0.2:3;
  8. [xi,yi]=meshgrid(xi,yi);
  9. zi=interp2(x,y,temps,xi,yi,'cubic');
  10. mesh(xi,yi,zi)
复制代码

评分

参与人数 1贝壳 +1 贡献 +2 收起 理由
点点滴滴啦啦啦 + 1 + 2 鼓励帮助他人,我们共同进步

查看全部评分

回复 支持 1 反对 0

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

 楼主| 发表于 2016-8-2 10:59:13 | 显示全部楼层
yjw413 发表于 2016-8-1 11:30
这个是因为你在插值过程中,x,y没有网格化,可以参考interp2函数的示例。简单作如下修改,即可:

谢谢你啦,还有一个类似的问题可以帮我看看吗?
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

 楼主| 发表于 2016-8-2 11:00:15 | 显示全部楼层
yjw413 发表于 2016-8-1 11:30
这个是因为你在插值过程中,x,y没有网格化,可以参考interp2函数的示例。简单作如下修改,即可:
  1. x=0:400:5600;
  2. y=0:400:4800;
  3. z=[ 370  470  550  600  670  690  670  620  580  450  400  300  100  150  250;
  4.     510  620  730  800  850  870  850  780  720  650  500  200  300  350  320;
  5.     650  760  880  970  1020 1050 1020 830  900  700  300  500  550  480  350;
  6.     740  880  1060 1230 1390 1500 1500 1400 900  500  700  780  750  650  550;
  7.     910  1090 1270 1500 1200 1100 1350 1450 1200 1150 1010 880  1000 1050 1100;
  8.     950  1190 1370 1500 1200 1100 1550 1600 1550 1380 1070 900  1050 1150 1200;
  9.     1430 1430 1460 1500 1550 1600 1550 1600 1600 1600 1550 1500 1500 1550 1550;
  10.     1420 1430 1450 1480 1500 1550 1510 1430 1300 1200 980  850  750  550  500;
  11.     1380 1410 1430 1450 1470 1320 1280 1200 1080 940  780  620  460  370  350;
  12.     1370 1390 1410 1430 1440 1140 1110 1050 950  820  690  540  380  300  210;
  13.     1350 1370 1390 1400 1410 960  940  880  800  690  570  430  290  210  500];
  14. figure(1);
  15. meshz(x,y,z)
  16. xlable('x'),ylable('y'),zlable('z')
  17. xi=0:50:5600;
  18. yi=0:50:4800;
  19. figure(2)
  20. z1i=interp2(x,y,z,xi,yi,'nearest');
  21. surfc(xi,yi,z1i)
  22. xlable('x'),ylable('y'),zlable('z')
  23. figure(3)
  24. z2i=interp2(x,y,z,xi,yi);
  25. surfc(xi,yi,z2i)
  26. xlable('x'),ylable('y'),zlable('z')
  27. figure(4)
  28. z3i=interp2(x,y,z,xi,yi,'cubic');
  29. surfc(xi,yi,z3i)
  30. xlable('x'),ylable('y'),zlable('z')
  31. figure(5)
  32. subplot(1,3,1),countour(xi,yi,z1i,10,'r');
  33. subplot(1,3,2),countour(xi,yi,z2i,10,'r');
  34. subplot(1,3,3),countour(xi,yi,z3i,10,'r');
复制代码
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

 楼主| 发表于 2016-8-2 11:02:06 | 显示全部楼层
这么说我的错误的:
错误使用 meshz (line 95)
输入参数无效。

出错 moutain (line 15)
meshz(x,y,z)
回复 支持 反对

使用道具 举报

签到天数: 70 天

[LV.6]常住居民II

发表于 2016-8-4 13:50:35 | 显示全部楼层
点点滴滴啦啦啦 发表于 2016-8-2 11:02
这么说我的错误的:
错误使用 meshz (line 95)
输入参数无效。

个人觉得初学时,还是应该就MATLAB的基础知识打牢固一些!
这里提示meshz函数输入无效,说明(x,y,z)的二维维数不一致,这里z的二维数值必须对应x,y一维维数。按照z为11*15,x,y分别对11/15.但是你的y数值为13,修改一下即可。

回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

 楼主| 发表于 2016-8-10 17:15:10 | 显示全部楼层
yjw413 发表于 2016-8-4 13:50
个人觉得初学时,还是应该就MATLAB的基础知识打牢固一些!
这里提示meshz函数输入无效,说明(x,y,z)的二 ...

谢谢大神了,我会努力的!
现在我有有一个问题需要大神指教指教,可以吗?

我按照论坛提供的方法安装了遗传算法的一个工具箱,在使用的过程中出现了这个问题
找不到 'crtbp.m' 的完全匹配项(区分大小写)

最接近的匹配项为 D:\Image\matlab\toolbox\genetic\crtbp.M

要更改文件扩展名,请将目录改变为文件的文件夹,键入:
   movefile crtbp.M crtbp.m_bad; movefile
   crtbp.m_bad crtbp.m,然后改变目录返回。
复制代码

然后我按照提示的输入
movefile crtbp.M crtbp.m_bad;
movefile crtbp.m_bad crtbp.m
复制代码

然后又显示
错误使用 movefile
未找到匹配的文件。
请问是为什么呢?我的调用出问题了还是工具箱没有添加到指定路径,求大神指教
需要我把我的源代码贴出来吗?
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

 楼主| 发表于 2016-8-10 17:16:36 | 显示全部楼层
yjw413 发表于 2016-8-4 13:50
个人觉得初学时,还是应该就MATLAB的基础知识打牢固一些!
这里提示meshz函数输入无效,说明(x,y,z)的二 ...

我还是把源代码贴出来吧,因为怕不能及时看到消息
  1. opt_minmax=1;%目标优化类型:1最大化,-1:最小化
  2. num_ppu=50;%种群规模:个体个数;
  3. num_gen=60;%最大遗传代数
  4. len_ch=20;%基因长度
  5. gap=0.9;%代沟
  6. sub=-1;%变量取值下限
  7. up=2.5;%变量取值上限
  8. cd_gray=1;%是否选择格雷编码方式:1是,0否
  9. sc_log=0;%是否选择对数标度:1是,0否
  10. trace=zeros(num_gen,2);%遗传迭代性能跟踪器
  11. fieldd=[len_ch;sub;up;1-cd_gray;sc_log;1;1];%区域描述器
  12. chorm=crtbp(num_ppu,len_ch);%初始化生成种群
  13. k_gen=0;
  14. x=bs2rv(num_ppu,len_ch);%初始化种群为10
  15. fun_v=fun_sigv(x);%翻译计算目标函数值
  16. tx=sub:01:up;
  17. plot(tx,fun_sigv(tx))
  18. xlabel('x')
  19. ylabel('y')
  20. title('一元函数优化结果')
  21. hold on
  22. while k_gen<num_gen
  23.     fit_v=ranking(-opt_minmax*fun_v);%计算目标函数的适应度
  24.     selchorm=select('rws',chorm,fit_v,gap);%使用轮盘赌方式选择
  25.     selchorm=recombin('xovsp',selchorm);%交叉
  26.     selchorm=mut(selchorm);%变异
  27.     x=bs2rv(selchorm,fieldd);%子代个体翻译
  28.     fun_v_sel=fun_sigv(x);%计算子代个体对应目标函数值
  29.     [chorm,fun_v]=reins(chorm,selchorm,1,1,opt_minmax*fun_v,opt_minmax*fun_v_sel);%根据目标函数值将子代个体插入新种群
  30.     [f,id]=max(fun_v);%寻找当前种群最优解
  31.     x=bs2rv(chorm,fieldd);
  32.     f=f*opt_minmax;
  33.     fun_v=fun_v*opt_minmax;
  34.     k_gen=k_gen+1;
  35.     trace(k_gen,1)=f;
  36.     trace(k_gen,2)=mean(fun_v);
  37. end
  38. plot(x(id),f,'r*')
  39. figure
  40. plot(trace(:,1),'r-*')
  41. hold on
  42. plot(trace(:,2),'b-o')
  43. legend('各子代种群最优解','各子代种群平均值')
  44. xlabel('迭代次数')
  45. ylabel('目标函数优化情况')
  46. title('一元函数优化过程')
  47. movefile crtbp.M crtbp.m_bad;
  48. movefile crtbp.m_bad crtbp.m
复制代码
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

 楼主| 发表于 2016-8-10 17:20:54 | 显示全部楼层
yjw413 发表于 2016-8-4 13:50
个人觉得初学时,还是应该就MATLAB的基础知识打牢固一些!
这里提示meshz函数输入无效,说明(x,y,z)的二 ...

还有我发现,论坛的帖子对我来说都太深了,像我这种对MATLAB只懂一点点皮毛的学生可以在哪一模块进行学习交流啊,还有就是大神能不能给我一个你常用的社交软件的联系方式,这样我有问题可以及时问您,我现在的状况是通常一个程序放在那里,很多错误都不知其所以然,就像刚开始学习C语言一样,但学习c的时候,还可以问老师,现在自己自学MATLAB对于一些浅显的东西来还可以,但是稍微专业一点的东西就很吃力。希望可以得到大神的指教,谢谢!
回复 支持 反对

使用道具 举报

签到天数: 70 天

[LV.6]常住居民II

发表于 2016-8-11 09:38:20 | 显示全部楼层
点点滴滴啦啦啦 发表于 2016-8-10 17:20
还有我发现,论坛的帖子对我来说都太深了,像我这种对MATLAB只懂一点点皮毛的学生可以在哪一模块进行学习 ...

大神谈不上,也就是喜欢玩数值计算,自己积累了一点经验,但是很少用到,所以诸多知识都遗忘了!尽力绵薄之力帮助!
看了MATLAB的帮助文件,movefile函数的用法是movefile('crtbp.M','crtbp.m')
而且按照你的描述,这个事设置的过程,不需要附在你的源代码后面。设置一次就可以 了!遗传算法很有兴趣,但是一直没有接触过,所以专业的也不懂,只能提供MATLAB相关操作的帮助。
QQ:1611368361
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 陕ICP备08102094号

竞彩网
  

GMT+8, 2017-7-23 10:42 , Processed in 0.084856 second(s), 19 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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