Octave/Matlab多行函数绘图异常问题求助
搞定Octave/Matlab多行函数绘图问题
嘿,我看了你的代码,没法正确生成绘图大概率是变量未定义或者计算过程中出现了NaN/Inf异常值导致的,咱们一步步排查修复:
1. 先补上缺失的变量定义
你的代码里用到了mmPrRev和Akselafstand这两个关键变量,但没给它们赋值——Octave/Matlab可猜不出它们的值,这肯定会直接报错。先给它们设个合理的示例值(你可以根据实际需求修改):
mmPrRev = 1000; % 比如每转毫米数,按需调整 Akselafstand = 50000; % 轴间距,按需调整
2. 修复计算逻辑里的坑
简化c的计算
你写的acos(1)其实等于0(因为cos(0)=1),所以这部分可以直接删掉,简化后的c计算更高效:
c = sqrt((x/mmPrRev).^2 + Akselafstand^2);
如果这里的acos(1)是笔误(比如本来是acos(某个角度值)),记得修正,不然计算出来的c会和你的实际需求不符哦。
避免除零导致的NaN
当c=0时(也就是x/mmPrRev刚好等于Akselafstand的时候),计算Vinkelaendring的分母2*Akselafstand*c会变成0,直接产出NaN值,搞砸后续绘图。咱们可以给c加个小阈值,把接近0的值替换成极小的数:
c(c < 1e-10) = 1e-10; % 防止c为0触发除零错误
简化offset的计算
sind(90 - Vinkelaendring)其实等价于cosd(Vinkelaendring),所以offset的计算可以简化成更直观的正切形式:
offset = tand(Vinkelaendring) * 1000000;
这样既减少了计算量,代码也更易读。
3. 完整可运行的代码
把上面的修改整合起来,完整代码如下:
% 先定义缺失的变量 mmPrRev = 1000; Akselafstand = 50000; x = linspace(0, 200000); c = sqrt((x/mmPrRev).^2 + Akselafstand^2); c(c < 1e-10) = 1e-10; % 规避除零风险 % 计算角度 Vinkelaendring = acosd((Akselafstand^2 + c.^2 - (x/mmPrRev).^2) ./ (2*Akselafstand*c)); % 计算偏移量 offset = tand(Vinkelaendring) * 1000000; % 绘图 plot(x, offset); xlabel("x"); ylabel("y"); title("Simple 2-D Plot"); grid on; % 加个网格更方便看数据趋势
小提示
运行前可以单独打印下c、Vinkelaendring这些变量,比如用disp(Vinkelaendring),看看有没有异常值,这样能更快定位问题~
内容的提问来源于stack exchange,提问作者Martin.E
相关产品推荐
相关产品推荐

