声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5404|回复: 7

[编程技巧] Matrix dimensions must agree问题

[复制链接]
发表于 2007-5-22 09:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
建立m文件:
function f=test_E(param,R)
hi=[0.1340 0.1800 0.1171 0.1168 0.1320 0.1790];
f=[param(1).*((hi+param(2))./(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))];
运行:
f=[3.570 2.410 4.506 4.517 4.020 2.630]; R=[0.1827 0.1800 0.1855 0.1852 0.1815 0.1791];
param0=[2 20 0.2 0.1 0.1]; options=optimset('LevenbergMarquardt','on');
param=nlinfit(f,R,@test_E,param0)
输出结果是:
??? Error using ==> ./
Matrix dimensions must agree.
Error in ==> C:\MATLAB6p5\work\test_E.m
On line 3  ==> f=[param(1).*((hi+param(2))./(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))];
Error in ==> C:\MATLAB6p5\toolbox\stats\nlinfit.m
On line 57  ==> if any(size(feval(model,beta0,X)) ~= size(y))
Error in ==> C:\MATLAB6p5\work\cos_9.m
On line 5  ==> param=nlinfit(f,R,@test_E,param0)

修改“./”为“/”; 输出结果是:
??? Error using ==> /
Matrix dimensions must agree.
Error in ==> C:\MATLAB6p5\work\test_E.m
On line 3  ==> f=[param(1).*((hi+param(2))/(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))];
Error in ==> C:\MATLAB6p5\toolbox\stats\nlinfit.m
On line 57  ==> if any(size(feval(model,beta0,X)) ~= size(y))
Error in ==> C:\MATLAB6p5\work\cos_9.m
On line 5  ==> param=nlinfit(f,R,@test_E,param0)
这是为什么啊?? 是因为不能使用nlinfit函数,还是我编写错误啊??

[ 本帖最后由 ChaChing 于 2010-4-29 22:05 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-5-22 09:47 | 显示全部楼层
把问题用word传上来看看.
尤其是公式及hi的意义要写清楚.

[ 本帖最后由 xjzuo 于 2007-5-22 09:48 编辑 ]
 楼主| 发表于 2007-5-22 10:23 | 显示全部楼层

传上ward

程序出错建立getE1.m文件:
function f=getE1(param,data0,hi)
data0=[1 1 1]; x0=data0(1); y0=data0(2); z0=data0(3);
x=[1 2 3 4 5 6 7 8 9]; y=[1 2 3 4 5 6 7 8 9]; z=[1 2 3 4 5 6 7 8 9]; %为了方便,随便弄的数。
n=length(x);
for i=1:n, R=sqrt((x-x0).^2+(y-y0).^2+(z-z0).^2); end
getE1=sum([param(1).*((hi+param(2))./(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))]);
运行:
f=[3.570 2.410 4.506 4.517 4.020 2.630];
hi=[0.1340 0.1800 0.1171 0.1168 0.1320 0.1790];
param=[2 20 0.05 0.02 0.03]; param0=[2 20 0.05 0.02 0.03];
options=optimset('LevenbergMarquardt','on');
param=nlinfit(hi,f,getE1,param0)

显示:
??? Input argument 'param' is undefined.
Error in ==> C:\MATLAB6p5\work\getE1.m
On line 13  ==>  getE1=sum([param(1).*((hi+param(2))./(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))]);
Error in ==> C:\MATLAB6p5\work\cos_9.m
On line 6  ==> param=nlinfit(hi,f,getE1,param0)

是为什么啊?

[ 本帖最后由 ChaChing 于 2010-4-30 00:00 编辑 ]

work.doc

29 KB, 下载次数: 7

发表于 2007-5-22 11:24 | 显示全部楼层
getE1=sum([param(1).*((hi+param(2))./(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))]);

改为
f=sum([param(1).*((hi+param(2))./(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))]);

你的输出参数没有给定。

评分

1

查看全部评分

 楼主| 发表于 2007-5-22 12:28 | 显示全部楼层
做了修改,还是不对....
谁有时间再给看看啊。
显示错误是:
??? Error using ==> ./
Matrix dimensions must agree.

Error in ==> C:\MATLAB6p5\work\getE1.m
On line 16  ==>  f=sum([param(1).*((hi+param(2))./(R+param(3))).*(exp(-2.*param(4).*(R-param(5)))-2.*exp(-param(4).*(R-param(5))))]);
发表于 2007-5-22 13:06 | 显示全部楼层
自己稍微调试一下即可

[ 本帖最后由 ChaChing 于 2010-4-29 22:11 编辑 ]
发表于 2007-5-28 14:14 | 显示全部楼层

急求指教!!!

>> x=[0.028 0.00057 293;0.037 0.00057 293;0.045 0.00057 293;0.053 0.00057 293;0.061 0.00057 293;0.072 0.00057 293;0.08 0.00057 293;0.089 0.00057 293;0.093 0.00057 293;0.106 0.00057 293;0.113 0.00057 293;0.124 0.00057 293;0.133 0.00057 293;0.028 1500 293;0.037 1500 293;0.045 1500 293;0.053 1500 293;0.061 1500 293;0.072 1500 293;0.08 1500 293;0.089 1500 293;0.093 1500 293;0.106 1500 293;0.113 1500 293;0.124 1500 293;0.133 1500 293;0.028 1500 183;0.037 1500 183;0.045 1500 183;0.053 1500 183;0.061 1500 183;0.072 1500 183;0.08 1500 183;0.089 1500 183;0.093 1500 183;0.106 1500 183;0.113 1500 183;0.124 1500 183;0.133 1500 183;0.028 1500 163;0.037 1500 163;0.045 1500 163;0.053 1500 163;0.061 1500 163;0.072 1500 163;0.08 1500 163;0.089 1500 163;0.093 1500 163;0.106 1500 163;0.113 1500 163;0.124 1500 163;0.133 1500 163];
>> y=[1070 1080 1090 1100 1120 1130 1150 1150 1160 1170 1180 1190 1195 1410 1420 1430 1440 1450 1460 1470 1470 1480 1470 1480 1480 1495 1530 1600 1615 1610 1605 1610 1620 1620 1620 1615 1620 1620 1625 1690 1720 1730 1740 1740 1760 1760 1760 1750 1755 1740 1725 1730]';
>> beta0=[1000 0 0];
>> beta = nlinfit(x,y,'mymodel2',beta)

M文件:
function yhat = mymodel(beta, x);
          yhat = (beta(1)*x(:,1)+1080)*(1+beta(2)*log(x(:,2)/0.00057))*(1-beta(3)*(x(:,3)-293)/293);
运行报错,error using=>mtimes
Inner matrix dimensions must agree请大侠指教!!!
发表于 2007-5-28 15:28 | 显示全部楼层
Inner matrix dimensions must agree 和 Matrix dimensions must agree 这些问题只能靠自己调试,因为没有人知道你的编程目的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 05:35 , Processed in 0.108933 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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