Octave中使用ezplot调用向量参数绘制含xy项隐函数失败问题
问题描述
已知newTheta为4维向量,数值如下:
-6.3702 0.5712 0.2067 0.3877
使用字符串形式的隐函数指令可成功绘图:
ezplot("-6.3702 + 0.5712*x + 0.2067*y + 0.3877*x*y", [-10 10]);
但使用匿名函数调用newTheta向量时:
- 不含
xy交叉项的指令能正常运行:ezplot(@(x,y) newTheta(1) + newTheta(2)*x + newTheta(3)*y, [-10 10]); - 加入
newTheta(4)*x*y交叉项后,指令无法生成图形,画布为空白:ezplot(@(x,y) newTheta(1) + newTheta(2)*x + newTheta(3)*y + newTheta(4)*x *y, [-10 10])
解决方法
问题根源在于Matlab的运算符规则:ezplot对二元匿名函数传入的是网格矩阵形式的x和y,此时x*y执行的是矩阵乘法,而非逐元素乘法,这会导致维度不匹配或计算结果不符合隐函数求解逻辑,最终无法生成曲线。
只需将匿名函数中的x * y替换为逐元素乘法运算符.*,修改后的代码如下:
ezplot(@(x,y) newTheta(1) + newTheta(2)*x + newTheta(3)*y + newTheta(4)*x .* y, [-10 10])
修改后即可正常绘制出与字符串形式指令一致的隐函数图形。
内容的提问来源于stack exchange,提问作者Harshit Chaurasia
相关产品推荐
相关产品推荐

