Matlab 目标函数的二重积分
我想使用内置函数Matlab 目标函数的二重积分,matlab,syntax-error,integral,Matlab,Syntax Error,Integral,我想使用内置函数integral2计算目标函数(名为myfunction,见下文)的二重积分 我试着运行这个脚本 f = @(r,theta) myfunction(r,theta); integral2(f,0,2,0,2*pi); 其中myfunction是以下函数: function fkt=myfunction(r,theta) x=r.*cos(theta); y=r.*sin(theta); los(:,1)=x; los(:,2)=y; norm = (sum( sqrt( lo
integral2
计算目标函数(名为myfunction
,见下文)的二重积分
我试着运行这个脚本
f = @(r,theta) myfunction(r,theta);
integral2(f,0,2,0,2*pi);
其中myfunction
是以下函数:
function fkt=myfunction(r,theta)
x=r.*cos(theta);
y=r.*sin(theta);
los(:,1)=x;
los(:,2)=y;
norm = (sum( sqrt( los(:,1).^2 + los(:,2).^2)));
fkt=norm*r;
end
我在极坐标系下做积分,这就是为什么fkt=norm*r
Matlab向我提供了以下错误消息:
>> untitled2
Subscripted assignment dimension mismatch.
Error in myfunction (line 8)
los(:,1)=x;
我想不出问题出在哪里 x是一个矩阵,您可以尝试将其分配给列向量。有两件事可以改进:
服务水平
未定义los(:,1)
是一列,而x
是一行,因此分配必须失败los
并更改分配来纠正此问题。例如:
los = NaN(numel(r), 2);
los(:,1) = x';
los(:,2) = y';
但是,为什么需要变量服务水平
?只需将其删除,错误就会消失:
function fkt=myfunction(r,theta)
x=r.*cos(theta);
y=r.*sin(theta);
norm = (sum( sqrt(x.^2 + y.^2)));
fkt=norm*r;
end
最好的,我明白了。。。我尝试了以下方法:los(:,1)=x',但它给出了相同的错误消息。我编辑了答案。尝试使用matlab的调试功能查看数据。查看
los
无需定义。在matlab中,它是隐式定义的。而且x是一个矩阵,所以你的例子不起作用。谢谢Ratbert。我尝试了第二种解决方案,得到了以下结果:>>untitled2{警告:当使用不同大小的输入矩阵在两个单独调用中提供相同的输入值时,被积函数的输出与所需的公差不匹配。请检查函数是否已正确向量化。>在integral2Calc>integral2t/张量中(第247行)在integral2Calc>integral2t(第55行)中的integral2Calc(第9行)中的integral2(第106行)中的untitled2(第5行)}当我尝试第一个解决方案(定义服务水平)时,我得到了以下错误:下标分配维度不匹配。myfunction(第5行)服务水平错误(:,1)=x'@第二种解决方案的Elias:添加尺寸(los)和尺寸(x)-无
打印尺寸-就在错误行之前并比较结果。@是的,我知道。我只是给一个新手一些编码建议。