Octave中输入为矩阵时如何让函数输出变量值格式为矩阵
问题原因
你当前代码的问题来自两处:
sprintf会将输入的多维数组所有元素按列优先顺序平铺,拼接为单一字符串,直接丢失原有矩阵的维度信息- 函数调用时的参数传递顺序和定义顺序不匹配,也会导致计算结果异常
修正方案
将数值计算逻辑和格式化输出逻辑拆分开,先保留数值矩阵的原始维度,需要显示时再单独处理格式即可。修正后的完整代码如下:
int = input("Introduce the intensity: "); wave = input("Introduce the wavelength: "); e = input("Introduce e: "); function [brighttemp] = brightness_temp_function(int, wave, e) A = 1.19 .* (10 .^ 8); B = 1.441 .* (10 .^ 4); % 先计算数值型亮温,完全保留输入的维度结构 brighttemp = (B ./ (wave .* (log (1 .+ ((e .* A) ./ (int .* (power(wave,5)))))))) .- 273.15; endfunction % 修正参数传递顺序,和函数定义的入参顺序一致 brighttemp = brightness_temp_function(int, wave, e); % 如需统一保留两位小数显示,修改输出格式即可,不破坏矩阵结构 format shortG disp(brighttemp)
额外说明
- 如果你需要得到每个元素保留两位小数的数值结果,可以对输出矩阵做舍入处理:
brighttemp = round(brighttemp * 100) / 100,处理后矩阵维度完全不变 - 不要直接用
sprintf处理多维数值数组,该函数的输出固定为字符串类型,无法保留数值矩阵的结构
内容的提问来源于stack exchange,提问作者itsduo
相关产品推荐
相关产品推荐

