M 兼容下 polyfit 计算结果和matlab 不一致,如何设置使其一致?
技术分享
发布于 2025-07-10 10:51:21
查看 1过去327天
问题现象
代码及运行结果如下
c = [30000000000 30100000000 30200000000 30300000000 30400000000 30500000000 30600000000 30700000000 30800000000 30900000000 31000000000 31100000000 31200000000 31300000000 31400000000 31500000000 31600000000 31700000000 31800000000 31900000000 32000000000 32100000000 32200000000.0000 32300000000.0000 32400000000 32500000000 32600000000 32700000000.0000 32800000000.0000 32900000000 33000000000 33100000000 33200000000.0000 33300000000.0000 33400000000 33500000000 33600000000 33700000000.0000 33800000000.0000 33900000000 34000000000 34100000000 34200000000.0000 34300000000.0000 34400000000 34500000000 34600000000 34700000000 34800000000 34900000000 35000000000 35100000000 35200000000 35300000000 35400000000 35500000000 35600000000 35700000000 35800000000 35900000000 36000000000 36100000000 36200000000 36300000000 36400000000 36500000000 36600000000 36700000000 36800000000 36900000000 37000000000 37100000000 37200000000 37300000000 37400000000 37500000000 37600000000 37700000000 37800000000 37900000000 38000000000 38100000000 38200000000 38300000000 38400000000 38500000000 38600000000 38700000000 38800000000 38900000000 39000000000 39100000000 39200000000 39300000000 39400000000 39500000000 39600000000 39700000000 39800000000 39900000000 40000000000 40100000000 40200000000 40300000000 40400000000 40500000000 40600000000 40700000000 40800000000 40900000000 41000000000 41100000000 41200000000 41300000000 41400000000 41500000000 41600000000 41700000000 41800000000 41900000000 42000000000 42100000000 42200000000 42300000000 42400000000 42500000000 42600000000 42700000000 42800000000 42900000000 43000000000 43100000000 43200000000 43300000000 43400000000 43500000000 43600000000 43700000000 43800000000 43900000000 44000000000 44100000000 44200000000 44300000000 44400000000 44500000000 44600000000 44700000000 44800000000 44900000000 45000000000 45100000000 45200000000 45300000000 45400000000 45500000000 45600000000 45700000000 45800000000 45900000000 46000000000 46100000000 46200000000 46300000000 46400000000 46500000000 46600000000 46700000000 46800000000 46900000000 47000000000 47100000000 47200000000 47300000000 47400000000 47500000000 47600000000 47700000000 47800000000 47900000000 48000000000 48100000000 48200000000 48300000000 48400000000 48500000000 48600000000 48700000000 48800000000 48900000000 49000000000 49100000000 49200000000 49300000000 49400000000 49500000000 49600000000 49700000000 49800000000 49900000000 50000000000]
H_mag = [-30.3680 -30.3829 -30.3981 -30.4134 -30.4284 -30.4437 -30.4587 -30.4741 -30.4892 -30.5046 -30.5200 -30.5352 -30.5507 -30.5662 -30.5818 -30.5974 -30.6130 -30.6283 -30.6440 -30.6594 -30.6751 -30.6906 -30.7060 -30.7215 -30.7371 -30.7526 -30.7679 -30.7835 -30.7992 -30.8152 -30.8312 -30.8478 -30.8645 -30.8812 -30.8973 -30.9132 -30.9284 -30.9434 -30.9581 -30.9726 -30.9873 -31.0024 -31.0178 -31.0336 -31.0494 -31.0652 -31.0811 -31.0966 -31.1122 -31.1279 -31.1435 -31.1592 -31.1749 -31.1903 -31.2058 -31.2216 -31.2371 -31.2523 -31.2678 -31.2834 -31.2987 -31.3141 -31.3294 -31.3448 -31.3602 -31.3759 -31.3914 -31.4069 -31.4224 -31.4380 -31.4538 -31.4694 -31.4851 -31.5007 -31.5164 -31.5325 -31.5482 -31.5636 -31.5794 -31.5953 -31.6111 -31.6270 -31.6429 -31.6592 -31.6752 -31.6912 -31.7072 -31.7233 -31.7394 -31.7555 -31.7716 -31.7878 -31.8040 -31.8203 -31.8366 -31.8529 -31.8692 -31.8856 -31.9023 -31.9187 -31.9352 -31.9517 -31.9682 -31.9848 -32.0013 -32.0183 -32.0349 -32.0520 -32.0687 -32.0858 -32.1029 -32.1197 -32.1369 -32.1538 -32.1707 -32.1877 -32.2046 -32.2216 -32.2387 -32.2558 -32.2732 -32.2904 -32.3079 -32.3251 -32.3427 -32.3600 -32.3777 -32.3951 -32.4128 -32.4302 -32.4480 -32.4655 -32.4834 -32.5010 -32.5186 -32.5366 -32.5543 -32.5720 -32.5901 -32.6079 -32.6257 -32.6436 -32.6618 -32.6798 -32.6977 -32.7161 -32.7342 -32.7526 -32.7711 -32.7893 -32.8075 -32.8257 -32.8436 -32.8615 -32.8795 -32.8975 -32.9159 -32.9344 -32.9525 -32.9710 -32.9896 -33.0082 -33.0265 -33.0452 -33.0636 -33.0816 -33.0996 -33.1177 -33.1358 -33.1539 -33.1721 -33.1903 -33.2090 -33.2273 -33.2460 -33.2648 -33.2832 -33.3017 -33.3202 -33.3387 -33.3573 -33.3759 -33.3946 -33.4133 -33.4320 -33.4508 -33.4692 -33.4880 -33.5065 -33.5251 -33.5440 -33.5626 -33.5813 -33.6000 -33.6183 -33.6371 -33.6559 -33.6743 -33.6932 -33.7117 -33.7302]
fit_order_mag = 2
pp_mag = polyfit(c,H_mag, fit_order_mag)

期望对标的 matlab 结果如下:

解决方法
使用 fit 函数替代 polyfit 函数进行对标。
1.将最后一行代码修改为:
% pp_mag = polyfit(c,H_mag, fit_order_mag)
pp_mag = fit(c,H_mag,'poly2') %使用 fit 函数替代
2.运行代码,可以看到已经和期望的 matlab 结果对标:

所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境