You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:42:50