作业帮 > 综合 > 作业

matlab中 内部矩阵维度问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 17:54:45
matlab中 内部矩阵维度问题
源程序为
clc;clear;
x=[100110120130140.1150160.1170180190.2200210.1220230240250260270280290300310320330340350360369.9380390400];
y=[1.531.551.571.591.591.611.61.61.61.591.581.441.421.41.381.361.341.311.281.261.231.21.181.151.121.091.071.041.020.9920.968];
myfunc=inline('beta(1)/sqrt(x)*exp(beta(2)/x+beta(3)/(x*x))','beta','x');
beta=nlinfit(x,y,myfunc,[0 0 0]);
p1=beta(1),p2=beta(2),p3=beta(3)
%test the model
xx=min(x):max(x);
yy=p1./sqrt(x)*exp(p2./x+p3./(x^2));
plot(x,y,'o',x,yy,'r')
运行结果提示内部矩阵维度问题:
错误使用 nlinfit (line 199)Error evaluating inline model function.
原因:错误使用 inlineeval (line 14)
内联表达式出错 ==> beta(1)/sqrt(x)*exp(beta(2)/x+beta(3)/(x*x))
内部矩阵维度必须一致.
能附上正确的程序更好
贴的代码实在格式看不清,贴图就更好了.
x和y是多大的?比如你的inline里面的(x*x)就感觉不对,这个矩阵乘法要求X是方阵.
你也许要用.*和./代替*和/?
再问: 将(x*x)改为(x^2)?
再答: 这下清楚多了。首先X是一个1行31列的矩阵。X*X表示一个矩阵乘法,根据线性代数知识怎么想一个1行31列的矩阵也无法和一个1行31列的矩阵相乘吧?
所谓.*是element-wise的乘法,就是把对应的每个元素相乘,例如[1,2,3].*[1,2,3] = [1,4,9]。^只是*的简单形式,而.^才是.*对应的乘方。
这是Matlab的基础,掌握.*和*的区别和用途。我不知道你的程序要做什么,只是猜测应该把X*X换成X.*X。无论如何你都应该看看matlab参考书搞清楚这个。
再问: 目的是拟合三个参量,现在改了下,基本没问题了。

谢谢!